diff --git a/arch/arm/dts/sun50i-a64-bananapi-m64.dts b/arch/arm/dts/sun50i-a64-bananapi-m64.dts
index 883f217..f7fe9fa 100644
--- a/arch/arm/dts/sun50i-a64-bananapi-m64.dts
+++ b/arch/arm/dts/sun50i-a64-bananapi-m64.dts
@@ -36,18 +36,18 @@
 	leds {
 		compatible = "gpio-leds";
 
-		pwr-led {
+		led-0 {
 			label = "bananapi-m64:red:pwr";
 			gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */
 			default-state = "on";
 		};
 
-		green {
+		led-1 {
 			label = "bananapi-m64:green:user";
 			gpios = <&pio 4 14 GPIO_ACTIVE_HIGH>; /* PE14 */
 		};
 
-		blue {
+		led-2 {
 			label = "bananapi-m64:blue:user";
 			gpios = <&pio 4 15 GPIO_ACTIVE_HIGH>; /* PE15 */
 		};
@@ -105,7 +105,7 @@
 &emac {
 	pinctrl-names = "default";
 	pinctrl-0 = <&rgmii_pins>;
-	phy-mode = "rgmii";
+	phy-mode = "rgmii-id";
 	phy-handle = <&ext_rgmii_phy>;
 	phy-supply = <&reg_dc1sw>;
 	status = "okay";
@@ -331,10 +331,10 @@
 				    "Microphone", "Microphone Jack",
 				    "Microphone", "Onboard Microphone";
 	simple-audio-card,routing =
-			"Left DAC", "AIF1 Slot 0 Left",
-			"Right DAC", "AIF1 Slot 0 Right",
-			"AIF1 Slot 0 Left ADC", "Left ADC",
-			"AIF1 Slot 0 Right ADC", "Right ADC",
+			"Left DAC", "DACL",
+			"Right DAC", "DACR",
+			"ADCL", "Left ADC",
+			"ADCR", "Right ADC",
 			"Headphone Jack", "HP",
 			"MIC2", "Microphone Jack",
 			"Onboard Microphone", "MBIAS",
diff --git a/arch/arm/dts/sun50i-a64-nanopi-a64.dts b/arch/arm/dts/sun50i-a64-nanopi-a64.dts
index e58db8a..09b3c7f 100644
--- a/arch/arm/dts/sun50i-a64-nanopi-a64.dts
+++ b/arch/arm/dts/sun50i-a64-nanopi-a64.dts
@@ -35,7 +35,7 @@
 	leds {
 		compatible = "gpio-leds";
 
-		blue {
+		led {
 			label = "nanopi-a64:blue:status";
 			gpios = <&pio 3 24 GPIO_ACTIVE_LOW>; /* PD24 */
 		};
diff --git a/arch/arm/dts/sun50i-a64-orangepi-win.dts b/arch/arm/dts/sun50i-a64-orangepi-win.dts
index fde9c7a..70e3174 100644
--- a/arch/arm/dts/sun50i-a64-orangepi-win.dts
+++ b/arch/arm/dts/sun50i-a64-orangepi-win.dts
@@ -120,7 +120,7 @@
 &emac {
 	pinctrl-names = "default";
 	pinctrl-0 = <&rgmii_pins>;
-	phy-mode = "rgmii";
+	phy-mode = "rgmii-id";
 	phy-handle = <&ext_rgmii_phy>;
 	phy-supply = <&reg_gmac_3v3>;
 	status = "okay";
@@ -330,10 +330,10 @@
 				    "Microphone", "Microphone Jack",
 				    "Microphone", "Onboard Microphone";
 	simple-audio-card,routing =
-			"Left DAC", "AIF1 Slot 0 Left",
-			"Right DAC", "AIF1 Slot 0 Right",
-			"AIF1 Slot 0 Left ADC", "Left ADC",
-			"AIF1 Slot 0 Right ADC", "Right ADC",
+			"Left DAC", "DACL",
+			"Right DAC", "DACR",
+			"ADCL", "Left ADC",
+			"ADCR", "Right ADC",
 			"Headphone Jack", "HP",
 			"MIC2", "Microphone Jack",
 			"Onboard Microphone", "MBIAS",
diff --git a/arch/arm/dts/sun50i-a64-pine64-lts.dts b/arch/arm/dts/sun50i-a64-pine64-lts.dts
index 302e24b..596a259 100644
--- a/arch/arm/dts/sun50i-a64-pine64-lts.dts
+++ b/arch/arm/dts/sun50i-a64-pine64-lts.dts
@@ -1,10 +1,25 @@
 // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
 // Copyright (c) 2018 ARM Ltd.
 
+#include <dt-bindings/leds/common.h>
 #include "sun50i-a64-sopine-baseboard.dts"
 
 / {
 	model = "Pine64 LTS";
 	compatible = "pine64,pine64-lts", "allwinner,sun50i-r18",
 		     "allwinner,sun50i-a64";
+
+	leds {
+		compatible = "gpio-leds";
+
+		led {
+			function = LED_FUNCTION_STATUS;
+			color = <LED_COLOR_ID_BLUE>;
+			gpios = <&r_pio 0 7 GPIO_ACTIVE_LOW>; /* PL7 */
+		};
+	};
+};
+
+&mmc0 {
+	broken-cd;		/* card detect is broken on *some* boards */
 };
diff --git a/arch/arm/dts/sun50i-a64-pine64-plus.dts b/arch/arm/dts/sun50i-a64-pine64-plus.dts
index b26181c..b54099b 100644
--- a/arch/arm/dts/sun50i-a64-pine64-plus.dts
+++ b/arch/arm/dts/sun50i-a64-pine64-plus.dts
@@ -13,7 +13,7 @@
 &emac {
 	pinctrl-names = "default";
 	pinctrl-0 = <&rgmii_pins>;
-	phy-mode = "rgmii";
+	phy-mode = "rgmii-txid";
 	phy-handle = <&ext_rgmii_phy>;
 	status = "okay";
 };
diff --git a/arch/arm/dts/sun50i-a64-pine64.dts b/arch/arm/dts/sun50i-a64-pine64.dts
index 2165f23..329cf27 100644
--- a/arch/arm/dts/sun50i-a64-pine64.dts
+++ b/arch/arm/dts/sun50i-a64-pine64.dts
@@ -261,11 +261,11 @@
 	simple-audio-card,widgets = "Microphone", "Microphone Jack",
 				    "Headphone", "Headphone Jack";
 	simple-audio-card,routing =
-			"Left DAC", "AIF1 Slot 0 Left",
-			"Right DAC", "AIF1 Slot 0 Right",
+			"Left DAC", "DACL",
+			"Right DAC", "DACR",
 			"Headphone Jack", "HP",
-			"AIF1 Slot 0 Left ADC", "Left ADC",
-			"AIF1 Slot 0 Right ADC", "Right ADC",
+			"ADCL", "Left ADC",
+			"ADCR", "Right ADC",
 			"MIC2", "Microphone Jack";
 	status = "okay";
 };
diff --git a/arch/arm/dts/sun50i-a64-pinebook.dts b/arch/arm/dts/sun50i-a64-pinebook.dts
index 64b1c54..7ae1654 100644
--- a/arch/arm/dts/sun50i-a64-pinebook.dts
+++ b/arch/arm/dts/sun50i-a64-pinebook.dts
@@ -126,8 +126,6 @@
 };
 
 &ehci0 {
-	phys = <&usbphy 0>;
-	phy-names = "usb";
 	status = "okay";
 };
 
@@ -169,6 +167,7 @@
 	pinctrl-0 = <&mmc2_pins>, <&mmc2_ds_pin>;
 	vmmc-supply = <&reg_dcdc1>;
 	vqmmc-supply = <&reg_eldo1>;
+	max-frequency = <200000000>;
 	bus-width = <8>;
 	non-removable;
 	cap-mmc-hw-reset;
@@ -177,8 +176,6 @@
 };
 
 &ohci0 {
-	phys = <&usbphy 0>;
-	phy-names = "usb";
 	status = "okay";
 };
 
@@ -374,15 +371,15 @@
 				    "Headphone", "Headphone Jack",
 				    "Speaker", "Internal Speaker";
 	simple-audio-card,routing =
-			"Left DAC", "AIF1 Slot 0 Left",
-			"Right DAC", "AIF1 Slot 0 Right",
+			"Left DAC", "DACL",
+			"Right DAC", "DACR",
 			"Speaker Amp INL", "LINEOUT",
 			"Speaker Amp INR", "LINEOUT",
 			"Internal Speaker", "Speaker Amp OUTL",
 			"Internal Speaker", "Speaker Amp OUTR",
 			"Headphone Jack", "HP",
-			"AIF1 Slot 0 Left ADC", "Left ADC",
-			"AIF1 Slot 0 Right ADC", "Right ADC",
+			"ADCL", "Left ADC",
+			"ADCR", "Right ADC",
 			"Internal Microphone Left", "MBIAS",
 			"MIC1", "Internal Microphone Left",
 			"Internal Microphone Right", "HBIAS",
diff --git a/arch/arm/dts/sun50i-a64-pinephone-1.0.dts b/arch/arm/dts/sun50i-a64-pinephone-1.0.dts
index 0c42272..fb65319 100644
--- a/arch/arm/dts/sun50i-a64-pinephone-1.0.dts
+++ b/arch/arm/dts/sun50i-a64-pinephone-1.0.dts
@@ -7,5 +7,10 @@
 
 / {
 	model = "Pine64 PinePhone Developer Batch (1.0)";
-	compatible = "pine64,pinephone-1.0", "allwinner,sun50i-a64";
+	compatible = "pine64,pinephone-1.0", "pine64,pinephone", "allwinner,sun50i-a64";
+};
+
+&sgm3140 {
+	enable-gpios = <&pio 2 3 GPIO_ACTIVE_HIGH>; /* PC3 */
+	flash-gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */
 };
diff --git a/arch/arm/dts/sun50i-a64-pinephone-1.1.dts b/arch/arm/dts/sun50i-a64-pinephone-1.1.dts
index 3e99a87..5e59d37 100644
--- a/arch/arm/dts/sun50i-a64-pinephone-1.1.dts
+++ b/arch/arm/dts/sun50i-a64-pinephone-1.1.dts
@@ -7,7 +7,7 @@
 
 / {
 	model = "Pine64 PinePhone Braveheart (1.1)";
-	compatible = "pine64,pinephone-1.1", "allwinner,sun50i-a64";
+	compatible = "pine64,pinephone-1.1", "pine64,pinephone", "allwinner,sun50i-a64";
 };
 
 &backlight {
@@ -28,3 +28,8 @@
 	num-interpolated-steps = <50>;
 	default-brightness-level = <400>;
 };
+
+&sgm3140 {
+	enable-gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */
+	flash-gpios = <&pio 2 3 GPIO_ACTIVE_HIGH>; /* PC3 */
+};
diff --git a/arch/arm/dts/sun50i-a64-pinephone-1.2.dts b/arch/arm/dts/sun50i-a64-pinephone-1.2.dts
index a9f5b67..4e7e237 100644
--- a/arch/arm/dts/sun50i-a64-pinephone-1.2.dts
+++ b/arch/arm/dts/sun50i-a64-pinephone-1.2.dts
@@ -7,7 +7,12 @@
 
 / {
 	model = "Pine64 PinePhone (1.2)";
-	compatible = "pine64,pinephone-1.2", "allwinner,sun50i-a64";
+	compatible = "pine64,pinephone-1.2", "pine64,pinephone", "allwinner,sun50i-a64";
+
+	wifi_pwrseq: wifi-pwrseq {
+		compatible = "mmc-pwrseq-simple";
+		reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
+	};
 };
 
 &backlight {
@@ -38,3 +43,12 @@
 	interrupt-parent = <&pio>;
 	interrupts = <1 1 IRQ_TYPE_EDGE_RISING>; /* PB1 */
 };
+
+&mmc1 {
+	mmc-pwrseq = <&wifi_pwrseq>;
+};
+
+&sgm3140 {
+	enable-gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */
+	flash-gpios = <&pio 2 3 GPIO_ACTIVE_HIGH>; /* PC3 */
+};
diff --git a/arch/arm/dts/sun50i-a64-pinephone.dtsi b/arch/arm/dts/sun50i-a64-pinephone.dtsi
index 25150ab..9f69d48 100644
--- a/arch/arm/dts/sun50i-a64-pinephone.dtsi
+++ b/arch/arm/dts/sun50i-a64-pinephone.dtsi
@@ -13,6 +13,7 @@
 
 / {
 	aliases {
+		ethernet0 = &rtl8723cs;
 		serial0 = &uart0;
 	};
 
@@ -20,6 +21,7 @@
 		compatible = "pwm-backlight";
 		pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>;
 		enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */
+		power-supply = <&reg_ps>;
 		/* Backlight configuration differs per PinePhone revision. */
 	};
 
@@ -30,25 +32,51 @@
 	leds {
 		compatible = "gpio-leds";
 
-		blue {
+		led-0 {
 			function = LED_FUNCTION_INDICATOR;
 			color = <LED_COLOR_ID_BLUE>;
 			gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */
 		};
 
-		green {
+		led-1 {
 			function = LED_FUNCTION_INDICATOR;
 			color = <LED_COLOR_ID_GREEN>;
 			gpios = <&pio 3 18 GPIO_ACTIVE_HIGH>; /* PD18 */
 		};
 
-		red {
+		led-2 {
 			function = LED_FUNCTION_INDICATOR;
 			color = <LED_COLOR_ID_RED>;
 			gpios = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */
 		};
 	};
 
+	reg_ps: ps-regulator {
+		compatible = "regulator-fixed";
+		regulator-name = "ps";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		regulator-boot-on;
+	};
+
+	reg_vbat_wifi: vbat-wifi {
+		compatible = "regulator-fixed";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		regulator-name = "vbat-wifi";
+	};
+
+	sgm3140: led-controller {
+		compatible = "sgmicro,sgm3140";
+		vin-supply = <&reg_dcdc1>;
+
+		sgm3140_flash: led {
+			function = LED_FUNCTION_FLASH;
+			color = <LED_COLOR_ID_WHITE>;
+			flash-max-timeout-us = <250000>;
+		};
+	};
+
 	speaker_amp: audio-amplifier {
 		compatible = "simple-audio-amplifier";
 		enable-gpios = <&pio 2 7 GPIO_ACTIVE_HIGH>; /* PC7 */
@@ -142,15 +170,23 @@
 	status = "okay";
 
 	/* Magnetometer */
-	lis3mdl: lis3mdl@1e {
+	lis3mdl: magnetometer@1e {
 		compatible = "st,lis3mdl-magn";
 		reg = <0x1e>;
 		vdd-supply = <&reg_dldo1>;
 		vddio-supply = <&reg_dldo1>;
 	};
 
+	/* Light/proximity sensor */
+	light-sensor@48 {
+		compatible = "sensortek,stk3311";
+		reg = <0x48>;
+		interrupt-parent = <&pio>;
+		interrupts = <1 0 IRQ_TYPE_EDGE_FALLING>; /* PB0 */
+	};
+
 	/* Accelerometer/gyroscope */
-	mpu6050@68 {
+	accelerometer@68 {
 		compatible = "invensense,mpu6050";
 		reg = <0x68>;
 		interrupt-parent = <&pio>;
@@ -167,6 +203,7 @@
 
 &lradc {
 	vref-supply = <&reg_aldo3>;
+	wakeup-source;
 	status = "okay";
 
 	button-200 {
@@ -195,6 +232,20 @@
 	status = "okay";
 };
 
+&mmc1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&mmc1_pins>;
+	vmmc-supply = <&reg_vbat_wifi>;
+	vqmmc-supply = <&reg_dldo4>;
+	bus-width = <4>;
+	non-removable;
+	status = "okay";
+
+	rtl8723cs: wifi@1 {
+		reg = <1>;
+	};
+};
+
 &mmc2 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&mmc2_pins>;
@@ -251,10 +302,6 @@
 
 #include "axp803.dtsi"
 
-&ac_power_supply {
-	status = "okay";
-};
-
 &battery_power_supply {
 	status = "okay";
 };
@@ -274,8 +321,8 @@
 
 &reg_aldo3 {
 	regulator-always-on;
-	regulator-min-microvolt = <2700000>;
-	regulator-max-microvolt = <3300000>;
+	regulator-min-microvolt = <3000000>;
+	regulator-max-microvolt = <3000000>;
 	regulator-name = "vcc-pll-avcc";
 };
 
@@ -392,10 +439,10 @@
 			"Internal Speaker", "Speaker Amp OUTR",
 			"Speaker Amp INL", "LINEOUT",
 			"Speaker Amp INR", "LINEOUT",
-			"Left DAC", "AIF1 Slot 0 Left",
-			"Right DAC", "AIF1 Slot 0 Right",
-			"AIF1 Slot 0 Left ADC", "Left ADC",
-			"AIF1 Slot 0 Right ADC", "Right ADC",
+			"Left DAC", "DACL",
+			"Right DAC", "DACR",
+			"ADCL", "Left ADC",
+			"ADCR", "Right ADC",
 			"Internal Microphone", "MBIAS",
 			"MIC1", "Internal Microphone",
 			"Headset Microphone", "HBIAS",
@@ -408,6 +455,19 @@
 	status = "okay";
 };
 
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
+	status = "okay";
+
+	bluetooth {
+		compatible = "realtek,rtl8723cs-bt";
+		device-wake-gpios = <&pio 7 6 GPIO_ACTIVE_LOW>; /* PH6 */
+		enable-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
+		host-wake-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* PL5 */
+	};
+};
+
 /* Connected to the modem (hardware flow control can't be used) */
 &uart3 {
 	pinctrl-names = "default";
diff --git a/arch/arm/dts/sun50i-a64-pinetab-early-adopter.dts b/arch/arm/dts/sun50i-a64-pinetab-early-adopter.dts
new file mode 100644
index 0000000..6265360
--- /dev/null
+++ b/arch/arm/dts/sun50i-a64-pinetab-early-adopter.dts
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2020 Icenowy Zheng <icenowy@aosc.io>
+ *
+ */
+
+/dts-v1/;
+
+#include "sun50i-a64-pinetab.dts"
+
+/ {
+	model = "PineTab, Early Adopter's version";
+	compatible = "pine64,pinetab-early-adopter", "allwinner,sun50i-a64";
+};
+
+&dsi {
+	/delete-node/ panel@0;
+
+	panel@0 {
+		compatible = "feixin,k101-im2byl02", "ilitek,ili9881c";
+		reg = <0>;
+		power-supply = <&reg_dc1sw>;
+		reset-gpios = <&pio 3 24 GPIO_ACTIVE_LOW>; /* PD24 */
+		backlight = <&backlight>;
+	};
+};
diff --git a/arch/arm/dts/sun50i-a64-pinetab.dts b/arch/arm/dts/sun50i-a64-pinetab.dts
index dc4ab6b..422a850 100644
--- a/arch/arm/dts/sun50i-a64-pinetab.dts
+++ b/arch/arm/dts/sun50i-a64-pinetab.dts
@@ -14,7 +14,7 @@
 #include <dt-bindings/pwm/pwm.h>
 
 / {
-	model = "PineTab";
+	model = "PineTab, Development Sample";
 	compatible = "pine64,pinetab", "allwinner,sun50i-a64";
 
 	aliases {
@@ -122,9 +122,6 @@
 	status = "okay";
 
 	port {
-		#address-cells = <1>;
-		#size-cells = <0>;
-
 		csi_ep: endpoint {
 			remote-endpoint = <&ov5640_ep>;
 			bus-width = <8>;
@@ -421,15 +418,15 @@
 				    "Headphone", "Headphone Jack",
 				    "Speaker", "Internal Speaker";
 	simple-audio-card,routing =
-			"Left DAC", "AIF1 Slot 0 Left",
-			"Right DAC", "AIF1 Slot 0 Right",
+			"Left DAC", "DACL",
+			"Right DAC", "DACR",
 			"Speaker Amp INL", "LINEOUT",
 			"Speaker Amp INR", "LINEOUT",
 			"Internal Speaker", "Speaker Amp OUTL",
 			"Internal Speaker", "Speaker Amp OUTR",
 			"Headphone Jack", "HP",
-			"AIF1 Slot 0 Left ADC", "Left ADC",
-			"AIF1 Slot 0 Right ADC", "Right ADC",
+			"ADCL", "Left ADC",
+			"ADCR", "Right ADC",
 			"Internal Microphone Left", "MBIAS",
 			"MIC1", "Internal Microphone Left",
 			"Internal Microphone Right", "HBIAS",
diff --git a/arch/arm/dts/sun50i-a64-sopine-baseboard.dts b/arch/arm/dts/sun50i-a64-sopine-baseboard.dts
index 2f6ea9f..e22b94c 100644
--- a/arch/arm/dts/sun50i-a64-sopine-baseboard.dts
+++ b/arch/arm/dts/sun50i-a64-sopine-baseboard.dts
@@ -79,7 +79,7 @@
 &emac {
 	pinctrl-names = "default";
 	pinctrl-0 = <&rgmii_pins>;
-	phy-mode = "rgmii";
+	phy-mode = "rgmii-id";
 	phy-handle = <&ext_rgmii_phy>;
 	phy-supply = <&reg_dc1sw>;
 	status = "okay";
@@ -111,6 +111,7 @@
 	bus-width = <8>;
 	non-removable;
 	cap-mmc-hw-reset;
+	mmc-hs200-1_8v;
 	status = "okay";
 };
 
@@ -159,11 +160,11 @@
 	simple-audio-card,widgets = "Microphone", "Microphone Jack",
 				    "Headphone", "Headphone Jack";
 	simple-audio-card,routing =
-			"Left DAC", "AIF1 Slot 0 Left",
-			"Right DAC", "AIF1 Slot 0 Right",
+			"Left DAC", "DACL",
+			"Right DAC", "DACR",
 			"Headphone Jack", "HP",
-			"AIF1 Slot 0 Left ADC", "Left ADC",
-			"AIF1 Slot 0 Right ADC", "Right ADC",
+			"ADCL", "Left ADC",
+			"ADCR", "Right ADC",
 			"MIC2", "Microphone Jack";
 	status = "okay";
 };
diff --git a/arch/arm/dts/sun50i-a64-sopine.dtsi b/arch/arm/dts/sun50i-a64-sopine.dtsi
index c48692b..df62044 100644
--- a/arch/arm/dts/sun50i-a64-sopine.dtsi
+++ b/arch/arm/dts/sun50i-a64-sopine.dtsi
@@ -32,10 +32,9 @@
 	pinctrl-names = "default";
 	pinctrl-0 = <&mmc0_pins>;
 	vmmc-supply = <&reg_dcdc1>;
-	non-removable;
 	disable-wp;
 	bus-width = <4>;
-	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
+	cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 push-pull switch */
 	status = "okay";
 };
 
diff --git a/arch/arm/dts/sun50i-a64-teres-i.dts b/arch/arm/dts/sun50i-a64-teres-i.dts
index f5df5f7..f0a16f3 100644
--- a/arch/arm/dts/sun50i-a64-teres-i.dts
+++ b/arch/arm/dts/sun50i-a64-teres-i.dts
@@ -52,12 +52,12 @@
 	leds {
 		compatible = "gpio-leds";
 
-		capslock {
+		led-0 {
 			label = "teres-i:green:capslock";
 			gpios = <&pio 2 7 GPIO_ACTIVE_HIGH>; /* PC7 */
 		};
 
-		numlock {
+		led-1 {
 			label = "teres-i:green:numlock";
 			gpios = <&pio 2 4 GPIO_ACTIVE_HIGH>; /* PC4 */
 		};
@@ -340,10 +340,10 @@
 				    "Microphone", "Internal Microphone",
 				    "Speaker", "Internal Speaker";
 	simple-audio-card,routing =
-			"Left DAC", "AIF1 Slot 0 Left",
-			"Right DAC", "AIF1 Slot 0 Right",
-			"AIF1 Slot 0 Left ADC", "Left ADC",
-			"AIF1 Slot 0 Right ADC", "Right ADC",
+			"Left DAC", "DACL",
+			"Right DAC", "DACR",
+			"ADCL", "Left ADC",
+			"ADCR", "Right ADC",
 			"Headphone Jack", "HP",
 			"Speaker Amp INL", "LINEOUT",
 			"Speaker Amp INR", "LINEOUT",
diff --git a/arch/arm/dts/sun50i-a64.dtsi b/arch/arm/dts/sun50i-a64.dtsi
index 8dfbcd1..57786fc 100644
--- a/arch/arm/dts/sun50i-a64.dtsi
+++ b/arch/arm/dts/sun50i-a64.dtsi
@@ -51,7 +51,7 @@
 			reg = <0>;
 			enable-method = "psci";
 			next-level-cache = <&L2>;
-			clocks = <&ccu 21>;
+			clocks = <&ccu CLK_CPUX>;
 			clock-names = "cpu";
 			#cooling-cells = <2>;
 		};
@@ -62,7 +62,7 @@
 			reg = <1>;
 			enable-method = "psci";
 			next-level-cache = <&L2>;
-			clocks = <&ccu 21>;
+			clocks = <&ccu CLK_CPUX>;
 			clock-names = "cpu";
 			#cooling-cells = <2>;
 		};
@@ -73,7 +73,7 @@
 			reg = <2>;
 			enable-method = "psci";
 			next-level-cache = <&L2>;
-			clocks = <&ccu 21>;
+			clocks = <&ccu CLK_CPUX>;
 			clock-names = "cpu";
 			#cooling-cells = <2>;
 		};
@@ -84,7 +84,7 @@
 			reg = <3>;
 			enable-method = "psci";
 			next-level-cache = <&L2>;
-			clocks = <&ccu 21>;
+			clocks = <&ccu CLK_CPUX>;
 			clock-names = "cpu";
 			#cooling-cells = <2>;
 		};
@@ -139,10 +139,10 @@
 		simple-audio-card,mclk-fs = <128>;
 		simple-audio-card,aux-devs = <&codec_analog>;
 		simple-audio-card,routing =
-				"Left DAC", "AIF1 Slot 0 Left",
-				"Right DAC", "AIF1 Slot 0 Right",
-				"AIF1 Slot 0 Left ADC", "Left ADC",
-				"AIF1 Slot 0 Right ADC", "Right ADC";
+				"Left DAC", "DACL",
+				"Right DAC", "DACR",
+				"ADCL", "Left ADC",
+				"ADCR", "Right ADC";
 		status = "disabled";
 
 		cpudai: simple-audio-card,cpu {
@@ -157,6 +157,7 @@
 	timer {
 		compatible = "arm,armv8-timer";
 		allwinner,erratum-unknown1;
+		arm,no-tick-in-suspend;
 		interrupts = <GIC_PPI 13
 			(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>,
 			     <GIC_PPI 14
@@ -513,7 +514,7 @@
 			resets = <&ccu RST_BUS_MMC2>;
 			reset-names = "ahb";
 			interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
-			max-frequency = <200000000>;
+			max-frequency = <150000000>;
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
@@ -592,6 +593,8 @@
 				 <&ccu CLK_USB_OHCI0>;
 			resets = <&ccu RST_BUS_OHCI0>,
 				 <&ccu RST_BUS_EHCI0>;
+			phys = <&usbphy 0>;
+			phy-names = "usb";
 			status = "disabled";
 		};
 
@@ -602,6 +605,8 @@
 			clocks = <&ccu CLK_BUS_OHCI0>,
 				 <&ccu CLK_USB_OHCI0>;
 			resets = <&ccu RST_BUS_OHCI0>;
+			phys = <&usbphy 0>;
+			phy-names = "usb";
 			status = "disabled";
 		};
 
@@ -845,6 +850,20 @@
 			status = "disabled";
 		};
 
+		i2s2: i2s@1c22800 {
+			#sound-dai-cells = <0>;
+			compatible = "allwinner,sun50i-a64-i2s",
+				     "allwinner,sun8i-h3-i2s";
+			reg = <0x01c22800 0x400>;
+			interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_I2S2>, <&ccu CLK_I2S2>;
+			clock-names = "apb", "mod";
+			resets = <&ccu RST_BUS_I2S2>;
+			dma-names = "rx", "tx";
+			dmas = <&dma 27>, <&dma 27>;
+			status = "disabled";
+		};
+
 		dai: dai@1c22c00 {
 			#sound-dai-cells = <0>;
 			compatible = "allwinner,sun50i-a64-codec-i2s";
@@ -860,7 +879,8 @@
 
 		codec: codec@1c22e00 {
 			#sound-dai-cells = <0>;
-			compatible = "allwinner,sun8i-a33-codec";
+			compatible = "allwinner,sun50i-a64-codec",
+				     "allwinner,sun8i-a33-codec";
 			reg = <0x01c22e00 0x600>;
 			interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
 			clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_AC_DIG>;
diff --git a/arch/arm/dts/sun8i-r40-bananapi-m2-ultra.dts b/arch/arm/dts/sun8i-r40-bananapi-m2-ultra.dts
index c488aaa..a6a1087 100644
--- a/arch/arm/dts/sun8i-r40-bananapi-m2-ultra.dts
+++ b/arch/arm/dts/sun8i-r40-bananapi-m2-ultra.dts
@@ -129,7 +129,7 @@
 	pinctrl-names = "default";
 	pinctrl-0 = <&gmac_rgmii_pins>;
 	phy-handle = <&phy1>;
-	phy-mode = "rgmii";
+	phy-mode = "rgmii-id";
 	phy-supply = <&reg_dc1sw>;
 	status = "okay";
 };
@@ -164,6 +164,10 @@
 
 #include "axp22x.dtsi"
 
+&ir0 {
+	status = "okay";
+};
+
 &mmc0 {
 	vmmc-supply = <&reg_dcdc1>;
 	bus-width = <4>;
@@ -201,10 +205,15 @@
 &pio {
 	pinctrl-names = "default";
 	pinctrl-0 = <&clk_out_a_pin>;
+	vcc-pa-supply = <&reg_aldo2>;
+	vcc-pc-supply = <&reg_dcdc1>;
+	vcc-pd-supply = <&reg_dcdc1>;
+	vcc-pe-supply = <&reg_eldo1>;
+	vcc-pf-supply = <&reg_dcdc1>;
+	vcc-pg-supply = <&reg_dldo1>;
 };
 
 &reg_aldo2 {
-	regulator-always-on;
 	regulator-min-microvolt = <2500000>;
 	regulator-max-microvolt = <2500000>;
 	regulator-name = "vcc-pa";
@@ -218,16 +227,16 @@
 };
 
 &reg_dc1sw {
-	regulator-min-microvolt = <3000000>;
-	regulator-max-microvolt = <3000000>;
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
 	regulator-name = "vcc-gmac-phy";
 };
 
 &reg_dcdc1 {
 	regulator-always-on;
-	regulator-min-microvolt = <3000000>;
-	regulator-max-microvolt = <3000000>;
-	regulator-name = "vcc-3v0";
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
+	regulator-name = "vcc-3v3";
 };
 
 &reg_dcdc2 {
diff --git a/arch/arm/dts/sun8i-r40.dtsi b/arch/arm/dts/sun8i-r40.dtsi
index 06b6858..d5ad3b9 100644
--- a/arch/arm/dts/sun8i-r40.dtsi
+++ b/arch/arm/dts/sun8i-r40.dtsi
@@ -44,8 +44,10 @@
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/clock/sun8i-de2.h>
 #include <dt-bindings/clock/sun8i-r40-ccu.h>
+#include <dt-bindings/clock/sun8i-tcon-top.h>
 #include <dt-bindings/reset/sun8i-r40-ccu.h>
 #include <dt-bindings/reset/sun8i-de2.h>
+#include <dt-bindings/thermal/thermal.h>
 
 / {
 	#address-cells = <1>;
@@ -78,25 +80,25 @@
 		#address-cells = <1>;
 		#size-cells = <0>;
 
-		cpu@0 {
+		cpu0: cpu@0 {
 			compatible = "arm,cortex-a7";
 			device_type = "cpu";
 			reg = <0>;
 		};
 
-		cpu@1 {
+		cpu1: cpu@1 {
 			compatible = "arm,cortex-a7";
 			device_type = "cpu";
 			reg = <1>;
 		};
 
-		cpu@2 {
+		cpu2: cpu@2 {
 			compatible = "arm,cortex-a7";
 			device_type = "cpu";
 			reg = <2>;
 		};
 
-		cpu@3 {
+		cpu3: cpu@3 {
 			compatible = "arm,cortex-a7";
 			device_type = "cpu";
 			reg = <3>;
@@ -109,6 +111,22 @@
 		status = "disabled";
 	};
 
+	thermal-zones {
+		cpu_thermal: cpu0-thermal {
+			/* milliseconds */
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&ths 0>;
+		};
+
+		gpu_thermal: gpu-thermal {
+			/* milliseconds */
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&ths 1>;
+		};
+	};
+
 	soc {
 		compatible = "simple-bus";
 		#address-cells = <1>;
@@ -118,11 +136,11 @@
 		display_clocks: clock@1000000 {
 			compatible = "allwinner,sun8i-r40-de2-clk",
 				     "allwinner,sun8i-h3-de2-clk";
-			reg = <0x01000000 0x100000>;
-			clocks = <&ccu CLK_DE>,
-				 <&ccu CLK_BUS_DE>;
-			clock-names = "mod",
-				      "bus";
+			reg = <0x01000000 0x10000>;
+			clocks = <&ccu CLK_BUS_DE>,
+				 <&ccu CLK_DE>;
+			clock-names = "bus",
+				      "mod";
 			resets = <&ccu RST_BUS_DE>;
 			#clock-cells = <1>;
 			#reset-cells = <1>;
@@ -172,6 +190,48 @@
 			};
 		};
 
+		deinterlace: deinterlace@1400000 {
+			compatible = "allwinner,sun8i-r40-deinterlace",
+				     "allwinner,sun8i-h3-deinterlace";
+			reg = <0x01400000 0x20000>;
+			clocks = <&ccu CLK_BUS_DEINTERLACE>,
+				 <&ccu CLK_DEINTERLACE>,
+				 /*
+				  * NOTE: Contrary to what datasheet claims,
+				  * DRAM deinterlace gate doesn't exist and
+				  * it's shared with CSI1.
+				  */
+				 <&ccu CLK_DRAM_CSI1>;
+			clock-names = "bus", "mod", "ram";
+			resets = <&ccu RST_BUS_DEINTERLACE>;
+			interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
+			interconnects = <&mbus 9>;
+			interconnect-names = "dma-mem";
+		};
+
+		syscon: system-control@1c00000 {
+			compatible = "allwinner,sun8i-r40-system-control",
+				     "allwinner,sun4i-a10-system-control";
+			reg = <0x01c00000 0x30>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges;
+
+			sram_c: sram@1d00000 {
+				compatible = "mmio-sram";
+				reg = <0x01d00000 0xd0000>;
+				#address-cells = <1>;
+				#size-cells = <1>;
+				ranges = <0 0x01d00000 0xd0000>;
+
+				ve_sram: sram-section@0 {
+					compatible = "allwinner,sun8i-r40-sram-c1",
+						     "allwinner,sun4i-a10-sram-c1";
+					reg = <0x000000 0x80000>;
+				};
+			};
+		};
+
 		nmi_intc: interrupt-controller@1c00030 {
 			compatible = "allwinner,sun7i-a20-sc-nmi";
 			interrupt-controller;
@@ -180,6 +240,69 @@
 			interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
 		};
 
+		dma: dma-controller@1c02000 {
+			compatible = "allwinner,sun8i-r40-dma",
+				     "allwinner,sun50i-a64-dma";
+			reg = <0x01c02000 0x1000>;
+			interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_DMA>;
+			dma-channels = <16>;
+			dma-requests = <31>;
+			resets = <&ccu RST_BUS_DMA>;
+			#dma-cells = <1>;
+		};
+
+		spi0: spi@1c05000 {
+			compatible = "allwinner,sun8i-r40-spi",
+				     "allwinner,sun8i-h3-spi";
+			reg = <0x01c05000 0x1000>;
+			interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
+			clock-names = "ahb", "mod";
+			resets = <&ccu RST_BUS_SPI0>;
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		spi1: spi@1c06000 {
+			compatible = "allwinner,sun8i-r40-spi",
+				     "allwinner,sun8i-h3-spi";
+			reg = <0x01c06000 0x1000>;
+			interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_SPI1>;
+			clock-names = "ahb", "mod";
+			resets = <&ccu RST_BUS_SPI1>;
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		csi0: csi@1c09000 {
+			compatible = "allwinner,sun8i-r40-csi0",
+				     "allwinner,sun7i-a20-csi0";
+			reg = <0x01c09000 0x1000>;
+			interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_CSI0>, <&ccu CLK_CSI_SCLK>,
+				 <&ccu CLK_DRAM_CSI0>;
+			clock-names = "bus", "isp", "ram";
+			resets = <&ccu RST_BUS_CSI0>;
+			interconnects = <&mbus 5>;
+			interconnect-names = "dma-mem";
+			status = "disabled";
+		};
+
+		video-codec@1c0e000 {
+			compatible = "allwinner,sun8i-r40-video-engine";
+			reg = <0x01c0e000 0x1000>;
+			clocks = <&ccu CLK_BUS_VE>, <&ccu CLK_VE>,
+			<&ccu CLK_DRAM_VE>;
+			clock-names = "ahb", "mod", "ram";
+			resets = <&ccu RST_BUS_VE>;
+			interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
+			allwinner,sram = <&ve_sram 1>;
+		};
+
 		mmc0: mmc@1c0f000 {
 			compatible = "allwinner,sun8i-r40-mmc",
 				     "allwinner,sun50i-a64-mmc";
@@ -266,6 +389,38 @@
 			#phy-cells = <1>;
 		};
 
+		crypto: crypto@1c15000 {
+			compatible = "allwinner,sun8i-r40-crypto";
+			reg = <0x01c15000 0x1000>;
+			interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_CE>, <&ccu CLK_CE>;
+			clock-names = "bus", "mod";
+			resets = <&ccu RST_BUS_CE>;
+		};
+
+		spi2: spi@1c17000 {
+			compatible = "allwinner,sun8i-r40-spi",
+				     "allwinner,sun8i-h3-spi";
+			reg = <0x01c17000 0x1000>;
+			interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_SPI2>, <&ccu CLK_SPI2>;
+			clock-names = "ahb", "mod";
+			resets = <&ccu RST_BUS_SPI2>;
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		ahci: sata@1c18000 {
+			compatible = "allwinner,sun8i-r40-ahci";
+			reg = <0x01c18000 0x1000>;
+			interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_SATA>, <&ccu CLK_SATA>;
+			resets = <&ccu RST_BUS_SATA>;
+			reset-names = "ahci";
+			status = "disabled";
+		};
+
 		ehci1: usb@1c19000 {
 			compatible = "allwinner,sun8i-r40-ehci", "generic-ehci";
 			reg = <0x01c19000 0x100>;
@@ -312,6 +467,19 @@
 			status = "disabled";
 		};
 
+		spi3: spi@1c1f000 {
+			compatible = "allwinner,sun8i-r40-spi",
+				     "allwinner,sun8i-h3-spi";
+			reg = <0x01c1f000 0x1000>;
+			interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&ccu CLK_BUS_SPI3>, <&ccu CLK_SPI3>;
+			clock-names = "ahb", "mod";
+			resets = <&ccu RST_BUS_SPI3>;
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
 		ccu: clock@1c20000 {
 			compatible = "allwinner,sun8i-r40-ccu";
 			reg = <0x01c20000 0x400>;
@@ -322,8 +490,7 @@
 		};
 
 		rtc: rtc@1c20400 {
-			compatible = "allwinner,sun8i-r40-rtc",
-				     "allwinner,sun8i-h3-rtc";
+			compatible = "allwinner,sun8i-r40-rtc";
 			reg = <0x01c20400 0x400>;
 			interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
 			clock-output-names = "osc32k", "osc32k-out";
@@ -347,6 +514,20 @@
 				function = "clk_out_a";
 			};
 
+			/omit-if-no-ref/
+			csi0_8bits_pins: csi0-8bits-pins {
+				pins = "PE0", "PE2", "PE3", "PE4", "PE5",
+				       "PE6", "PE7", "PE8", "PE9", "PE10",
+				       "PE11";
+				function = "csi0";
+			};
+
+			/omit-if-no-ref/
+			csi0_mclk_pin: csi0-mclk-pin {
+				pins = "PE1";
+				function = "csi0";
+			};
+
 			gmac_rgmii_pins: gmac-rgmii-pins {
 				pins = "PA0", "PA1", "PA2", "PA3",
 				       "PA4", "PA5", "PA6", "PA7",
@@ -365,6 +546,36 @@
 				function = "i2c0";
 			};
 
+			i2c1_pins: i2c1-pins {
+				pins = "PB18", "PB19";
+				function = "i2c1";
+			};
+
+			i2c2_pins: i2c2-pins {
+				pins = "PB20", "PB21";
+				function = "i2c2";
+			};
+
+			i2c3_pins: i2c3-pins {
+				pins = "PI0", "PI1";
+				function = "i2c3";
+			};
+
+			i2c4_pins: i2c4-pins {
+				pins = "PI2", "PI3";
+				function = "i2c4";
+			};
+
+			ir0_pins: ir0-pins {
+				pins = "PB4";
+				function = "ir0";
+			};
+
+			ir1_pins: ir1-pins {
+				pins = "PB23";
+				function = "ir1";
+			};
+
 			mmc0_pins: mmc0-pins {
 				pins = "PF0", "PF1", "PF2",
 				       "PF3", "PF4", "PF5";
@@ -390,6 +601,36 @@
 				bias-pull-up;
 			};
 
+			/omit-if-no-ref/
+			spi0_pc_pins: spi0-pc-pins {
+				pins = "PC0", "PC1", "PC2";
+				function = "spi0";
+			};
+
+			/omit-if-no-ref/
+			spi0_cs0_pc_pin: spi0-cs0-pc-pin {
+				pins = "PC23";
+				function = "spi0";
+			};
+
+			/omit-if-no-ref/
+			spi1_pi_pins: spi1-pi-pins {
+				pins = "PI17", "PI18", "PI19";
+				function = "spi1";
+			};
+
+			/omit-if-no-ref/
+			spi1_cs0_pi_pin: spi1-cs0-pi-pin {
+				pins = "PI16";
+				function = "spi1";
+			};
+
+			/omit-if-no-ref/
+			spi1_cs1_pi_pin: spi1-cs1-pi-pin {
+				pins = "PI15";
+				function = "spi1";
+			};
+
 			uart0_pb_pins: uart0-pb-pins {
 				pins = "PB22", "PB23";
 				function = "uart0";
@@ -409,6 +650,45 @@
 		wdt: watchdog@1c20c90 {
 			compatible = "allwinner,sun4i-a10-wdt";
 			reg = <0x01c20c90 0x10>;
+			interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&osc24M>;
+		};
+
+		ir0: ir@1c21800 {
+			compatible = "allwinner,sun8i-r40-ir",
+				     "allwinner,sun6i-a31-ir";
+			reg = <0x01c21800 0x400>;
+			pinctrl-0 = <&ir0_pins>;
+			pinctrl-names = "default";
+			clocks = <&ccu CLK_BUS_IR0>, <&ccu CLK_IR0>;
+			clock-names = "apb", "ir";
+			interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
+			resets = <&ccu RST_BUS_IR0>;
+			status = "disabled";
+		};
+
+		ir1: ir@1c21c00 {
+			compatible = "allwinner,sun8i-r40-ir",
+				     "allwinner,sun6i-a31-ir";
+			reg = <0x01c21c00 0x400>;
+			pinctrl-0 = <&ir1_pins>;
+			pinctrl-names = "default";
+			clocks = <&ccu CLK_BUS_IR1>, <&ccu CLK_IR1>;
+			clock-names = "apb", "ir";
+			interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+			resets = <&ccu RST_BUS_IR1>;
+			status = "disabled";
+		};
+
+		ths: thermal-sensor@1c24c00 {
+			compatible = "allwinner,sun8i-r40-ths";
+			reg = <0x01c24c00 0x100>;
+			clocks = <&ccu CLK_BUS_THS>, <&ccu CLK_THS>;
+			clock-names = "bus", "mod";
+			interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
+			resets = <&ccu RST_BUS_THS>;
+			/* TODO: add nvmem-cells for calibration */
+			#thermal-sensor-cells = <1>;
 		};
 
 		uart0: serial@1c28000 {
@@ -518,6 +798,8 @@
 			interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
 			clocks = <&ccu CLK_BUS_I2C1>;
 			resets = <&ccu RST_BUS_I2C1>;
+			pinctrl-0 = <&i2c1_pins>;
+			pinctrl-names = "default";
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
@@ -529,6 +811,8 @@
 			interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
 			clocks = <&ccu CLK_BUS_I2C2>;
 			resets = <&ccu RST_BUS_I2C2>;
+			pinctrl-0 = <&i2c2_pins>;
+			pinctrl-names = "default";
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
@@ -540,6 +824,8 @@
 			interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
 			clocks = <&ccu CLK_BUS_I2C3>;
 			resets = <&ccu RST_BUS_I2C3>;
+			pinctrl-0 = <&i2c3_pins>;
+			pinctrl-names = "default";
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
@@ -551,22 +837,33 @@
 			interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
 			clocks = <&ccu CLK_BUS_I2C4>;
 			resets = <&ccu RST_BUS_I2C4>;
+			pinctrl-0 = <&i2c4_pins>;
+			pinctrl-names = "default";
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
 		};
 
-		ahci: sata@1c18000 {
-			compatible = "allwinner,sun8i-r40-ahci";
-			reg = <0x01c18000 0x1000>;
-			interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&ccu CLK_BUS_SATA>, <&ccu CLK_SATA>;
-			resets = <&ccu RST_BUS_SATA>;
-			resets-name = "ahci";
-			#address-cells = <1>;
-			#size-cells = <0>;
-			status = "disabled";
-
+		mali: gpu@1c40000 {
+			compatible = "allwinner,sun8i-r40-mali", "arm,mali-400";
+			reg = <0x01c40000 0x10000>;
+			interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "gp",
+					  "gpmmu",
+					  "pp0",
+					  "ppmmu0",
+					  "pp1",
+					  "ppmmu1",
+					  "pmu";
+			clocks = <&ccu CLK_BUS_GPU>, <&ccu CLK_GPU>;
+			clock-names = "bus", "core";
+			resets = <&ccu RST_BUS_GPU>;
 		};
 
 		gmac: ethernet@1c50000 {
@@ -588,6 +885,16 @@
 			};
 		};
 
+		mbus: dram-controller@1c62000 {
+			compatible = "allwinner,sun8i-r40-mbus";
+			reg = <0x01c62000 0x1000>;
+			clocks = <&ccu 155>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			dma-ranges = <0x00000000 0x40000000 0x80000000>;
+			#interconnect-cells = <1>;
+		};
+
 		tcon_top: tcon-top@1c70000 {
 			compatible = "allwinner,sun8i-r40-tcon-top";
 			reg = <0x01c70000 0x1000>;
@@ -614,12 +921,9 @@
 				#size-cells = <0>;
 
 				tcon_top_mixer0_in: port@0 {
-					#address-cells = <1>;
-					#size-cells = <0>;
 					reg = <0>;
 
-					tcon_top_mixer0_in_mixer0: endpoint@0 {
-						reg = <0>;
+					tcon_top_mixer0_in_mixer0: endpoint {
 						remote-endpoint = <&mixer0_out_tcon_top>;
 					};
 				};
@@ -713,7 +1017,7 @@
 			compatible = "allwinner,sun8i-r40-tcon-tv";
 			reg = <0x01c73000 0x1000>;
 			interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&ccu CLK_BUS_TCON_TV0>, <&tcon_top 0>;
+			clocks = <&ccu CLK_BUS_TCON_TV0>, <&tcon_top CLK_TCON_TOP_TV0>;
 			clock-names = "ahb", "tcon-ch1";
 			resets = <&ccu RST_BUS_TCON_TV0>;
 			reset-names = "lcd";
@@ -756,7 +1060,7 @@
 			compatible = "allwinner,sun8i-r40-tcon-tv";
 			reg = <0x01c74000 0x1000>;
 			interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
-			clocks = <&ccu CLK_BUS_TCON_TV1>, <&tcon_top 1>;
+			clocks = <&ccu CLK_BUS_TCON_TV1>, <&tcon_top CLK_TCON_TOP_TV1>;
 			clock-names = "ahb", "tcon-ch1";
 			resets = <&ccu RST_BUS_TCON_TV1>;
 			reset-names = "lcd";
@@ -798,7 +1102,7 @@
 		gic: interrupt-controller@1c81000 {
 			compatible = "arm,gic-400";
 			reg = <0x01c81000 0x1000>,
-			      <0x01c82000 0x1000>,
+			      <0x01c82000 0x2000>,
 			      <0x01c84000 0x2000>,
 			      <0x01c86000 0x2000>;
 			interrupt-controller;
@@ -818,7 +1122,7 @@
 			resets = <&ccu RST_BUS_HDMI1>;
 			reset-names = "ctrl";
 			phys = <&hdmi_phy>;
-			phy-names = "hdmi-phy";
+			phy-names = "phy";
 			status = "disabled";
 
 			ports {
@@ -843,7 +1147,7 @@
 			compatible = "allwinner,sun8i-r40-hdmi-phy";
 			reg = <0x01ef0000 0x10000>;
 			clocks = <&ccu CLK_BUS_HDMI1>, <&ccu CLK_HDMI_SLOW>,
-				 <&ccu 7>, <&ccu 16>;
+				 <&ccu CLK_PLL_VIDEO0>, <&ccu CLK_PLL_VIDEO1>;
 			clock-names = "bus", "mod", "pll-0", "pll-1";
 			resets = <&ccu RST_BUS_HDMI0>;
 			reset-names = "phy";
@@ -851,6 +1155,15 @@
 		};
 	};
 
+	pmu {
+		compatible = "arm,cortex-a7-pmu";
+		interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
+	};
+
 	timer {
 		compatible = "arm,armv7-timer";
 		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
diff --git a/arch/arm/dts/sun8i-v40-bananapi-m2-berry.dts b/arch/arm/dts/sun8i-v40-bananapi-m2-berry.dts
index 15c22b0..4795455 100644
--- a/arch/arm/dts/sun8i-v40-bananapi-m2-berry.dts
+++ b/arch/arm/dts/sun8i-v40-bananapi-m2-berry.dts
@@ -120,7 +120,7 @@
 	pinctrl-names = "default";
 	pinctrl-0 = <&gmac_rgmii_pins>;
 	phy-handle = <&phy1>;
-	phy-mode = "rgmii";
+	phy-mode = "rgmii-id";
 	phy-supply = <&reg_dc1sw>;
 	status = "okay";
 };
@@ -198,16 +198,16 @@
 };
 
 &reg_dc1sw {
-	regulator-min-microvolt = <3000000>;
-	regulator-max-microvolt = <3000000>;
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
 	regulator-name = "vcc-gmac-phy";
 };
 
 &reg_dcdc1 {
 	regulator-always-on;
-	regulator-min-microvolt = <3000000>;
-	regulator-max-microvolt = <3000000>;
-	regulator-name = "vcc-3v0";
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
+	regulator-name = "vcc-3v3";
 };
 
 &reg_dcdc2 {
diff --git a/arch/mips/dts/Makefile b/arch/mips/dts/Makefile
index 7c42923..215283c 100644
--- a/arch/mips/dts/Makefile
+++ b/arch/mips/dts/Makefile
@@ -20,6 +20,7 @@
 dtb-$(CONFIG_BOARD_GARDENA_SMART_GATEWAY_MT7688) += gardena-smart-gateway-mt7688.dtb
 dtb-$(CONFIG_BOARD_LINKIT_SMART_7688) += linkit-smart-7688.dtb
 dtb-$(CONFIG_TARGET_OCTEON_EBB7304) += mrvl,octeon-ebb7304.dtb
+dtb-$(CONFIG_TARGET_OCTEON_NIC23) += mrvl,octeon-nic23.dtb
 dtb-$(CONFIG_BOARD_NETGEAR_CG3100D) += netgear,cg3100d.dtb
 dtb-$(CONFIG_BOARD_NETGEAR_DGND3700V2) += netgear,dgnd3700v2.dtb
 dtb-$(CONFIG_BOARD_SAGEM_FAST1704) += sagem,f@st1704.dtb
diff --git a/arch/mips/dts/mrvl,cn73xx.dtsi b/arch/mips/dts/mrvl,cn73xx.dtsi
index 27cdfd0..2a17f7a 100644
--- a/arch/mips/dts/mrvl,cn73xx.dtsi
+++ b/arch/mips/dts/mrvl,cn73xx.dtsi
@@ -97,6 +97,7 @@
 		uart0: serial@1180000000800 {
 			compatible = "cavium,octeon-3860-uart","ns16550";
 			reg = <0x11800 0x00000800 0x0 0x400>;
+			clocks = <&clk OCTEON_CLK_IO>;
 			clock-frequency = <0>;
 			current-speed = <115200>;
 			reg-shift = <3>;
@@ -106,6 +107,7 @@
 		uart1: serial@1180000000c00 {
 			compatible = "cavium,octeon-3860-uart","ns16550";
 			reg = <0x11800 0x00000c00 0x0 0x400>;
+			clocks = <&clk OCTEON_CLK_IO>;
 			clock-frequency = <0>;
 			current-speed = <115200>;
 			reg-shift = <3>;
@@ -230,5 +232,40 @@
 				dr_mode = "host";
 			};
 		};
+
+		/* PCIe 0 */
+		pcie0: pcie@1180069000000 {
+			compatible =  "marvell,pcie-host-octeon";
+			reg = <0 0xf2600000 0 0x10000>;
+			#address-cells = <3>;
+			#size-cells = <2>;
+			device_type = "pci";
+			dma-coherent;
+
+			bus-range = <0 0xff>;
+			marvell,pcie-port = <0>;
+			ranges = <0x81000000 0x00000000 0xd0000000 0x00011a00 0xd0000000 0x00000000 0x01000000 /* IO */
+				  0x02000000 0x00000000 0xe0000000 0x00011b00 0xe0000000 0x00000000 0x10000000	/* non-prefetchable memory */
+				  0x43000000 0x00011c00 0x00000000 0x00011c00 0x00000000 0x00000010 0x00000000>;/* prefetchable memory */
+		};
+
+		uctl@118006c000000 {
+			compatible = "cavium,octeon-7130-sata-uctl", "simple-bus";
+			reg = <0x11800 0x6c000000 0x0 0x100>;
+			ranges; /* Direct mapping */
+			#address-cells = <2>;
+			#size-cells = <2>;
+			portmap = <0x3>;
+			staggered-spinup;
+			cavium,qlm-trim = "4,sata";
+
+			sata: sata@16c0000000000 {
+				compatible = "cavium,octeon-7130-ahci";
+				reg = <0x16c00 0x00000000 0x0 0x200>;
+				#address-cells = <2>;
+				#size-cells = <2>;
+				interrupts = <0x6c010 4>;
+			};
+		};
 	};
 };
diff --git a/arch/mips/dts/mrvl,octeon-ebb7304.dts b/arch/mips/dts/mrvl,octeon-ebb7304.dts
index 1bb34e1..fda559d 100644
--- a/arch/mips/dts/mrvl,octeon-ebb7304.dts
+++ b/arch/mips/dts/mrvl,octeon-ebb7304.dts
@@ -112,13 +112,20 @@
 	};
 };
 
-&uart0 {
-	clock-frequency = <1200000000>;
-};
-
 &i2c0 {
 	u-boot,dm-pre-reloc;	/* Needed early for DDR SPD EEPROM */
 	clock-frequency = <100000>;
+
+	rtc@68 {
+		compatible = "dallas,ds1337";
+		reg = <0x68>;
+	};
+
+	tlv-eeprom@56 {
+		compatible = "atmel,24c256", "microchip,24lc256";
+		reg = <0x56>;
+		pagesize = <64>;
+	};
 };
 
 &i2c1 {
diff --git a/arch/mips/dts/mrvl,octeon-nic23.dts b/arch/mips/dts/mrvl,octeon-nic23.dts
new file mode 100644
index 0000000..72ef56d
--- /dev/null
+++ b/arch/mips/dts/mrvl,octeon-nic23.dts
@@ -0,0 +1,162 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Marvell / Cavium Inc. NIC23
+ */
+
+/dts-v1/;
+
+#include "mrvl,cn73xx.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+	model = "cavium,nic23";
+	compatible = "cavium,nic23";
+
+	aliases {
+		mmc0 = &mmc0;
+		serial0 = &uart0;
+		spi0 = &spi;
+	};
+
+	regulators {
+		compatible = "simple-bus";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		/* Power on GPIO 8, active high */
+		reg_mmc_3v3: regulator@0 {
+			compatible = "regulator-fixed";
+			reg = <0>;
+			regulator-name = "mmc-3v3";
+			regulator-min-microvolt = <3300000>;
+			regulator-max-microvolt = <3300000>;
+			gpio = <&gpio 8 GPIO_ACTIVE_HIGH>;
+			enable-active-high;
+		};
+	};
+
+	chosen {
+		stdout-path = &uart0;
+	};
+};
+
+&bootbus {
+	/*
+	 * bootbus CS0 for CFI flash is remapped (0x1fc0.0000 -> 1f40.0000)
+	 * as the initial size is too small for the 8MiB flash device
+	 */
+	ranges = <0 0  0       0x1f400000  0xc00000>,
+		 <1 0  0x10000 0x10000000  0>,
+		 <2 0  0x10000 0x20000000  0>,
+		 <3 0  0x10000 0x30000000  0>,
+		 <4 0  0       0x1d020000  0x10000>,
+		 <5 0  0x10000 0x50000000  0>,
+		 <6 0  0x10000 0x60000000  0>,
+		 <7 0  0x10000 0x70000000  0>;
+
+	cavium,cs-config@0 {
+		compatible = "cavium,octeon-3860-bootbus-config";
+		cavium,cs-index = <0>;
+		cavium,t-adr  = <10>;
+		cavium,t-ce   = <50>;
+		cavium,t-oe   = <50>;
+		cavium,t-we   = <35>;
+		cavium,t-rd-hld = <25>;
+		cavium,t-wr-hld = <35>;
+		cavium,t-pause  = <0>;
+		cavium,t-wait   = <50>;
+		cavium,t-page   = <30>;
+		cavium,t-rd-dly = <0>;
+		cavium,page-mode = <1>;
+		cavium,pages     = <8>;
+		cavium,bus-width = <8>;
+	};
+
+	cavium,cs-config@4 {
+		compatible = "cavium,octeon-3860-bootbus-config";
+		cavium,cs-index = <4>;
+		cavium,t-adr  = <10>;
+		cavium,t-ce   = <10>;
+		cavium,t-oe   = <160>;
+		cavium,t-we   = <100>;
+		cavium,t-rd-hld = <10>;
+		cavium,t-wr-hld = <0>;
+		cavium,t-pause  = <50>;
+		cavium,t-wait   = <50>;
+		cavium,t-page   = <10>;
+		cavium,t-rd-dly = <10>;
+		cavium,pages     = <0>;
+		cavium,bus-width = <8>;
+	};
+
+	flash0: nor@0,0 {
+		compatible = "cfi-flash";
+		reg = <0 0 0x800000>;
+		#address-cells = <1>;
+		#size-cells = <1>;
+		partition@0 {
+			label = "bootloader";
+			reg = <0 0x340000>;
+			read-only;
+		};
+		partition@300000 {
+			label = "storage";
+			reg = <0x340000 0x4be000>;
+		};
+		partition@7fe000 {
+			label = "environment";
+			reg = <0x7fe000 0x2000>;
+			read-only;
+		};
+	};
+};
+
+&uart0 {
+	clock-frequency = <800000000>;
+};
+
+&i2c0 {
+	u-boot,dm-pre-reloc;	/* Needed early for DDR SPD EEPROM */
+	clock-frequency = <100000>;
+};
+
+&i2c1 {
+	u-boot,dm-pre-reloc;	/* Needed early for DDR SPD EEPROM */
+	clock-frequency = <100000>;
+};
+
+&mmc {
+	status = "okay";
+
+	mmc0: mmc-slot@0 {
+		compatible = "cavium,octeon-6130-mmc-slot", "mmc-slot";
+		reg = <0>;
+		vqmmc-supply = <&reg_mmc_3v3>;
+		voltage-ranges = <3300 3300>;
+		spi-max-frequency = <52000000>;
+		/* bus width can be 1, 4 or 8 */
+		bus-width = <8>; /* new std property */
+		cavium,bus-max-width = <8>; /* custom property */
+		non-removable;
+	};
+};
+
+&soc0 {
+	pci-console@0 {
+		compatible = "marvell,pci-console";
+		status = "okay";
+	};
+
+	pci-bootcmd@0 {
+		compatible = "marvell,pci-bootcmd";
+		status = "okay";
+	};
+};
+
+&spi {
+	flash@0 {
+		compatible = "micron,n25q128a11", "jedec,spi-nor";
+		spi-max-frequency = <2000000>;
+		reg = <0>;
+	};
+};
diff --git a/arch/mips/include/asm/global_data.h b/arch/mips/include/asm/global_data.h
index 4c30fab..f0d3b07 100644
--- a/arch/mips/include/asm/global_data.h
+++ b/arch/mips/include/asm/global_data.h
@@ -8,6 +8,12 @@
 #define __ASM_GBL_DATA_H
 
 #include <asm/regdef.h>
+#include <asm/types.h>
+
+struct octeon_eeprom_mac_addr {
+	u8 mac_addr_base[6];
+	u8 count;
+};
 
 /* Architecture-specific global data */
 struct arch_global_data {
@@ -30,6 +36,9 @@
 #ifdef CONFIG_ARCH_MTMIPS
 	unsigned long timer_freq;
 #endif
+#ifdef CONFIG_ARCH_OCTEON
+	struct octeon_eeprom_mac_addr mac_desc;
+#endif
 };
 
 #include <asm-generic/global_data.h>
diff --git a/arch/mips/mach-octeon/Kconfig b/arch/mips/mach-octeon/Kconfig
index e8596ed..624039d 100644
--- a/arch/mips/mach-octeon/Kconfig
+++ b/arch/mips/mach-octeon/Kconfig
@@ -41,6 +41,12 @@
 	help
 	 Choose this for the Octeon EBB7304 board
 
+config TARGET_OCTEON_NIC23
+	bool "Marvell Octeon NIC23"
+	select OCTEON_CN73XX
+	help
+	 Choose this for the Octeon NIC23 board
+
 endchoice
 
 config SYS_DCACHE_SIZE
@@ -55,6 +61,11 @@
 config SYS_ICACHE_LINE_SIZE
 	default 128
 
+config SYS_PCI_64BIT
+	bool
+	default y
+
 source "board/Marvell/octeon_ebb7304/Kconfig"
+source "board/Marvell/octeon_nic23/Kconfig"
 
 endmenu
diff --git a/arch/mips/mach-octeon/Makefile b/arch/mips/mach-octeon/Makefile
index 3486aa9..40ddab2 100644
--- a/arch/mips/mach-octeon/Makefile
+++ b/arch/mips/mach-octeon/Makefile
@@ -11,3 +11,14 @@
 obj-y += cvmx-coremask.o
 obj-y += cvmx-bootmem.o
 obj-y += bootoctlinux.o
+
+# QLM related code
+obj-y += cvmx-helper-cfg.o
+obj-y += cvmx-helper-fdt.o
+obj-y += cvmx-helper-jtag.o
+obj-y += cvmx-helper-util.o
+obj-y += cvmx-helper.o
+obj-y += cvmx-pcie.o
+obj-y += cvmx-qlm.o
+obj-y += octeon_fdt.o
+obj-y += octeon_qlm.o
diff --git a/arch/mips/mach-octeon/bootoctlinux.c b/arch/mips/mach-octeon/bootoctlinux.c
index f661c16..c195dc2 100644
--- a/arch/mips/mach-octeon/bootoctlinux.c
+++ b/arch/mips/mach-octeon/bootoctlinux.c
@@ -25,6 +25,7 @@
 #include <mach/octeon-model.h>
 #include <mach/octeon-feature.h>
 #include <mach/bootoct_cmd.h>
+#include <mach/cvmx-ciu-defs.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
diff --git a/arch/mips/mach-octeon/cpu.c b/arch/mips/mach-octeon/cpu.c
index 6f87a4e..f56beb8 100644
--- a/arch/mips/mach-octeon/cpu.c
+++ b/arch/mips/mach-octeon/cpu.c
@@ -3,6 +3,10 @@
  * Copyright (C) 2020 Marvell International Ltd.
  */
 
+#include <dm.h>
+#include <dm/uclass.h>
+#include <env.h>
+#include <iomux.h>
 #include <asm/global_data.h>
 #include <linux/bitfield.h>
 #include <linux/bitops.h>
@@ -10,10 +14,27 @@
 #include <linux/io.h>
 #include <mach/clock.h>
 #include <mach/cavm-reg.h>
+#include <mach/cvmx-bootmem.h>
+#include <mach/cvmx-regs.h>
+#include <mach/cvmx-sata-defs.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
 /*
+ * Important:
+ * This address cannot be changed as the PCI console tool relies on exactly
+ * this value!
+ */
+#define BOOTLOADER_BOOTMEM_DESC_ADDR	0x6c100
+#define BOOTLOADER_BOOTMEM_DESC_SPACE	(BOOTLOADER_BOOTMEM_DESC_ADDR + 0x8)
+
+#define OCTEON_RESERVED_LOW_BOOT_MEM_SIZE (1024 * 1024)
+
+#define BOOTCMD_NAME			"pci-bootcmd"
+#define CONSOLE_NAME			"pci-console@0"
+#define OCTEON_BOOTLOADER_LOAD_MEM_NAME	"__tmp_load"
+
+/*
  * TRUE for devices having registers with little-endian byte
  * order, FALSE for registers with native-endian byte order.
  * PCI mandates little-endian, USB and SATA are configurable,
@@ -30,7 +51,6 @@
 	[0x1e] = true,	/* PCI mmio window */
 	[0x68] = true,	/* OCTEON III USB */
 	[0x69] = true,	/* OCTEON III USB */
-	[0x6c] = true,	/* OCTEON III SATA */
 	[0x6f] = true,	/* OCTEON II USB */
 };
 
@@ -85,3 +105,329 @@
 
 	return 0;
 }
+
+static int octeon_bootmem_init(void)
+{
+	int ret;
+
+	/* Call old single-node func: it uses only gd->ram_size */
+	ret = cvmx_bootmem_phy_mem_list_init(gd->ram_size,
+					     OCTEON_RESERVED_LOW_BOOT_MEM_SIZE,
+					     (void *)CKSEG0ADDR(BOOTLOADER_BOOTMEM_DESC_SPACE));
+	if (!ret) {
+		printf("FATAL: Error initializing bootmem list\n");
+		return -ENOSPC;
+	}
+
+	/*
+	 * Put bootmem descriptor address in known location for host.
+	 * Make sure it is not in kseg0, as we want physical address
+	 */
+	writeq((u64)__cvmx_bootmem_internal_get_desc_ptr() & 0x7fffffffull,
+	       (void *)CKSEG0ADDR(BOOTLOADER_BOOTMEM_DESC_ADDR));
+
+	debug("Reserving first 1MB of memory\n");
+	ret = cvmx_bootmem_reserve_memory(0, OCTEON_RESERVED_LOW_BOOT_MEM_SIZE,
+					  "__low_reserved", 0);
+	if (!ret)
+		puts("Error reserving low 1MB of memory\n");
+
+#ifdef DEBUG
+	cvmx_bootmem_phy_list_print();
+#endif
+
+	return 0;
+}
+
+static int octeon_configure_load_memory(void)
+{
+	char *eptr;
+	u32 addr;
+	u32 size;
+	int ret;
+
+	eptr = env_get("octeon_reserved_mem_load_size");
+	if (!eptr || !strcmp("auto", eptr)) {
+		/*
+		 * Pick a size that we think is appropriate.
+		 * Please note that for small memory boards this guess
+		 * will likely not be ideal.
+		 * Please pick a specific size for boards/applications
+		 * that require it.
+		 */
+		if (gd->ram_size <= (256 << 20)) {
+			size = min_t(u64, (128 << 20),
+				     ((gd->ram_size * 2) / 5) & ~0xFFFFF);
+		} else {
+			size = min_t(u64, (256 << 20),
+				     ((gd->ram_size - (256 << 20)) / 3) & ~0xFFFFF);
+		}
+	} else {
+		size = simple_strtol(eptr, NULL, 16);
+		debug("octeon_reserved_mem_load_size=0x%08x\n", size);
+	}
+
+	if (size) {
+		debug("Linux reserved load size 0x%08x\n", size);
+		eptr = env_get("octeon_reserved_mem_load_base");
+		if (!eptr || !strcmp("auto", eptr)) {
+			u64 mem_top;
+			/*
+			 * Leave some room for previous allocations that
+			 * are made starting at the top of the low
+			 * 256 Mbytes of DRAM
+			 */
+			int adjust = (1 << 20);
+
+			if (gd->ram_size <= (512 << 20))
+				adjust = (17 << 20);
+
+			/* Put block at the top of DDR0, or bottom of DDR2 */
+			if ((gd->ram_size <= (256 << 20)) ||
+			    (size > (gd->ram_size - (256 << 20)))) {
+				mem_top = min_t(u64, gd->ram_size - adjust,
+						(256 << 20) - adjust);
+			} else if ((gd->ram_size <= (512 << 20)) ||
+				   (size > (gd->ram_size - (512 << 20)))) {
+				mem_top = min_t(u64, gd->ram_size - adjust,
+						(512 << 20) - adjust);
+			} else {
+				/*
+				 * We have enough room, so set
+				 * mem_top so that the block is
+				 * at the base of the DDR2
+				 * segment
+				 */
+				mem_top = (512 << 20) + size;
+			}
+
+			/*
+			 * Adjust for boot bus memory hole on OCTEON II
+			 * and later.
+			 */
+			if ((gd->ram_size > (256 << 20)))
+				mem_top += (256 << 20);
+
+			debug("Adjusted memory top is 0x%llx\n", mem_top);
+			addr = mem_top - size;
+			if (addr > (512 << 20))
+				addr = (512 << 20);
+			if ((addr >= (256 << 20)) && addr < (512 << 20)) {
+				/*
+				 * The address landed in the boot-bus
+				 * memory hole.  Dig it out of the hole.
+				 */
+				addr = (512 << 20);
+			}
+		} else {
+			addr = simple_strtol(eptr, NULL, 16);
+		}
+
+		ret = cvmx_bootmem_phy_named_block_alloc(size, addr,
+							 addr + size, 0,
+							 OCTEON_BOOTLOADER_LOAD_MEM_NAME,
+							 0);
+		if (ret < 0) {
+			printf("ERROR: Unable to allocate bootloader reserved memory (addr: 0x%x, size: 0x%x).\n",
+			       addr, size);
+		} else {
+			/*
+			 * Set default load address to base of memory
+			 * reserved for loading. The setting of the
+			 * env. variable also sets the load_addr global
+			 * variable.
+			 * This environment variable is overridden each
+			 * boot if a reserved block is created.
+			 */
+			char str[20];
+
+			snprintf(str, sizeof(str), "0x%x", addr);
+			env_set("loadaddr", str);
+			debug("Setting load address to 0x%08x, size 0x%x\n",
+			      addr, size);
+		}
+		return 0;
+	}
+
+	printf("WARNING: No reserved memory for image loading.\n");
+	return -1;
+}
+
+static int init_pcie_console(void)
+{
+	char *stdinname = env_get("stdin");
+	char *stdoutname = env_get("stdout");
+	char *stderrname = env_get("stderr");
+	struct udevice *pcie_console_dev = NULL;
+	bool stdin_set, stdout_set, stderr_set;
+	char iomux_name[128];
+	int ret = 0;
+
+	debug("%s: stdin: %s, stdout: %s, stderr: %s\n", __func__, stdinname,
+	      stdoutname, stderrname);
+	if (!stdinname) {
+		env_set("stdin", "serial");
+		stdinname = env_get("stdin");
+	}
+	if (!stdoutname) {
+		env_set("stdout", "serial");
+		stdoutname = env_get("stdout");
+	}
+	if (!stderrname) {
+		env_set("stderr", "serial");
+		stderrname = env_get("stderr");
+	}
+
+	if (!stdinname || !stdoutname || !stderrname) {
+		printf("%s: Error setting environment variables for serial\n",
+		       __func__);
+		return -1;
+	}
+
+	stdin_set = !!strstr(stdinname, CONSOLE_NAME);
+	stdout_set = !!strstr(stdoutname, CONSOLE_NAME);
+	stderr_set = !!strstr(stderrname, CONSOLE_NAME);
+
+	log_debug("stdin: %d, \"%s\", stdout: %d, \"%s\", stderr: %d, \"%s\"\n",
+		  stdin_set, stdinname, stdout_set, stdoutname,
+		  stderr_set, stderrname);
+	ret = uclass_get_device_by_name(UCLASS_SERIAL, CONSOLE_NAME,
+					&pcie_console_dev);
+	if (ret || !pcie_console_dev) {
+		debug("%s: No PCI console device %s found\n", __func__,
+		      CONSOLE_NAME);
+		return 0;
+	}
+
+	if (stdin_set)
+		strncpy(iomux_name, stdinname, sizeof(iomux_name));
+	else
+		snprintf(iomux_name, sizeof(iomux_name), "%s,%s",
+			 stdinname, pcie_console_dev->name);
+
+	ret = iomux_doenv(stdin, iomux_name);
+	if (ret) {
+		log_err("%s: Error setting I/O stdin MUX to %s\n",
+			__func__, iomux_name);
+		return ret;
+	}
+
+	if (!stdin_set)
+		env_set("stdin", iomux_name);
+
+	if (stdout_set)
+		strncpy(iomux_name, stdoutname, sizeof(iomux_name));
+	else
+		snprintf(iomux_name, sizeof(iomux_name), "%s,%s", stdoutname,
+			 pcie_console_dev->name);
+
+	ret = iomux_doenv(stdout, iomux_name);
+	if (ret) {
+		log_err("%s: Error setting I/O stdout MUX to %s\n",
+			__func__, iomux_name);
+		return ret;
+	}
+	if (!stdout_set)
+		env_set("stdout", iomux_name);
+
+	if (stderr_set)
+		strncpy(iomux_name, stderrname, sizeof(iomux_name));
+	else
+		snprintf(iomux_name, sizeof(iomux_name), "%s,%s", stderrname,
+			 pcie_console_dev->name);
+
+	ret = iomux_doenv(stderr, iomux_name);
+	if (ret) {
+		log_err("%s: Error setting I/O stderr MUX to %s\n",
+			__func__, iomux_name);
+		return ret;
+	}
+
+	if (!stderr_set)
+		env_set("stderr", iomux_name);
+
+	debug("%s: stdin: %s, stdout: %s, stderr: %s, ret: %d\n",
+	      __func__, env_get("stdin"), env_get("stdout"),
+	      env_get("stderr"), ret);
+
+	return ret;
+}
+
+static int init_bootcmd_console(void)
+{
+	char *stdinname = env_get("stdin");
+	struct udevice *bootcmd_dev = NULL;
+	bool stdin_set;
+	char iomux_name[128];
+	int ret = 0;
+
+	debug("%s: stdin before: %s\n", __func__,
+	      stdinname ? stdinname : "NONE");
+	if (!stdinname) {
+		env_set("stdin", "serial");
+		stdinname = env_get("stdin");
+	}
+	stdin_set = !!strstr(stdinname, BOOTCMD_NAME);
+	ret = uclass_get_device_by_driver(UCLASS_SERIAL,
+					  DM_DRIVER_GET(octeon_bootcmd),
+					  &bootcmd_dev);
+	if (ret) {
+		log_err("%s: Error getting %s serial class\n", __func__,
+			BOOTCMD_NAME);
+	} else if (bootcmd_dev) {
+		if (stdin_set)
+			strncpy(iomux_name, stdinname, sizeof(iomux_name));
+		else
+			snprintf(iomux_name, sizeof(iomux_name), "%s,%s",
+				 stdinname, bootcmd_dev->name);
+		ret = iomux_doenv(stdin, iomux_name);
+		if (ret)
+			log_err("%s: Error %d enabling the PCI bootcmd input console \"%s\"\n",
+				__func__, ret, iomux_name);
+		if (!stdin_set)
+			env_set("stdin", iomux_name);
+	}
+
+	debug("%s: Set iomux and stdin to %s (ret: %d)\n",
+	      __func__, iomux_name, ret);
+	return ret;
+}
+
+int arch_misc_init(void)
+{
+	int ret;
+
+	ret = octeon_bootmem_init();
+	if (ret)
+		return ret;
+
+	ret = octeon_configure_load_memory();
+	if (ret)
+		return ret;
+
+	if (CONFIG_IS_ENABLED(OCTEON_SERIAL_PCIE_CONSOLE))
+		init_pcie_console();
+
+	if (CONFIG_IS_ENABLED(OCTEON_SERIAL_BOOTCMD))
+		init_bootcmd_console();
+
+	return 0;
+}
+
+int board_ahci_enable(void)
+{
+	cvmx_sata_uctl_shim_cfg_t shim_cfg;
+
+	/*
+	 * Configure proper endian swapping for the AHCI port so that the
+	 * common AHCI code can be used
+	 */
+	shim_cfg.u64 = csr_rd(CVMX_SATA_UCTL_SHIM_CFG);
+	shim_cfg.s.dma_endian_mode = 1;
+	/* Use 1 for LE mode when running BE, or 3 for BE mode running BE */
+	shim_cfg.s.csr_endian_mode = 3;	/* Don't byte swap */
+	shim_cfg.s.dma_read_cmd = 1; /* No allocate L2C */
+	csr_wr(CVMX_SATA_UCTL_SHIM_CFG, shim_cfg.u64);
+
+	return 0;
+}
diff --git a/arch/mips/mach-octeon/cvmx-bootmem.c b/arch/mips/mach-octeon/cvmx-bootmem.c
index 80bb7ac..12695df 100644
--- a/arch/mips/mach-octeon/cvmx-bootmem.c
+++ b/arch/mips/mach-octeon/cvmx-bootmem.c
@@ -21,12 +21,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#define CVMX_MIPS32_SPACE_KSEG0		1L
-#define CVMX_MIPS_SPACE_XKPHYS		2LL
-
-#define CVMX_ADD_SEG(seg, add)		((((u64)(seg)) << 62) | (add))
-#define CVMX_ADD_SEG32(seg, add)	(((u32)(seg) << 31) | (u32)(add))
-
 /**
  * This is the physical location of a struct cvmx_bootmem_desc
  * structure in Octeon's memory. Note that dues to addressing
@@ -289,8 +283,8 @@
 	int major_version;
 
 	major_version = CVMX_BOOTMEM_DESC_GET_FIELD(major_version);
-	if (major_version > 3 ||
-	    (exact_match && major_version) != exact_match) {
+	if ((major_version > 3) ||
+	    (exact_match && major_version != exact_match)) {
 		debug("ERROR: Incompatible bootmem descriptor version: %d.%d at addr: 0x%llx\n",
 		      major_version,
 		      (int)CVMX_BOOTMEM_DESC_GET_FIELD(minor_version),
diff --git a/arch/mips/mach-octeon/cvmx-coremask.c b/arch/mips/mach-octeon/cvmx-coremask.c
index cff8c08..ed673e4 100644
--- a/arch/mips/mach-octeon/cvmx-coremask.c
+++ b/arch/mips/mach-octeon/cvmx-coremask.c
@@ -14,6 +14,7 @@
 #include <mach/cvmx-fuse.h>
 #include <mach/octeon-model.h>
 #include <mach/octeon-feature.h>
+#include <mach/cvmx-ciu-defs.h>
 
 struct cvmx_coremask *get_coremask_override(struct cvmx_coremask *pcm)
 {
diff --git a/arch/mips/mach-octeon/cvmx-helper-cfg.c b/arch/mips/mach-octeon/cvmx-helper-cfg.c
new file mode 100644
index 0000000..6b7dd8a
--- /dev/null
+++ b/arch/mips/mach-octeon/cvmx-helper-cfg.c
@@ -0,0 +1,1914 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper Functions for the Configuration Framework
+ */
+
+#include <log.h>
+#include <linux/delay.h>
+
+#include <mach/cvmx-regs.h>
+#include <mach/cvmx-csr.h>
+#include <mach/cvmx-bootmem.h>
+#include <mach/octeon-model.h>
+#include <mach/cvmx-fuse.h>
+#include <mach/octeon-feature.h>
+#include <mach/cvmx-qlm.h>
+#include <mach/octeon_qlm.h>
+#include <mach/cvmx-pcie.h>
+#include <mach/cvmx-coremask.h>
+
+#include <mach/cvmx-agl-defs.h>
+#include <mach/cvmx-bgxx-defs.h>
+#include <mach/cvmx-gmxx-defs.h>
+#include <mach/cvmx-ipd-defs.h>
+#include <mach/cvmx-pki-defs.h>
+
+#include <mach/cvmx-helper.h>
+#include <mach/cvmx-helper-board.h>
+#include <mach/cvmx-helper-fdt.h>
+#include <mach/cvmx-helper-bgx.h>
+#include <mach/cvmx-helper-cfg.h>
+#include <mach/cvmx-helper-util.h>
+#include <mach/cvmx-helper-pki.h>
+
+#include <mach/cvmx-global-resources.h>
+#include <mach/cvmx-pko-internal-ports-range.h>
+#include <mach/cvmx-ilk.h>
+#include <mach/cvmx-pip.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int cvmx_npi_max_pknds;
+static bool port_cfg_data_initialized;
+
+struct cvmx_cfg_port_param cvmx_cfg_port[CVMX_MAX_NODES][CVMX_HELPER_MAX_IFACE]
+					[CVMX_HELPER_CFG_MAX_PORT_PER_IFACE];
+/*
+ * Indexed by the pko_port number
+ */
+static int __cvmx_cfg_pko_highest_queue;
+struct cvmx_cfg_pko_port_param
+cvmx_pko_queue_table[CVMX_HELPER_CFG_MAX_PKO_PORT] = {
+	[0 ... CVMX_HELPER_CFG_MAX_PKO_PORT - 1] = {
+		CVMX_HELPER_CFG_INVALID_VALUE,
+		CVMX_HELPER_CFG_INVALID_VALUE
+	}
+};
+
+cvmx_user_static_pko_queue_config_t
+__cvmx_pko_queue_static_config[CVMX_MAX_NODES];
+
+struct cvmx_cfg_pko_port_map
+cvmx_cfg_pko_port_map[CVMX_HELPER_CFG_MAX_PKO_PORT] = {
+	[0 ... CVMX_HELPER_CFG_MAX_PKO_PORT - 1] = {
+		CVMX_HELPER_CFG_INVALID_VALUE,
+		CVMX_HELPER_CFG_INVALID_VALUE,
+		CVMX_HELPER_CFG_INVALID_VALUE
+	}
+};
+
+/*
+ * This array assists translation from ipd_port to pko_port.
+ * The ``16'' is the rounded value for the 3rd 4-bit value of
+ * ipd_port, used to differentiate ``interfaces.''
+ */
+static struct cvmx_cfg_pko_port_pair
+ipd2pko_port_cache[16][CVMX_HELPER_CFG_MAX_PORT_PER_IFACE] = {
+	[0 ... 15] = {
+		[0 ... CVMX_HELPER_CFG_MAX_PORT_PER_IFACE - 1] = {
+			CVMX_HELPER_CFG_INVALID_VALUE,
+			CVMX_HELPER_CFG_INVALID_VALUE
+		}
+	}
+};
+
+/*
+ * Options
+ *
+ * Each array-elem's initial value is also the option's default value.
+ */
+static u64 cvmx_cfg_opts[CVMX_HELPER_CFG_OPT_MAX] = {
+	[0 ... CVMX_HELPER_CFG_OPT_MAX - 1] = 1
+};
+
+/*
+ * MISC
+ */
+
+static int cvmx_cfg_max_pko_engines; /* # of PKO DMA engines allocated */
+static int cvmx_pko_queue_alloc(u64 port, int count);
+static void cvmx_init_port_cfg(void);
+static const int dbg;
+
+int __cvmx_helper_cfg_pknd(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	int pkind;
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+
+	/*
+	 * Only 8 PKNDs are assigned to ILK channels. The channels are wrapped
+	 * if more than 8 channels are configured, fix the index accordingly.
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+		if (cvmx_helper_interface_get_mode(xiface) ==
+		    CVMX_HELPER_INTERFACE_MODE_ILK)
+			index %= 8;
+	}
+
+	pkind = cvmx_cfg_port[xi.node][xi.interface][index].ccpp_pknd;
+	return pkind;
+}
+
+int __cvmx_helper_cfg_bpid(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+
+	/*
+	 * Only 8 BIDs are assigned to ILK channels. The channels are wrapped
+	 * if more than 8 channels are configured, fix the index accordingly.
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+		if (cvmx_helper_interface_get_mode(xiface) ==
+		    CVMX_HELPER_INTERFACE_MODE_ILK)
+			index %= 8;
+	}
+
+	return cvmx_cfg_port[xi.node][xi.interface][index].ccpp_bpid;
+}
+
+int __cvmx_helper_cfg_pko_port_base(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+
+	return cvmx_cfg_port[xi.node][xi.interface][index].ccpp_pko_port_base;
+}
+
+int __cvmx_helper_cfg_pko_port_num(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+
+	return cvmx_cfg_port[xi.node][xi.interface][index].ccpp_pko_num_ports;
+}
+
+int __cvmx_helper_cfg_pko_queue_num(int pko_port)
+{
+	return cvmx_pko_queue_table[pko_port].ccppp_num_queues;
+}
+
+int __cvmx_helper_cfg_pko_queue_base(int pko_port)
+{
+	return cvmx_pko_queue_table[pko_port].ccppp_queue_base;
+}
+
+int __cvmx_helper_cfg_pko_max_queue(void)
+{
+	return __cvmx_cfg_pko_highest_queue;
+}
+
+int __cvmx_helper_cfg_pko_max_engine(void)
+{
+	return cvmx_cfg_max_pko_engines;
+}
+
+int cvmx_helper_cfg_opt_set(cvmx_helper_cfg_option_t opt, uint64_t val)
+{
+	if (opt >= CVMX_HELPER_CFG_OPT_MAX)
+		return -1;
+
+	cvmx_cfg_opts[opt] = val;
+
+	return 0;
+}
+
+uint64_t cvmx_helper_cfg_opt_get(cvmx_helper_cfg_option_t opt)
+{
+	if (opt >= CVMX_HELPER_CFG_OPT_MAX)
+		return (uint64_t)CVMX_HELPER_CFG_INVALID_VALUE;
+
+	return cvmx_cfg_opts[opt];
+}
+
+/*
+ * initialize the queue allocation list. the existing static allocation result
+ * is used as a starting point to ensure backward compatibility.
+ *
+ * @return  0 on success
+ *         -1 on failure
+ */
+int cvmx_pko_queue_grp_alloc(u64 start, uint64_t end, uint64_t count)
+{
+	u64 port;
+	int ret_val;
+
+	for (port = start; port < end; port++) {
+		ret_val = cvmx_pko_queue_alloc(port, count);
+		if (ret_val == -1) {
+			printf("ERROR: %sL Failed to allocate queue for port=%d count=%d\n",
+			       __func__, (int)port, (int)count);
+			return ret_val;
+		}
+	}
+	return 0;
+}
+
+int cvmx_pko_queue_init_from_cvmx_config_non_pknd(void)
+{
+	int ret_val = -1;
+	u64 count, start, end;
+
+	start = 0;
+	end = __cvmx_pko_queue_static_config[0].non_pknd.pko_ports_per_interface[0];
+	count = __cvmx_pko_queue_static_config[0].non_pknd.pko_queues_per_port_interface[0];
+	cvmx_pko_queue_grp_alloc(start, end, count);
+
+	start = 16;
+	end = start + __cvmx_pko_queue_static_config[0].non_pknd.pko_ports_per_interface[1];
+	count = __cvmx_pko_queue_static_config[0].non_pknd.pko_queues_per_port_interface[1];
+	ret_val = cvmx_pko_queue_grp_alloc(start, end, count);
+	if (ret_val != 0)
+		return -1;
+
+	if (OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+		/* Interface 4: AGL, PKO port 24 only, DPI 32-35 */
+		start = 24;
+		end = start + 1;
+		count = __cvmx_pko_queue_static_config[0].non_pknd.pko_queues_per_port_interface[4];
+		ret_val = cvmx_pko_queue_grp_alloc(start, end, count);
+
+		if (ret_val != 0)
+			return -1;
+		end = 32; /* DPI first PKO poty */
+	}
+
+	start = end;
+	end = 36;
+	count = __cvmx_pko_queue_static_config[0].non_pknd.pko_queues_per_port_pci;
+	cvmx_pko_queue_grp_alloc(start, end, count);
+	if (ret_val != 0)
+		return -1;
+
+	start = end;
+	end = 40;
+	count = __cvmx_pko_queue_static_config[0].non_pknd.pko_queues_per_port_loop;
+	cvmx_pko_queue_grp_alloc(start, end, count);
+	if (ret_val != 0)
+		return -1;
+
+	start = end;
+	end = 42;
+	count = __cvmx_pko_queue_static_config[0].non_pknd.pko_queues_per_port_srio[0];
+	cvmx_pko_queue_grp_alloc(start, end, count);
+	if (ret_val != 0)
+		return -1;
+
+	start = end;
+	end = 44;
+	count = __cvmx_pko_queue_static_config[0].non_pknd.pko_queues_per_port_srio[1];
+	cvmx_pko_queue_grp_alloc(start, end, count);
+	if (ret_val != 0)
+		return -1;
+
+	start = end;
+	end = 46;
+	count = __cvmx_pko_queue_static_config[0].non_pknd.pko_queues_per_port_srio[2];
+	cvmx_pko_queue_grp_alloc(start, end, count);
+	if (ret_val != 0)
+		return -1;
+
+	start = end;
+	end = 48;
+	count = __cvmx_pko_queue_static_config[0].non_pknd.pko_queues_per_port_srio[3];
+	cvmx_pko_queue_grp_alloc(start, end, count);
+	if (ret_val != 0)
+		return -1;
+	return 0;
+}
+
+int cvmx_helper_pko_queue_config_get(int node, cvmx_user_static_pko_queue_config_t *cfg)
+{
+	*cfg = __cvmx_pko_queue_static_config[node];
+	return 0;
+}
+
+int cvmx_helper_pko_queue_config_set(int node, cvmx_user_static_pko_queue_config_t *cfg)
+{
+	__cvmx_pko_queue_static_config[node] = *cfg;
+	return 0;
+}
+
+static int queue_range_init;
+
+int init_cvmx_pko_que_range(void)
+{
+	int rv = 0;
+
+	if (queue_range_init)
+		return 0;
+	queue_range_init = 1;
+	rv = cvmx_create_global_resource_range(CVMX_GR_TAG_PKO_QUEUES,
+					       CVMX_HELPER_CFG_MAX_PKO_QUEUES);
+	if (rv != 0)
+		printf("ERROR: %s: Failed to initialize pko queues range\n", __func__);
+
+	return rv;
+}
+
+/*
+ * get a block of "count" queues for "port"
+ *
+ * @param  port   the port for which the queues are requested
+ * @param  count  the number of queues requested
+ *
+ * @return  0 on success
+ *         -1 on failure
+ */
+static int cvmx_pko_queue_alloc(u64 port, int count)
+{
+	int ret_val = -1;
+	int highest_queue;
+
+	init_cvmx_pko_que_range();
+
+	if (cvmx_pko_queue_table[port].ccppp_num_queues == count)
+		return cvmx_pko_queue_table[port].ccppp_queue_base;
+
+	if (cvmx_pko_queue_table[port].ccppp_num_queues > 0) {
+		printf("WARNING: %s port=%d already %d queues\n",
+		       __func__, (int)port,
+		       (int)cvmx_pko_queue_table[port].ccppp_num_queues);
+		return -1;
+	}
+
+	if (port >= CVMX_HELPER_CFG_MAX_PKO_QUEUES) {
+		printf("ERROR: %s port=%d > %d\n", __func__, (int)port,
+		       CVMX_HELPER_CFG_MAX_PKO_QUEUES);
+		return -1;
+	}
+
+	ret_val = cvmx_allocate_global_resource_range(CVMX_GR_TAG_PKO_QUEUES,
+						      port, count, 1);
+
+	debug("%s: pko_e_port=%i q_base=%i q_count=%i\n",
+	      __func__, (int)port, ret_val, (int)count);
+
+	if (ret_val == -1)
+		return ret_val;
+	cvmx_pko_queue_table[port].ccppp_queue_base = ret_val;
+	cvmx_pko_queue_table[port].ccppp_num_queues = count;
+
+	highest_queue = ret_val + count - 1;
+	if (highest_queue > __cvmx_cfg_pko_highest_queue)
+		__cvmx_cfg_pko_highest_queue = highest_queue;
+	return 0;
+}
+
+/*
+ * return the queues for "port"
+ *
+ * @param  port   the port for which the queues are returned
+ *
+ * @return  0 on success
+ *         -1 on failure
+ */
+int cvmx_pko_queue_free(uint64_t port)
+{
+	int ret_val = -1;
+
+	init_cvmx_pko_que_range();
+	if (port >= CVMX_HELPER_CFG_MAX_PKO_QUEUES) {
+		debug("ERROR: %s port=%d > %d", __func__, (int)port,
+		      CVMX_HELPER_CFG_MAX_PKO_QUEUES);
+		return -1;
+	}
+
+	ret_val = cvmx_free_global_resource_range_with_base(
+		CVMX_GR_TAG_PKO_QUEUES, cvmx_pko_queue_table[port].ccppp_queue_base,
+		cvmx_pko_queue_table[port].ccppp_num_queues);
+	if (ret_val != 0)
+		return ret_val;
+
+	cvmx_pko_queue_table[port].ccppp_num_queues = 0;
+	cvmx_pko_queue_table[port].ccppp_queue_base = CVMX_HELPER_CFG_INVALID_VALUE;
+	ret_val = 0;
+	return ret_val;
+}
+
+void cvmx_pko_queue_free_all(void)
+{
+	int i;
+
+	for (i = 0; i < CVMX_HELPER_CFG_MAX_PKO_PORT; i++)
+		if (cvmx_pko_queue_table[i].ccppp_queue_base !=
+		    CVMX_HELPER_CFG_INVALID_VALUE)
+			cvmx_pko_queue_free(i);
+}
+
+void cvmx_pko_queue_show(void)
+{
+	int i;
+
+	cvmx_show_global_resource_range(CVMX_GR_TAG_PKO_QUEUES);
+	for (i = 0; i < CVMX_HELPER_CFG_MAX_PKO_PORT; i++)
+		if (cvmx_pko_queue_table[i].ccppp_queue_base !=
+		    CVMX_HELPER_CFG_INVALID_VALUE)
+			debug("port=%d que_base=%d que_num=%d\n", i,
+			      (int)cvmx_pko_queue_table[i].ccppp_queue_base,
+			      (int)cvmx_pko_queue_table[i].ccppp_num_queues);
+}
+
+void cvmx_helper_cfg_show_cfg(void)
+{
+	int i, j;
+
+	for (i = 0; i < cvmx_helper_get_number_of_interfaces(); i++) {
+		debug("%s: interface%d mode %10s nports%4d\n", __func__, i,
+		      cvmx_helper_interface_mode_to_string(cvmx_helper_interface_get_mode(i)),
+		      cvmx_helper_interface_enumerate(i));
+
+		for (j = 0; j < cvmx_helper_interface_enumerate(i); j++) {
+			debug("\tpknd[%i][%d]%d", i, j,
+			      __cvmx_helper_cfg_pknd(i, j));
+			debug(" pko_port_base[%i][%d]%d", i, j,
+			      __cvmx_helper_cfg_pko_port_base(i, j));
+			debug(" pko_port_num[%i][%d]%d\n", i, j,
+			      __cvmx_helper_cfg_pko_port_num(i, j));
+		}
+	}
+
+	for (i = 0; i < CVMX_HELPER_CFG_MAX_PKO_PORT; i++) {
+		if (__cvmx_helper_cfg_pko_queue_base(i) !=
+		    CVMX_HELPER_CFG_INVALID_VALUE) {
+			debug("%s: pko_port%d qbase%d nqueues%d interface%d index%d\n",
+			      __func__, i, __cvmx_helper_cfg_pko_queue_base(i),
+			      __cvmx_helper_cfg_pko_queue_num(i),
+			      __cvmx_helper_cfg_pko_port_interface(i),
+			      __cvmx_helper_cfg_pko_port_index(i));
+		}
+	}
+}
+
+/*
+ * initialize cvmx_cfg_pko_port_map
+ */
+void cvmx_helper_cfg_init_pko_port_map(void)
+{
+	int i, j, k;
+	int pko_eid;
+	int pko_port_base, pko_port_max;
+	cvmx_helper_interface_mode_t mode;
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	/*
+	 * one pko_eid is allocated to each port except for ILK, NPI, and
+	 * LOOP. Each of the three has one eid.
+	 */
+	pko_eid = 0;
+	for (i = 0; i < cvmx_helper_get_number_of_interfaces(); i++) {
+		mode = cvmx_helper_interface_get_mode(i);
+		for (j = 0; j < cvmx_helper_interface_enumerate(i); j++) {
+			pko_port_base = cvmx_cfg_port[0][i][j].ccpp_pko_port_base;
+			pko_port_max = pko_port_base + cvmx_cfg_port[0][i][j].ccpp_pko_num_ports;
+			if (!octeon_has_feature(OCTEON_FEATURE_PKO3)) {
+				cvmx_helper_cfg_assert(pko_port_base !=
+						       CVMX_HELPER_CFG_INVALID_VALUE);
+				cvmx_helper_cfg_assert(pko_port_max >= pko_port_base);
+			}
+			for (k = pko_port_base; k < pko_port_max; k++) {
+				cvmx_cfg_pko_port_map[k].ccppl_interface = i;
+				cvmx_cfg_pko_port_map[k].ccppl_index = j;
+				cvmx_cfg_pko_port_map[k].ccppl_eid = pko_eid;
+			}
+
+			if (!(mode == CVMX_HELPER_INTERFACE_MODE_NPI ||
+			      mode == CVMX_HELPER_INTERFACE_MODE_LOOP ||
+			      mode == CVMX_HELPER_INTERFACE_MODE_ILK))
+				pko_eid++;
+		}
+
+		if (mode == CVMX_HELPER_INTERFACE_MODE_NPI ||
+		    mode == CVMX_HELPER_INTERFACE_MODE_LOOP ||
+		    mode == CVMX_HELPER_INTERFACE_MODE_ILK)
+			pko_eid++;
+	}
+
+	/*
+	 * Legal pko_eids [0, 0x13] should not be exhausted.
+	 */
+	if (!octeon_has_feature(OCTEON_FEATURE_PKO3))
+		cvmx_helper_cfg_assert(pko_eid <= 0x14);
+
+	cvmx_cfg_max_pko_engines = pko_eid;
+}
+
+void cvmx_helper_cfg_set_jabber_and_frame_max(void)
+{
+	int interface, port;
+	/*Set the frame max size and jabber size to 65535. */
+	const unsigned int max_frame = 65535;
+
+	// FIXME: should support node argument for remote node init
+	if (octeon_has_feature(OCTEON_FEATURE_BGX)) {
+		int ipd_port;
+		int node = cvmx_get_node_num();
+
+		for (interface = 0;
+		     interface < cvmx_helper_get_number_of_interfaces();
+		     interface++) {
+			int xiface = cvmx_helper_node_interface_to_xiface(node, interface);
+			cvmx_helper_interface_mode_t imode = cvmx_helper_interface_get_mode(xiface);
+			int num_ports = cvmx_helper_ports_on_interface(xiface);
+
+			// FIXME: should be an easier way to determine
+			// that an interface is Ethernet/BGX
+			switch (imode) {
+			case CVMX_HELPER_INTERFACE_MODE_SGMII:
+			case CVMX_HELPER_INTERFACE_MODE_XAUI:
+			case CVMX_HELPER_INTERFACE_MODE_RXAUI:
+			case CVMX_HELPER_INTERFACE_MODE_XLAUI:
+			case CVMX_HELPER_INTERFACE_MODE_XFI:
+			case CVMX_HELPER_INTERFACE_MODE_10G_KR:
+			case CVMX_HELPER_INTERFACE_MODE_40G_KR4:
+				for (port = 0; port < num_ports; port++) {
+					ipd_port = cvmx_helper_get_ipd_port(xiface, port);
+					cvmx_pki_set_max_frm_len(ipd_port, max_frame);
+					cvmx_helper_bgx_set_jabber(xiface, port, max_frame);
+				}
+				break;
+			default:
+				break;
+			}
+		}
+	} else {
+		/*Set the frame max size and jabber size to 65535. */
+		for (interface = 0; interface < cvmx_helper_get_number_of_interfaces();
+		     interface++) {
+			int xiface = cvmx_helper_node_interface_to_xiface(cvmx_get_node_num(),
+									  interface);
+			/*
+			 * Set the frame max size and jabber size to 65535, as the defaults
+			 * are too small.
+			 */
+			cvmx_helper_interface_mode_t imode = cvmx_helper_interface_get_mode(xiface);
+			int num_ports = cvmx_helper_ports_on_interface(xiface);
+
+			switch (imode) {
+			case CVMX_HELPER_INTERFACE_MODE_SGMII:
+			case CVMX_HELPER_INTERFACE_MODE_QSGMII:
+			case CVMX_HELPER_INTERFACE_MODE_XAUI:
+			case CVMX_HELPER_INTERFACE_MODE_RXAUI:
+				for (port = 0; port < num_ports; port++)
+					csr_wr(CVMX_GMXX_RXX_JABBER(port, interface), 65535);
+				/* Set max and min value for frame check */
+				cvmx_pip_set_frame_check(interface, -1);
+				break;
+
+			case CVMX_HELPER_INTERFACE_MODE_RGMII:
+			case CVMX_HELPER_INTERFACE_MODE_GMII:
+				/* Set max and min value for frame check */
+				cvmx_pip_set_frame_check(interface, -1);
+				for (port = 0; port < num_ports; port++) {
+					csr_wr(CVMX_GMXX_RXX_FRM_MAX(port, interface), 65535);
+					csr_wr(CVMX_GMXX_RXX_JABBER(port, interface), 65535);
+				}
+				break;
+			case CVMX_HELPER_INTERFACE_MODE_ILK:
+				/* Set max and min value for frame check */
+				cvmx_pip_set_frame_check(interface, -1);
+				for (port = 0; port < num_ports; port++) {
+					int ipd_port = cvmx_helper_get_ipd_port(interface, port);
+
+					cvmx_ilk_enable_la_header(ipd_port, 0);
+				}
+				break;
+			case CVMX_HELPER_INTERFACE_MODE_SRIO:
+				/* Set max and min value for frame check */
+				cvmx_pip_set_frame_check(interface, -1);
+				break;
+			case CVMX_HELPER_INTERFACE_MODE_AGL:
+				/* Set max and min value for frame check */
+				cvmx_pip_set_frame_check(interface, -1);
+				csr_wr(CVMX_AGL_GMX_RXX_FRM_MAX(0), 65535);
+				csr_wr(CVMX_AGL_GMX_RXX_JABBER(0), 65535);
+				break;
+			default:
+				break;
+			}
+		}
+	}
+}
+
+/**
+ * Enable storing short packets only in the WQE
+ * unless NO_WPTR is set, which already has the same effect
+ */
+void cvmx_helper_cfg_store_short_packets_in_wqe(void)
+{
+	int interface, port;
+	cvmx_ipd_ctl_status_t ipd_ctl_status;
+	unsigned int dyn_rs = 1;
+
+	if (octeon_has_feature(OCTEON_FEATURE_PKI))
+		return;
+
+	/* NO_WPTR combines WQE with 1st MBUF, RS is redundant */
+	ipd_ctl_status.u64 = csr_rd(CVMX_IPD_CTL_STATUS);
+	if (ipd_ctl_status.s.no_wptr) {
+		dyn_rs = 0;
+		/* Note: consider also setting 'ignrs' wtn NO_WPTR is set */
+	}
+
+	for (interface = 0; interface < cvmx_helper_get_number_of_interfaces(); interface++) {
+		int num_ports = cvmx_helper_ports_on_interface(interface);
+
+		for (port = 0; port < num_ports; port++) {
+			cvmx_pip_port_cfg_t port_cfg;
+			int pknd = port;
+
+			if (octeon_has_feature(OCTEON_FEATURE_PKND))
+				pknd = cvmx_helper_get_pknd(interface, port);
+			else
+				pknd = cvmx_helper_get_ipd_port(interface, port);
+			port_cfg.u64 = csr_rd(CVMX_PIP_PRT_CFGX(pknd));
+			port_cfg.s.dyn_rs = dyn_rs;
+			csr_wr(CVMX_PIP_PRT_CFGX(pknd), port_cfg.u64);
+		}
+	}
+}
+
+int __cvmx_helper_cfg_pko_port_interface(int pko_port)
+{
+	return cvmx_cfg_pko_port_map[pko_port].ccppl_interface;
+}
+
+int __cvmx_helper_cfg_pko_port_index(int pko_port)
+{
+	return cvmx_cfg_pko_port_map[pko_port].ccppl_index;
+}
+
+int __cvmx_helper_cfg_pko_port_eid(int pko_port)
+{
+	return cvmx_cfg_pko_port_map[pko_port].ccppl_eid;
+}
+
+#define IPD2PKO_CACHE_Y(ipd_port) (ipd_port) >> 8
+#define IPD2PKO_CACHE_X(ipd_port) (ipd_port) & 0xff
+
+static inline int __cvmx_helper_cfg_ipd2pko_cachex(int ipd_port)
+{
+	int ipd_x = IPD2PKO_CACHE_X(ipd_port);
+
+	if (ipd_port & 0x800)
+		ipd_x = (ipd_x >> 4) & 3;
+	return ipd_x;
+}
+
+/*
+ * ipd_port to pko_port translation cache
+ */
+int __cvmx_helper_cfg_init_ipd2pko_cache(void)
+{
+	int i, j, n;
+	int ipd_y, ipd_x, ipd_port;
+
+	for (i = 0; i < cvmx_helper_get_number_of_interfaces(); i++) {
+		n = cvmx_helper_interface_enumerate(i);
+
+		for (j = 0; j < n; j++) {
+			ipd_port = cvmx_helper_get_ipd_port(i, j);
+			ipd_y = IPD2PKO_CACHE_Y(ipd_port);
+			ipd_x = __cvmx_helper_cfg_ipd2pko_cachex(ipd_port);
+			ipd2pko_port_cache[ipd_y][ipd_x] = (struct cvmx_cfg_pko_port_pair){
+				__cvmx_helper_cfg_pko_port_base(i, j),
+				__cvmx_helper_cfg_pko_port_num(i, j)
+			};
+		}
+	}
+
+	return 0;
+}
+
+int cvmx_helper_cfg_ipd2pko_port_base(int ipd_port)
+{
+	int ipd_y, ipd_x;
+
+	/* Internal PKO ports are not present in PKO3 */
+	if (octeon_has_feature(OCTEON_FEATURE_PKI))
+		return ipd_port;
+
+	ipd_y = IPD2PKO_CACHE_Y(ipd_port);
+	ipd_x = __cvmx_helper_cfg_ipd2pko_cachex(ipd_port);
+
+	return ipd2pko_port_cache[ipd_y][ipd_x].ccppp_base_port;
+}
+
+int cvmx_helper_cfg_ipd2pko_port_num(int ipd_port)
+{
+	int ipd_y, ipd_x;
+
+	ipd_y = IPD2PKO_CACHE_Y(ipd_port);
+	ipd_x = __cvmx_helper_cfg_ipd2pko_cachex(ipd_port);
+
+	return ipd2pko_port_cache[ipd_y][ipd_x].ccppp_nports;
+}
+
+/**
+ * Return the number of queues to be assigned to this pko_port
+ *
+ * @param pko_port
+ * @return the number of queues for this pko_port
+ *
+ */
+static int cvmx_helper_cfg_dft_nqueues(int pko_port)
+{
+	cvmx_helper_interface_mode_t mode;
+	int interface;
+	int n;
+	int ret;
+
+	interface = __cvmx_helper_cfg_pko_port_interface(pko_port);
+	mode = cvmx_helper_interface_get_mode(interface);
+
+	n = NUM_ELEMENTS(__cvmx_pko_queue_static_config[0].pknd.pko_cfg_iface);
+
+	if (mode == CVMX_HELPER_INTERFACE_MODE_LOOP) {
+		ret = __cvmx_pko_queue_static_config[0].pknd.pko_cfg_loop.queues_per_port;
+	} else if (mode == CVMX_HELPER_INTERFACE_MODE_NPI) {
+		ret = __cvmx_pko_queue_static_config[0].pknd.pko_cfg_npi.queues_per_port;
+	}
+
+	else if ((interface >= 0) && (interface < n)) {
+		ret = __cvmx_pko_queue_static_config[0].pknd.pko_cfg_iface[interface].queues_per_port;
+	} else {
+		/* Should never be called */
+		ret = 1;
+	}
+	/* Override for sanity in case of empty static config table */
+	if (ret == 0)
+		ret = 1;
+	return ret;
+}
+
+static int cvmx_helper_cfg_init_pko_iports_and_queues_using_static_config(void)
+{
+	int pko_port_base = 0;
+	int cvmx_cfg_default_pko_nports = 1;
+	int i, j, n, k;
+	int rv = 0;
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+
+	/* When not using config file, each port is assigned one internal pko port*/
+	for (i = 0; i < cvmx_helper_get_number_of_interfaces(); i++) {
+		n = cvmx_helper_interface_enumerate(i);
+		for (j = 0; j < n; j++) {
+			cvmx_cfg_port[0][i][j].ccpp_pko_port_base = pko_port_base;
+			cvmx_cfg_port[0][i][j].ccpp_pko_num_ports = cvmx_cfg_default_pko_nports;
+			/*
+			 * Initialize interface early here so that the
+			 * cvmx_helper_cfg_dft_nqueues() below
+			 * can get the interface number corresponding to the
+			 * pko port
+			 */
+			for (k = pko_port_base; k < pko_port_base + cvmx_cfg_default_pko_nports;
+			     k++) {
+				cvmx_cfg_pko_port_map[k].ccppl_interface = i;
+			}
+			pko_port_base += cvmx_cfg_default_pko_nports;
+		}
+	}
+	cvmx_helper_cfg_assert(pko_port_base <= CVMX_HELPER_CFG_MAX_PKO_PORT);
+
+	/* Assigning queues per pko */
+	for (i = 0; i < pko_port_base; i++) {
+		int base;
+
+		n = cvmx_helper_cfg_dft_nqueues(i);
+		base = cvmx_pko_queue_alloc(i, n);
+		if (base == -1) {
+			printf("ERROR: %s: failed to alloc %d queues for pko port=%d\n", __func__,
+			       n, i);
+			rv = -1;
+		}
+	}
+	return rv;
+}
+
+/**
+ * Returns if port is valid for a given interface
+ *
+ * @param xiface  interface to check
+ * @param index      port index in the interface
+ *
+ * @return status of the port present or not.
+ */
+int cvmx_helper_is_port_valid(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].valid;
+}
+
+void cvmx_helper_set_port_valid(int xiface, int index, bool valid)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].valid = valid;
+}
+
+void cvmx_helper_set_mac_phy_mode(int xiface, int index, bool valid)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].sgmii_phy_mode = valid;
+}
+
+bool cvmx_helper_get_mac_phy_mode(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].sgmii_phy_mode;
+}
+
+void cvmx_helper_set_1000x_mode(int xiface, int index, bool valid)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].sgmii_1000x_mode = valid;
+}
+
+bool cvmx_helper_get_1000x_mode(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].sgmii_1000x_mode;
+}
+
+void cvmx_helper_set_agl_rx_clock_delay_bypass(int xiface, int index, bool valid)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].agl_rx_clk_delay_bypass = valid;
+}
+
+bool cvmx_helper_get_agl_rx_clock_delay_bypass(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].agl_rx_clk_delay_bypass;
+}
+
+void cvmx_helper_set_agl_rx_clock_skew(int xiface, int index, uint8_t value)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].agl_rx_clk_skew = value;
+}
+
+uint8_t cvmx_helper_get_agl_rx_clock_skew(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].agl_rx_clk_skew;
+}
+
+void cvmx_helper_set_agl_refclk_sel(int xiface, int index, uint8_t value)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].agl_refclk_sel = value;
+}
+
+uint8_t cvmx_helper_get_agl_refclk_sel(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].agl_refclk_sel;
+}
+
+void cvmx_helper_set_port_force_link_up(int xiface, int index, bool value)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].force_link_up = value;
+}
+
+bool cvmx_helper_get_port_force_link_up(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].force_link_up;
+}
+
+void cvmx_helper_set_port_phy_present(int xiface, int index, bool value)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].phy_present = value;
+}
+
+bool cvmx_helper_get_port_phy_present(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].phy_present;
+}
+
+int __cvmx_helper_init_port_valid(void)
+{
+	int i, j, node;
+	bool valid;
+	static void *fdt_addr;
+	int rc;
+	struct cvmx_coremask pcm;
+
+	octeon_get_available_coremask(&pcm);
+
+	if (fdt_addr == 0)
+		fdt_addr = __cvmx_phys_addr_to_ptr((u64)gd->fdt_blob, 128 * 1024);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	if (octeon_has_feature(OCTEON_FEATURE_BGX)) {
+		rc = __cvmx_helper_parse_bgx_dt(fdt_addr);
+		if (!rc)
+			rc = __cvmx_fdt_parse_vsc7224(fdt_addr);
+		if (!rc)
+			rc = __cvmx_fdt_parse_avsp5410(fdt_addr);
+		if (!rc && octeon_has_feature(OCTEON_FEATURE_BGX_XCV))
+			rc = __cvmx_helper_parse_bgx_rgmii_dt(fdt_addr);
+
+		/* Some ports are not in sequence, the device tree does not
+		 * clear them.
+		 *
+		 * Also clear any ports that are not defined in the device tree.
+		 * Apply this to each node.
+		 */
+		for (node = 0; node < CVMX_MAX_NODES; node++) {
+			if (!cvmx_coremask_get64_node(&pcm, node))
+				continue;
+			for (i = 0; i < CVMX_HELPER_MAX_GMX; i++) {
+				int j;
+				int xiface = cvmx_helper_node_interface_to_xiface(node, i);
+
+				for (j = 0; j < cvmx_helper_interface_enumerate(i); j++) {
+					cvmx_bgxx_cmrx_config_t cmr_config;
+
+					cmr_config.u64 =
+						csr_rd_node(node, CVMX_BGXX_CMRX_CONFIG(j, i));
+					if ((cmr_config.s.lane_to_sds == 0xe4 &&
+					     cmr_config.s.lmac_type != 4 &&
+					     cmr_config.s.lmac_type != 1 &&
+					     cmr_config.s.lmac_type != 5) ||
+					    ((cvmx_helper_get_port_fdt_node_offset(xiface, j) ==
+					      CVMX_HELPER_CFG_INVALID_VALUE)))
+						cvmx_helper_set_port_valid(xiface, j, false);
+				}
+			}
+		}
+		return rc;
+	}
+
+	/* TODO: Update this to behave more like 78XX */
+	for (i = 0; i < cvmx_helper_get_number_of_interfaces(); i++) {
+		int n = cvmx_helper_interface_enumerate(i);
+
+		for (j = 0; j < n; j++) {
+			int ipd_port = cvmx_helper_get_ipd_port(i, j);
+
+			valid = (__cvmx_helper_board_get_port_from_dt(fdt_addr, ipd_port) == 1);
+			cvmx_helper_set_port_valid(i, j, valid);
+		}
+	}
+	return 0;
+}
+
+typedef int (*cvmx_import_config_t)(void);
+cvmx_import_config_t cvmx_import_app_config;
+
+int __cvmx_helper_init_port_config_data_local(void)
+{
+	int rv = 0;
+	int dbg = 0;
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+
+	if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		if (cvmx_import_app_config) {
+			rv = (*cvmx_import_app_config)();
+			if (rv != 0) {
+				debug("failed to import config\n");
+				return -1;
+			}
+		}
+
+		cvmx_helper_cfg_init_pko_port_map();
+		__cvmx_helper_cfg_init_ipd2pko_cache();
+	} else {
+		if (cvmx_import_app_config) {
+			rv = (*cvmx_import_app_config)();
+			if (rv != 0) {
+				debug("failed to import config\n");
+				return -1;
+			}
+		}
+	}
+	if (dbg) {
+		cvmx_helper_cfg_show_cfg();
+		cvmx_pko_queue_show();
+	}
+	return rv;
+}
+
+/*
+ * This call is made from Linux octeon_ethernet driver
+ * to setup the PKO with a specific queue count and
+ * internal port count configuration.
+ */
+int cvmx_pko_alloc_iport_and_queues(int interface, int port, int port_cnt, int queue_cnt)
+{
+	int rv, p, port_start, cnt;
+
+	if (dbg)
+		debug("%s: intf %d/%d pcnt %d qcnt %d\n", __func__, interface, port, port_cnt,
+		      queue_cnt);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		rv = cvmx_pko_internal_ports_alloc(interface, port, port_cnt);
+		if (rv < 0) {
+			printf("ERROR: %s: failed to allocate internal ports forinterface=%d port=%d cnt=%d\n",
+			       __func__, interface, port, port_cnt);
+			return -1;
+		}
+		port_start = __cvmx_helper_cfg_pko_port_base(interface, port);
+		cnt = __cvmx_helper_cfg_pko_port_num(interface, port);
+	} else {
+		port_start = cvmx_helper_get_ipd_port(interface, port);
+		cnt = 1;
+	}
+
+	for (p = port_start; p < port_start + cnt; p++) {
+		rv = cvmx_pko_queue_alloc(p, queue_cnt);
+		if (rv < 0) {
+			printf("ERROR: %s: failed to allocate queues for port=%d cnt=%d\n",
+			       __func__, p, queue_cnt);
+			return -1;
+		}
+	}
+	return 0;
+}
+
+static void cvmx_init_port_cfg(void)
+{
+	int node, i, j;
+
+	if (port_cfg_data_initialized)
+		return;
+
+	for (node = 0; node < CVMX_MAX_NODES; node++) {
+		for (i = 0; i < CVMX_HELPER_MAX_IFACE; i++) {
+			for (j = 0; j < CVMX_HELPER_CFG_MAX_PORT_PER_IFACE; j++) {
+				struct cvmx_cfg_port_param *pcfg;
+				struct cvmx_srio_port_param *sr;
+
+				pcfg = &cvmx_cfg_port[node][i][j];
+				memset(pcfg, 0, sizeof(*pcfg));
+
+				pcfg->port_fdt_node = CVMX_HELPER_CFG_INVALID_VALUE;
+				pcfg->phy_fdt_node = CVMX_HELPER_CFG_INVALID_VALUE;
+				pcfg->phy_info = NULL;
+				pcfg->ccpp_pknd = CVMX_HELPER_CFG_INVALID_VALUE;
+				pcfg->ccpp_bpid = CVMX_HELPER_CFG_INVALID_VALUE;
+				pcfg->ccpp_pko_port_base = CVMX_HELPER_CFG_INVALID_VALUE;
+				pcfg->ccpp_pko_num_ports = CVMX_HELPER_CFG_INVALID_VALUE;
+				pcfg->agl_rx_clk_skew = 0;
+				pcfg->valid = true;
+				pcfg->sgmii_phy_mode = false;
+				pcfg->sgmii_1000x_mode = false;
+				pcfg->agl_rx_clk_delay_bypass = false;
+				pcfg->force_link_up = false;
+				pcfg->disable_an = false;
+				pcfg->link_down_pwr_dn = false;
+				pcfg->phy_present = false;
+				pcfg->tx_clk_delay_bypass = false;
+				pcfg->rgmii_tx_clk_delay = 0;
+				pcfg->enable_fec = false;
+				sr = &pcfg->srio_short;
+				sr->srio_rx_ctle_agc_override = false;
+				sr->srio_rx_ctle_zero = 0x6;
+				sr->srio_rx_agc_pre_ctle = 0x5;
+				sr->srio_rx_agc_post_ctle = 0x4;
+				sr->srio_tx_swing_override = false;
+				sr->srio_tx_swing = 0x7;
+				sr->srio_tx_premptap_override = false;
+				sr->srio_tx_premptap_pre = 0;
+				sr->srio_tx_premptap_post = 0xF;
+				sr->srio_tx_gain_override = false;
+				sr->srio_tx_gain = 0x3;
+				sr->srio_tx_vboost_override = 0;
+				sr->srio_tx_vboost = true;
+				sr = &pcfg->srio_long;
+				sr->srio_rx_ctle_agc_override = false;
+				sr->srio_rx_ctle_zero = 0x6;
+				sr->srio_rx_agc_pre_ctle = 0x5;
+				sr->srio_rx_agc_post_ctle = 0x4;
+				sr->srio_tx_swing_override = false;
+				sr->srio_tx_swing = 0x7;
+				sr->srio_tx_premptap_override = false;
+				sr->srio_tx_premptap_pre = 0;
+				sr->srio_tx_premptap_post = 0xF;
+				sr->srio_tx_gain_override = false;
+				sr->srio_tx_gain = 0x3;
+				sr->srio_tx_vboost_override = 0;
+				sr->srio_tx_vboost = true;
+				pcfg->agl_refclk_sel = 0;
+				pcfg->sfp_of_offset = -1;
+				pcfg->vsc7224_chan = NULL;
+			}
+		}
+	}
+	port_cfg_data_initialized = true;
+}
+
+int __cvmx_helper_init_port_config_data(int node)
+{
+	int rv = 0;
+	int i, j, n;
+	int num_interfaces, interface;
+	int pknd = 0, bpid = 0;
+	const int use_static_config = 1;
+
+	if (dbg)
+		printf("%s:\n", __func__);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		/* PKO3: only needs BPID, PKND to be setup,
+		 * while the rest of PKO3 init is done in cvmx-helper-pko3.c
+		 */
+		pknd = 0;
+		bpid = 0;
+		for (i = 0; i < cvmx_helper_get_number_of_interfaces(); i++) {
+			int xiface = cvmx_helper_node_interface_to_xiface(node, i);
+
+			n = cvmx_helper_interface_enumerate(xiface);
+			/*
+			 * Assign 8 pknds to ILK interface, these pknds will be
+			 * distributed among the channels configured
+			 */
+			if (cvmx_helper_interface_get_mode(xiface) ==
+			    CVMX_HELPER_INTERFACE_MODE_ILK) {
+				if (n > 8)
+					n = 8;
+			}
+			if (cvmx_helper_interface_get_mode(xiface) !=
+			    CVMX_HELPER_INTERFACE_MODE_NPI) {
+				for (j = 0; j < n; j++) {
+					struct cvmx_cfg_port_param *pcfg;
+
+					pcfg = &cvmx_cfg_port[node][i][j];
+					pcfg->ccpp_pknd = pknd++;
+					pcfg->ccpp_bpid = bpid++;
+				}
+			} else {
+				for (j = 0; j < n; j++) {
+					if (j == n / cvmx_npi_max_pknds) {
+						pknd++;
+						bpid++;
+					}
+					cvmx_cfg_port[node][i][j].ccpp_pknd = pknd;
+					cvmx_cfg_port[node][i][j].ccpp_bpid = bpid;
+				}
+				pknd++;
+				bpid++;
+			}
+		} /* for i=0 */
+		cvmx_helper_cfg_assert(pknd <= CVMX_HELPER_CFG_MAX_PIP_PKND);
+		cvmx_helper_cfg_assert(bpid <= CVMX_HELPER_CFG_MAX_PIP_BPID);
+	} else if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		if (use_static_config)
+			cvmx_helper_cfg_init_pko_iports_and_queues_using_static_config();
+
+		/* Initialize pknd and bpid */
+		for (i = 0; i < cvmx_helper_get_number_of_interfaces(); i++) {
+			n = cvmx_helper_interface_enumerate(i);
+			for (j = 0; j < n; j++) {
+				cvmx_cfg_port[0][i][j].ccpp_pknd = pknd++;
+				cvmx_cfg_port[0][i][j].ccpp_bpid = bpid++;
+			}
+		}
+		cvmx_helper_cfg_assert(pknd <= CVMX_HELPER_CFG_MAX_PIP_PKND);
+		cvmx_helper_cfg_assert(bpid <= CVMX_HELPER_CFG_MAX_PIP_BPID);
+	} else {
+		if (use_static_config)
+			cvmx_pko_queue_init_from_cvmx_config_non_pknd();
+	}
+
+	/* Remainder not used for PKO3 */
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		return 0;
+
+	/* init ports, queues which are not initialized */
+	num_interfaces = cvmx_helper_get_number_of_interfaces();
+	for (interface = 0; interface < num_interfaces; interface++) {
+		int num_ports = __cvmx_helper_early_ports_on_interface(interface);
+		int port, port_base, queue;
+
+		for (port = 0; port < num_ports; port++) {
+			bool init_req = false;
+
+			if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+				port_base = __cvmx_helper_cfg_pko_port_base(interface, port);
+				if (port_base == CVMX_HELPER_CFG_INVALID_VALUE)
+					init_req = true;
+			} else {
+				port_base = cvmx_helper_get_ipd_port(interface, port);
+				queue = __cvmx_helper_cfg_pko_queue_base(port_base);
+				if (queue == CVMX_HELPER_CFG_INVALID_VALUE)
+					init_req = true;
+			}
+
+			if (init_req) {
+				rv = cvmx_pko_alloc_iport_and_queues(interface, port, 1, 1);
+				if (rv < 0) {
+					debug("cvm_pko_alloc_iport_and_queues failed.\n");
+					return rv;
+				}
+			}
+		}
+	}
+
+	if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		cvmx_helper_cfg_init_pko_port_map();
+		__cvmx_helper_cfg_init_ipd2pko_cache();
+	}
+
+	if (dbg) {
+		cvmx_helper_cfg_show_cfg();
+		cvmx_pko_queue_show();
+	}
+	return rv;
+}
+
+/**
+ * @INTERNAL
+ * Store the FDT node offset in the device tree of a port
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param node_offset	node offset to store
+ */
+void cvmx_helper_set_port_fdt_node_offset(int xiface, int index, int node_offset)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].port_fdt_node = node_offset;
+}
+
+/**
+ * @INTERNAL
+ * Return the FDT node offset in the device tree of a port
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @return		node offset of port or -1 if invalid
+ */
+int cvmx_helper_get_port_fdt_node_offset(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].port_fdt_node;
+}
+
+/**
+ * Search for a port based on its FDT node offset
+ *
+ * @param	of_offset	Node offset of port to search for
+ * @param[out]	xiface		xinterface of match
+ * @param[out]	index		port index of match
+ *
+ * @return	0 if found, -1 if not found
+ */
+int cvmx_helper_cfg_get_xiface_index_by_fdt_node_offset(int of_offset, int *xiface, int *index)
+{
+	int iface;
+	int i;
+	int node;
+	struct cvmx_cfg_port_param *pcfg = NULL;
+	*xiface = -1;
+	*index = -1;
+
+	for (node = 0; node < CVMX_MAX_NODES; node++) {
+		for (iface = 0; iface < CVMX_HELPER_MAX_IFACE; iface++) {
+			for (i = 0; i < CVMX_HELPER_CFG_MAX_PORT_PER_IFACE; i++) {
+				pcfg = &cvmx_cfg_port[node][iface][i];
+				if (pcfg->valid && pcfg->port_fdt_node == of_offset) {
+					*xiface = cvmx_helper_node_interface_to_xiface(node, iface);
+					*index = i;
+					return 0;
+				}
+			}
+		}
+	}
+	return -1;
+}
+
+/**
+ * @INTERNAL
+ * Store the FDT node offset in the device tree of a phy
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param node_offset	node offset to store
+ */
+void cvmx_helper_set_phy_fdt_node_offset(int xiface, int index, int node_offset)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].phy_fdt_node = node_offset;
+}
+
+/**
+ * @INTERNAL
+ * Return the FDT node offset in the device tree of a phy
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @return		node offset of phy or -1 if invalid
+ */
+int cvmx_helper_get_phy_fdt_node_offset(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].phy_fdt_node;
+}
+
+/**
+ * @INTERNAL
+ * Override default autonegotiation for a port
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param enable	true to enable autonegotiation, false to force full
+ *			duplex, full speed.
+ */
+void cvmx_helper_set_port_autonegotiation(int xiface, int index, bool enable)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].disable_an = !enable;
+}
+
+/**
+ * @INTERNAL
+ * Returns if autonegotiation is enabled or not.
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return 0 if autonegotiation is disabled, 1 if enabled.
+ */
+bool cvmx_helper_get_port_autonegotiation(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return !cvmx_cfg_port[xi.node][xi.interface][index].disable_an;
+}
+
+/**
+ * @INTERNAL
+ * Override default forward error correction for a port
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param enable	true to enable fec, false to disable it
+ */
+void cvmx_helper_set_port_fec(int xiface, int index, bool enable)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].enable_fec = enable;
+}
+
+/**
+ * @INTERNAL
+ * Returns if forward error correction is enabled or not.
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return false if fec is disabled, true if enabled.
+ */
+bool cvmx_helper_get_port_fec(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].enable_fec;
+}
+
+/**
+ * @INTERNAL
+ * Configure the SRIO RX interface AGC settings for host mode
+ *
+ * @param xiface	node and interface
+ * @param index		lane
+ * @param long_run	true for long run, false for short run
+ * @param agc_override	true to put AGC in manual mode
+ * @param ctle_zero	RX equalizer peaking control (default 0x6)
+ * @param agc_pre_ctle	AGC pre-CTLE gain (default 0x5)
+ * @param agc_post_ctle	AGC post-CTLE gain (default 0x4)
+ *
+ * NOTE: This must be called before SRIO is initialized to take effect
+ */
+void cvmx_helper_set_srio_rx(int xiface, int index, bool long_run, bool ctle_zero_override,
+			     u8 ctle_zero, bool agc_override, uint8_t agc_pre_ctle,
+			     uint8_t agc_post_ctle)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	struct cvmx_cfg_port_param *pcfg = &cvmx_cfg_port[xi.node][xi.interface][index];
+	struct cvmx_srio_port_param *sr = long_run ? &pcfg->srio_long : &pcfg->srio_short;
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	sr->srio_rx_ctle_zero_override = ctle_zero_override;
+	sr->srio_rx_ctle_zero = ctle_zero;
+	sr->srio_rx_ctle_agc_override = agc_override;
+	sr->srio_rx_agc_pre_ctle = agc_pre_ctle;
+	sr->srio_rx_agc_post_ctle = agc_post_ctle;
+}
+
+/**
+ * @INTERNAL
+ * Get the SRIO RX interface AGC settings for host mode
+ *
+ * @param xiface	node and interface
+ * @param index		lane
+ * @param long_run	true for long run, false for short run
+ * @param[out] agc_override	true to put AGC in manual mode
+ * @param[out] ctle_zero	RX equalizer peaking control (default 0x6)
+ * @param[out] agc_pre_ctle	AGC pre-CTLE gain (default 0x5)
+ * @param[out] agc_post_ctle	AGC post-CTLE gain (default 0x4)
+ */
+void cvmx_helper_get_srio_rx(int xiface, int index, bool long_run, bool *ctle_zero_override,
+			     u8 *ctle_zero, bool *agc_override, uint8_t *agc_pre_ctle,
+			     uint8_t *agc_post_ctle)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	struct cvmx_cfg_port_param *pcfg = &cvmx_cfg_port[xi.node][xi.interface][index];
+	struct cvmx_srio_port_param *sr = long_run ? &pcfg->srio_long : &pcfg->srio_short;
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	if (ctle_zero_override)
+		*ctle_zero_override = sr->srio_rx_ctle_zero_override;
+	if (ctle_zero)
+		*ctle_zero = sr->srio_rx_ctle_zero;
+	if (agc_override)
+		*agc_override = sr->srio_rx_ctle_agc_override;
+	if (agc_pre_ctle)
+		*agc_pre_ctle = sr->srio_rx_agc_pre_ctle;
+	if (agc_post_ctle)
+		*agc_post_ctle = sr->srio_rx_agc_post_ctle;
+}
+
+/**
+ * @INTERNAL
+ * Configure the SRIO TX interface for host mode
+ *
+ * @param xiface		node and interface
+ * @param index			lane
+ * @param long_run		true for long run, false for short run
+ * @param tx_swing		tx swing value to use (default 0x7), -1 to not
+ *				override.
+ * @param tx_gain		PCS SDS TX gain (default 0x3), -1 to not
+ *				override
+ * @param tx_premptap_override	true to override preemphasis control
+ * @param tx_premptap_pre	preemphasis pre tap value (default 0x0)
+ * @param tx_premptap_post	preemphasis post tap value (default 0xF)
+ * @param tx_vboost		vboost enable (1 = enable, -1 = don't override)
+ *				hardware default is 1.
+ *
+ * NOTE: This must be called before SRIO is initialized to take effect
+ */
+void cvmx_helper_set_srio_tx(int xiface, int index, bool long_run, int tx_swing, int tx_gain,
+			     bool tx_premptap_override, uint8_t tx_premptap_pre,
+			     u8 tx_premptap_post, int tx_vboost)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	struct cvmx_cfg_port_param *pcfg = &cvmx_cfg_port[xi.node][xi.interface][index];
+	struct cvmx_srio_port_param *sr = long_run ? &pcfg->srio_long : &pcfg->srio_short;
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+
+	sr->srio_tx_swing_override = (tx_swing != -1);
+	sr->srio_tx_swing = tx_swing != -1 ? tx_swing : 0x7;
+	sr->srio_tx_gain_override = (tx_gain != -1);
+	sr->srio_tx_gain = tx_gain != -1 ? tx_gain : 0x3;
+	sr->srio_tx_premptap_override = tx_premptap_override;
+	sr->srio_tx_premptap_pre = tx_premptap_override ? tx_premptap_pre : 0;
+	sr->srio_tx_premptap_post = tx_premptap_override ? tx_premptap_post : 0xF;
+	sr->srio_tx_vboost_override = tx_vboost != -1;
+	sr->srio_tx_vboost = (tx_vboost != -1) ? tx_vboost : 1;
+}
+
+/**
+ * @INTERNAL
+ * Get the SRIO TX interface settings for host mode
+ *
+ * @param xiface			node and interface
+ * @param index				lane
+ * @param long_run			true for long run, false for short run
+ * @param[out] tx_swing_override	true to override pcs_sds_txX_swing
+ * @param[out] tx_swing			tx swing value to use (default 0x7)
+ * @param[out] tx_gain_override		true to override default gain
+ * @param[out] tx_gain			PCS SDS TX gain (default 0x3)
+ * @param[out] tx_premptap_override	true to override preemphasis control
+ * @param[out] tx_premptap_pre		preemphasis pre tap value (default 0x0)
+ * @param[out] tx_premptap_post		preemphasis post tap value (default 0xF)
+ * @param[out] tx_vboost_override	override vboost setting
+ * @param[out] tx_vboost		vboost enable (default true)
+ */
+void cvmx_helper_get_srio_tx(int xiface, int index, bool long_run, bool *tx_swing_override,
+			     u8 *tx_swing, bool *tx_gain_override, uint8_t *tx_gain,
+			     bool *tx_premptap_override, uint8_t *tx_premptap_pre,
+			     u8 *tx_premptap_post, bool *tx_vboost_override, bool *tx_vboost)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	struct cvmx_cfg_port_param *pcfg = &cvmx_cfg_port[xi.node][xi.interface][index];
+	struct cvmx_srio_port_param *sr = long_run ? &pcfg->srio_long : &pcfg->srio_short;
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+
+	if (tx_swing_override)
+		*tx_swing_override = sr->srio_tx_swing_override;
+	if (tx_swing)
+		*tx_swing = sr->srio_tx_swing;
+	if (tx_gain_override)
+		*tx_gain_override = sr->srio_tx_gain_override;
+	if (tx_gain)
+		*tx_gain = sr->srio_tx_gain;
+	if (tx_premptap_override)
+		*tx_premptap_override = sr->srio_tx_premptap_override;
+	if (tx_premptap_pre)
+		*tx_premptap_pre = sr->srio_tx_premptap_pre;
+	if (tx_premptap_post)
+		*tx_premptap_post = sr->srio_tx_premptap_post;
+	if (tx_vboost_override)
+		*tx_vboost_override = sr->srio_tx_vboost_override;
+	if (tx_vboost)
+		*tx_vboost = sr->srio_tx_vboost;
+}
+
+/**
+ * @INTERNAL
+ * Sets the PHY info data structure
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param[in] phy_info	phy information data structure pointer
+ */
+void cvmx_helper_set_port_phy_info(int xiface, int index, struct cvmx_phy_info *phy_info)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].phy_info = phy_info;
+}
+
+/**
+ * @INTERNAL
+ * Returns the PHY information data structure for a port
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return pointer to PHY information data structure or NULL if not set
+ */
+struct cvmx_phy_info *cvmx_helper_get_port_phy_info(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].phy_info;
+}
+
+/**
+ * @INTERNAL
+ * Returns a pointer to the PHY LED configuration (if local GPIOs drive them)
+ *
+ * @param xiface	node and interface
+ * @param index		portindex
+ *
+ * @return pointer to the PHY LED information data structure or NULL if not
+ *	   present
+ */
+struct cvmx_phy_gpio_leds *cvmx_helper_get_port_phy_leds(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].gpio_leds;
+}
+
+/**
+ * @INTERNAL
+ * Sets a pointer to the PHY LED configuration (if local GPIOs drive them)
+ *
+ * @param xiface	node and interface
+ * @param index		portindex
+ * @param leds		pointer to led data structure
+ */
+void cvmx_helper_set_port_phy_leds(int xiface, int index, struct cvmx_phy_gpio_leds *leds)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].gpio_leds = leds;
+}
+
+/**
+ * @INTERNAL
+ * Disables RGMII TX clock bypass and sets delay value
+ *
+ * @param xiface	node and interface
+ * @param index		portindex
+ * @param bypass	Set true to enable the clock bypass and false
+ *			to sync clock and data synchronously.
+ *			Default is false.
+ * @param clk_delay	Delay value to skew TXC from TXD
+ */
+void cvmx_helper_cfg_set_rgmii_tx_clk_delay(int xiface, int index, bool bypass, int clk_delay)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].tx_clk_delay_bypass = bypass;
+	cvmx_cfg_port[xi.node][xi.interface][index].rgmii_tx_clk_delay = clk_delay;
+}
+
+/**
+ * @INTERNAL
+ * Gets RGMII TX clock bypass and delay value
+ *
+ * @param xiface	node and interface
+ * @param index		portindex
+ * @param bypass	Set true to enable the clock bypass and false
+ *			to sync clock and data synchronously.
+ *			Default is false.
+ * @param clk_delay	Delay value to skew TXC from TXD, default is 0.
+ */
+void cvmx_helper_cfg_get_rgmii_tx_clk_delay(int xiface, int index, bool *bypass, int *clk_delay)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	*bypass = cvmx_cfg_port[xi.node][xi.interface][index].tx_clk_delay_bypass;
+
+	*clk_delay = cvmx_cfg_port[xi.node][xi.interface][index].rgmii_tx_clk_delay;
+}
+
+/**
+ * @INTERNAL
+ * Retrieve the SFP node offset in the device tree
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return offset in device tree or -1 if error or not defined.
+ */
+int cvmx_helper_cfg_get_sfp_fdt_offset(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].sfp_of_offset;
+}
+
+/**
+ * @INTERNAL
+ * Sets the SFP node offset
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param sfp_of_offset	Offset of SFP node in device tree
+ */
+void cvmx_helper_cfg_set_sfp_fdt_offset(int xiface, int index, int sfp_of_offset)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].sfp_of_offset = sfp_of_offset;
+}
+
+/**
+ * Get data structure defining the Microsemi VSC7224 channel info
+ * or NULL if not present
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return pointer to vsc7224 data structure or NULL if not present
+ */
+struct cvmx_vsc7224_chan *cvmx_helper_cfg_get_vsc7224_chan_info(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].vsc7224_chan;
+}
+
+/**
+ * Sets the Microsemi VSC7224 channel info data structure
+ *
+ * @param	xiface	node and interface
+ * @param	index	port index
+ * @param[in]	vsc7224_info	Microsemi VSC7224 data structure
+ */
+void cvmx_helper_cfg_set_vsc7224_chan_info(int xiface, int index,
+					   struct cvmx_vsc7224_chan *vsc7224_chan_info)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].vsc7224_chan = vsc7224_chan_info;
+}
+
+/**
+ * Get data structure defining the Avago AVSP5410 phy info
+ * or NULL if not present
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return pointer to avsp5410 data structure or NULL if not present
+ */
+struct cvmx_avsp5410 *cvmx_helper_cfg_get_avsp5410_info(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].avsp5410;
+}
+
+/**
+ * Sets the Avago AVSP5410 phy info data structure
+ *
+ * @param	xiface	node and interface
+ * @param	index	port index
+ * @param[in]	avsp5410_info	Avago AVSP5410 data structure
+ */
+void cvmx_helper_cfg_set_avsp5410_info(int xiface, int index, struct cvmx_avsp5410 *avsp5410_info)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].avsp5410 = avsp5410_info;
+}
+
+/**
+ * Gets the SFP data associated with a port
+ *
+ * @param	xiface	node and interface
+ * @param	index	port index
+ *
+ * @return	pointer to SFP data structure or NULL if none
+ */
+struct cvmx_fdt_sfp_info *cvmx_helper_cfg_get_sfp_info(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].sfp_info;
+}
+
+/**
+ * Sets the SFP data associated with a port
+ *
+ * @param	xiface		node and interface
+ * @param	index		port index
+ * @param[in]	sfp_info	port SFP data or NULL for none
+ */
+void cvmx_helper_cfg_set_sfp_info(int xiface, int index, struct cvmx_fdt_sfp_info *sfp_info)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].sfp_info = sfp_info;
+}
+
+/**
+ * Returns a pointer to the phy device associated with a port
+ *
+ * @param	xiface		node and interface
+ * @param	index		port index
+ *
+ * return	pointer to phy device or NULL if none
+ */
+struct phy_device *cvmx_helper_cfg_get_phy_device(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	return cvmx_cfg_port[xi.node][xi.interface][index].phydev;
+}
+
+/**
+ * Sets the phy device associated with a port
+ *
+ * @param	xiface		node and interface
+ * @param	index		port index
+ * @param[in]	phydev		phy device to assiciate
+ */
+void cvmx_helper_cfg_set_phy_device(int xiface, int index, struct phy_device *phydev)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (!port_cfg_data_initialized)
+		cvmx_init_port_cfg();
+	cvmx_cfg_port[xi.node][xi.interface][index].phydev = phydev;
+}
diff --git a/arch/mips/mach-octeon/cvmx-helper-fdt.c b/arch/mips/mach-octeon/cvmx-helper-fdt.c
new file mode 100644
index 0000000..87bc6d2
--- /dev/null
+++ b/arch/mips/mach-octeon/cvmx-helper-fdt.c
@@ -0,0 +1,970 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * FDT Helper functions similar to those provided to U-Boot.
+ */
+
+#include <log.h>
+#include <malloc.h>
+#include <net.h>
+#include <linux/delay.h>
+
+#include <mach/cvmx-regs.h>
+#include <mach/cvmx-csr.h>
+#include <mach/cvmx-bootmem.h>
+#include <mach/octeon-model.h>
+#include <mach/octeon_fdt.h>
+#include <mach/cvmx-helper.h>
+#include <mach/cvmx-helper-board.h>
+#include <mach/cvmx-helper-cfg.h>
+#include <mach/cvmx-helper-fdt.h>
+#include <mach/cvmx-helper-gpio.h>
+
+/** Structure used to get type of GPIO from device tree */
+struct gpio_compat {
+	char *compatible;	  /** Compatible string */
+	enum cvmx_gpio_type type; /** Type */
+	int8_t size;		  /** (max) Number of pins */
+};
+
+#define GPIO_REG_PCA953X_IN	0
+#define GPIO_REG_PCA953X_OUT	1
+#define GPIO_REG_PCA953X_INVERT 2
+#define GPIO_REG_PCA953X_DIR	3
+
+#define GPIO_REG_PCA957X_IN	0
+#define GPIO_REG_PCA957X_INVERT 1
+#define GPIO_REG_PCA957X_CFG	4
+#define GPIO_REG_PCA957X_OUT	5
+
+enum cvmx_i2c_mux_type { I2C_MUX, I2C_SWITCH };
+
+/** Structure used to get type of GPIO from device tree */
+struct mux_compat {
+	char *compatible;		 /** Compatible string */
+	enum cvmx_i2c_bus_type type;	 /** Mux chip type */
+	enum cvmx_i2c_mux_type mux_type; /** Type of mux */
+	u8 enable;			 /** Enable bit for mux */
+	u8 size;			 /** (max) Number of channels */
+};
+
+/**
+ * Local allocator to handle both SE and U-Boot that also zeroes out memory
+ *
+ * @param	size	number of bytes to allocate
+ *
+ * @return	pointer to allocated memory or NULL if out of memory.
+ *		Alignment is set to 8-bytes.
+ */
+void *__cvmx_fdt_alloc(size_t size)
+{
+	return calloc(size, 1);
+}
+
+/**
+ * Free allocated memory.
+ *
+ * @param	ptr	pointer to memory to free
+ *
+ * NOTE: This only works in U-Boot since SE does not really have a freeing
+ *	 mechanism.  In SE the memory is zeroed out.
+ */
+void __cvmx_fdt_free(void *ptr, size_t size)
+{
+	free(ptr);
+}
+
+/**
+ * Look up a phandle and follow it to its node then return the offset of that
+ * node.
+ *
+ * @param[in]	fdt_addr	pointer to FDT blob
+ * @param	node		node to read phandle from
+ * @param[in]	prop_name	name of property to find
+ * @param[in,out] lenp		Number of phandles, input max number
+ * @param[out]	nodes		Array of phandle nodes
+ *
+ * @return	-ve error code on error or 0 for success
+ */
+int cvmx_fdt_lookup_phandles(const void *fdt_addr, int node,
+			     const char *prop_name, int *lenp,
+			     int *nodes)
+{
+	const u32 *phandles;
+	int count;
+	int i;
+
+	phandles = fdt_getprop(fdt_addr, node, prop_name, &count);
+	if (!phandles || count < 0)
+		return -FDT_ERR_NOTFOUND;
+
+	count /= 4;
+	if (count > *lenp)
+		count = *lenp;
+
+	for (i = 0; i < count; i++)
+		nodes[i] = fdt_node_offset_by_phandle(fdt_addr,
+						      fdt32_to_cpu(phandles[i]));
+	*lenp = count;
+	return 0;
+}
+
+/**
+ * Given a FDT node return the CPU node number
+ *
+ * @param[in]	fdt_addr	Address of FDT
+ * @param	node		FDT node number
+ *
+ * @return	CPU node number or error if negative
+ */
+int cvmx_fdt_get_cpu_node(const void *fdt_addr, int node)
+{
+	int parent = node;
+	const u32 *ranges;
+	int len = 0;
+
+	while (fdt_node_check_compatible(fdt_addr, parent, "simple-bus") != 0) {
+		parent = fdt_parent_offset(fdt_addr, parent);
+		if (parent < 0)
+			return parent;
+	}
+	ranges = fdt_getprop(fdt_addr, parent, "ranges", &len);
+	if (!ranges)
+		return len;
+
+	if (len == 0)
+		return 0;
+
+	if (len < 24)
+		return -FDT_ERR_TRUNCATED;
+
+	return fdt32_to_cpu(ranges[2]) / 0x10;
+}
+
+/**
+ * Get the total size of the flat device tree
+ *
+ * @param[in]	fdt_addr	Address of FDT
+ *
+ * @return	Size of flat device tree in bytes or error if negative.
+ */
+int cvmx_fdt_get_fdt_size(const void *fdt_addr)
+{
+	int rc;
+
+	rc = fdt_check_header(fdt_addr);
+	if (rc)
+		return rc;
+	return fdt_totalsize(fdt_addr);
+}
+
+/**
+ * Returns if a node is compatible with one of the items in the string list
+ *
+ * @param[in]	fdt_addr	Pointer to flat device tree
+ * @param	node		Node offset to check
+ * @param[in]	strlist		Array of FDT device compatibility strings,
+ *				must end with NULL or empty string.
+ *
+ * @return	0 if at least one item matches, 1 if no matches
+ */
+int cvmx_fdt_node_check_compatible_list(const void *fdt_addr, int node, const char *const *strlist)
+{
+	while (*strlist && **strlist) {
+		if (!fdt_node_check_compatible(fdt_addr, node, *strlist))
+			return 0;
+		strlist++;
+	}
+	return 1;
+}
+
+/**
+ * Given a FDT node, return the next compatible node.
+ *
+ * @param[in]	fdt_addr	Pointer to flat device tree
+ * @param	start_offset	Starting node offset or -1 to find the first
+ * @param	strlist		Array of FDT device compatibility strings, must
+ *				end with NULL or empty string.
+ *
+ * @return	next matching node or -1 if no more matches.
+ */
+int cvmx_fdt_node_offset_by_compatible_list(const void *fdt_addr, int startoffset,
+					    const char *const *strlist)
+{
+	int offset;
+
+	for (offset = fdt_next_node(fdt_addr, startoffset, NULL); offset >= 0;
+	     offset = fdt_next_node(fdt_addr, offset, NULL)) {
+		if (!cvmx_fdt_node_check_compatible_list(fdt_addr, offset, strlist))
+			return offset;
+	}
+	return -1;
+}
+
+/**
+ * Attaches a PHY to a SFP or QSFP.
+ *
+ * @param	sfp		sfp to attach PHY to
+ * @param	phy_info	phy descriptor to attach or NULL to detach
+ */
+void cvmx_sfp_attach_phy(struct cvmx_fdt_sfp_info *sfp, struct cvmx_phy_info *phy_info)
+{
+	sfp->phy_info = phy_info;
+	if (phy_info)
+		phy_info->sfp_info = sfp;
+}
+
+/**
+ * Assigns an IPD port to a SFP slot
+ *
+ * @param	sfp		Handle to SFP data structure
+ * @param	ipd_port	Port to assign it to
+ *
+ * @return	0 for success, -1 on error
+ */
+int cvmx_sfp_set_ipd_port(struct cvmx_fdt_sfp_info *sfp, int ipd_port)
+{
+	int i;
+
+	if (sfp->is_qsfp) {
+		int xiface;
+		cvmx_helper_interface_mode_t mode;
+
+		xiface = cvmx_helper_get_interface_num(ipd_port);
+		mode = cvmx_helper_interface_get_mode(xiface);
+		sfp->ipd_port[0] = ipd_port;
+
+		switch (mode) {
+		case CVMX_HELPER_INTERFACE_MODE_SGMII:
+		case CVMX_HELPER_INTERFACE_MODE_XFI:
+		case CVMX_HELPER_INTERFACE_MODE_10G_KR:
+			for (i = 1; i < 4; i++)
+				sfp->ipd_port[i] = cvmx_helper_get_ipd_port(xiface, i);
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_XLAUI:
+		case CVMX_HELPER_INTERFACE_MODE_40G_KR4:
+			sfp->ipd_port[0] = ipd_port;
+			for (i = 1; i < 4; i++)
+				sfp->ipd_port[i] = -1;
+			break;
+		default:
+			debug("%s: Interface mode %s for interface 0x%x, ipd_port %d not supported for QSFP\n",
+			      __func__, cvmx_helper_interface_mode_to_string(mode), xiface,
+			      ipd_port);
+			return -1;
+		}
+	} else {
+		sfp->ipd_port[0] = ipd_port;
+		for (i = 1; i < 4; i++)
+			sfp->ipd_port[i] = -1;
+	}
+	return 0;
+}
+
+/**
+ * Parses all of the channels assigned to a VSC7224 device
+ *
+ * @param[in]		fdt_addr	Address of flat device tree
+ * @param		of_offset	Offset of vsc7224 node
+ * @param[in,out]	vsc7224		Data structure to hold the data
+ *
+ * @return	0 for success, -1 on error
+ */
+static int cvmx_fdt_parse_vsc7224_channels(const void *fdt_addr, int of_offset,
+					   struct cvmx_vsc7224 *vsc7224)
+{
+	int parent_offset = of_offset;
+	int err = 0;
+	int reg;
+	int num_chan = 0;
+	struct cvmx_vsc7224_chan *channel;
+	struct cvmx_fdt_sfp_info *sfp_info;
+	int len;
+	int num_taps;
+	int i;
+	const u32 *tap_values;
+	int of_mac;
+	int xiface, index;
+	bool is_tx;
+	bool is_qsfp;
+	const char *mac_str;
+
+	debug("%s(%p, %d, %s)\n", __func__, fdt_addr, of_offset, vsc7224->name);
+	do {
+		/* Walk through all channels */
+		of_offset = fdt_node_offset_by_compatible(fdt_addr, of_offset,
+							  "vitesse,vsc7224-channel");
+		if (of_offset == -FDT_ERR_NOTFOUND) {
+			break;
+		} else if (of_offset < 0) {
+			debug("%s: Failed finding compatible channel\n",
+			      __func__);
+			err = -1;
+			break;
+		}
+		if (fdt_parent_offset(fdt_addr, of_offset) != parent_offset)
+			break;
+		reg = cvmx_fdt_get_int(fdt_addr, of_offset, "reg", -1);
+		if (reg < 0 || reg > 3) {
+			debug("%s: channel reg is either not present or out of range\n",
+			      __func__);
+			err = -1;
+			break;
+		}
+		is_tx = cvmx_fdt_get_bool(fdt_addr, of_offset, "direction-tx");
+
+		debug("%s(%s): Adding %cx channel %d\n",
+		      __func__, vsc7224->name, is_tx ? 't' : 'r',
+		      reg);
+		tap_values = (const uint32_t *)fdt_getprop(fdt_addr, of_offset, "taps", &len);
+		if (!tap_values) {
+			debug("%s: Error: no taps defined for vsc7224 channel %d\n",
+			      __func__, reg);
+			err = -1;
+			break;
+		}
+
+		if (vsc7224->channel[reg]) {
+			debug("%s: Error: channel %d already assigned at %p\n",
+			      __func__, reg,
+			      vsc7224->channel[reg]);
+			err = -1;
+			break;
+		}
+		if (len % 16) {
+			debug("%s: Error: tap format error for channel %d\n",
+			      __func__, reg);
+			err = -1;
+			break;
+		}
+		num_taps = len / 16;
+		debug("%s: Adding %d taps\n", __func__, num_taps);
+
+		channel = __cvmx_fdt_alloc(sizeof(*channel) +
+					   num_taps * sizeof(struct cvmx_vsc7224_tap));
+		if (!channel) {
+			debug("%s: Out of memory\n", __func__);
+			err = -1;
+			break;
+		}
+		vsc7224->channel[reg] = channel;
+		channel->num_taps = num_taps;
+		channel->lane = reg;
+		channel->of_offset = of_offset;
+		channel->is_tx = is_tx;
+		channel->pretap_disable = cvmx_fdt_get_bool(fdt_addr, of_offset, "pretap-disable");
+		channel->posttap_disable =
+			cvmx_fdt_get_bool(fdt_addr, of_offset, "posttap-disable");
+		channel->vsc7224 = vsc7224;
+		/* Read all the tap values */
+		for (i = 0; i < num_taps; i++) {
+			channel->taps[i].len = fdt32_to_cpu(tap_values[i * 4 + 0]);
+			channel->taps[i].main_tap = fdt32_to_cpu(tap_values[i * 4 + 1]);
+			channel->taps[i].pre_tap = fdt32_to_cpu(tap_values[i * 4 + 2]);
+			channel->taps[i].post_tap = fdt32_to_cpu(tap_values[i * 4 + 3]);
+			debug("%s: tap %d: len: %d, main_tap: 0x%x, pre_tap: 0x%x, post_tap: 0x%x\n",
+			      __func__, i, channel->taps[i].len, channel->taps[i].main_tap,
+			      channel->taps[i].pre_tap, channel->taps[i].post_tap);
+		}
+		/* Now find out which interface it's mapped to */
+		channel->ipd_port = -1;
+
+		mac_str = "sfp-mac";
+		if (fdt_getprop(fdt_addr, of_offset, mac_str, NULL)) {
+			is_qsfp = false;
+		} else if (fdt_getprop(fdt_addr, of_offset, "qsfp-mac", NULL)) {
+			is_qsfp = true;
+			mac_str = "qsfp-mac";
+		} else {
+			debug("%s: Error: MAC not found for %s channel %d\n", __func__,
+			      vsc7224->name, reg);
+			return -1;
+		}
+		of_mac = cvmx_fdt_lookup_phandle(fdt_addr, of_offset, mac_str);
+		if (of_mac < 0) {
+			debug("%s: Error %d with MAC %s phandle for %s\n", __func__, of_mac,
+			      mac_str, vsc7224->name);
+			return -1;
+		}
+
+		debug("%s: Found mac at offset %d\n", __func__, of_mac);
+		err = cvmx_helper_cfg_get_xiface_index_by_fdt_node_offset(of_mac, &xiface, &index);
+		if (!err) {
+			channel->xiface = xiface;
+			channel->index = index;
+			channel->ipd_port = cvmx_helper_get_ipd_port(xiface, index);
+
+			debug("%s: Found MAC, xiface: 0x%x, index: %d, ipd port: %d\n", __func__,
+			      xiface, index, channel->ipd_port);
+			if (channel->ipd_port >= 0) {
+				cvmx_helper_cfg_set_vsc7224_chan_info(xiface, index, channel);
+				debug("%s: Storing config channel for xiface 0x%x, index %d\n",
+				      __func__, xiface, index);
+			}
+			sfp_info = cvmx_helper_cfg_get_sfp_info(xiface, index);
+			if (!sfp_info) {
+				debug("%s: Warning: no (Q)SFP+ slot found for xinterface 0x%x, index %d for channel %d\n",
+				      __func__, xiface, index, channel->lane);
+				continue;
+			}
+
+			/* Link it */
+			channel->next = sfp_info->vsc7224_chan;
+			if (sfp_info->vsc7224_chan)
+				sfp_info->vsc7224_chan->prev = channel;
+			sfp_info->vsc7224_chan = channel;
+			sfp_info->is_vsc7224 = true;
+			debug("%s: Registering VSC7224 %s channel %d with SFP %s\n", __func__,
+			      vsc7224->name, channel->lane, sfp_info->name);
+			if (!sfp_info->mod_abs_changed) {
+				debug("%s: Registering cvmx_sfp_vsc7224_mod_abs_changed at %p for xinterface 0x%x, index %d\n",
+				      __func__, &cvmx_sfp_vsc7224_mod_abs_changed, xiface, index);
+				cvmx_sfp_register_mod_abs_changed(
+					sfp_info,
+					&cvmx_sfp_vsc7224_mod_abs_changed,
+					NULL);
+			}
+		}
+	} while (!err && num_chan < 4);
+
+	return err;
+}
+
+/**
+ * @INTERNAL
+ * Parses all instances of the Vitesse VSC7224 reclocking chip
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ *
+ * @return	0 for success, error otherwise
+ */
+int __cvmx_fdt_parse_vsc7224(const void *fdt_addr)
+{
+	int of_offset = -1;
+	struct cvmx_vsc7224 *vsc7224 = NULL;
+	struct cvmx_fdt_gpio_info *gpio_info = NULL;
+	int err = 0;
+	int of_parent;
+	static bool parsed;
+
+	debug("%s(%p)\n", __func__, fdt_addr);
+
+	if (parsed) {
+		debug("%s: Already parsed\n", __func__);
+		return 0;
+	}
+	do {
+		of_offset = fdt_node_offset_by_compatible(fdt_addr, of_offset,
+							  "vitesse,vsc7224");
+		debug("%s: of_offset: %d\n", __func__, of_offset);
+		if (of_offset == -FDT_ERR_NOTFOUND) {
+			break;
+		} else if (of_offset < 0) {
+			err = -1;
+			debug("%s: Error %d parsing FDT\n",
+			      __func__, of_offset);
+			break;
+		}
+
+		vsc7224 = __cvmx_fdt_alloc(sizeof(*vsc7224));
+
+		if (!vsc7224) {
+			debug("%s: Out of memory!\n", __func__);
+			return -1;
+		}
+		vsc7224->of_offset = of_offset;
+		vsc7224->i2c_addr = cvmx_fdt_get_int(fdt_addr, of_offset,
+						     "reg", -1);
+		of_parent = fdt_parent_offset(fdt_addr, of_offset);
+		vsc7224->i2c_bus = cvmx_fdt_get_i2c_bus(fdt_addr, of_parent);
+		if (vsc7224->i2c_addr < 0) {
+			debug("%s: Error: reg field missing\n", __func__);
+			err = -1;
+			break;
+		}
+		if (!vsc7224->i2c_bus) {
+			debug("%s: Error getting i2c bus\n", __func__);
+			err = -1;
+			break;
+		}
+		vsc7224->name = fdt_get_name(fdt_addr, of_offset, NULL);
+		debug("%s: Adding %s\n", __func__, vsc7224->name);
+		if (fdt_getprop(fdt_addr, of_offset, "reset", NULL)) {
+			gpio_info = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "reset");
+			vsc7224->reset_gpio = gpio_info;
+		}
+		if (fdt_getprop(fdt_addr, of_offset, "los", NULL)) {
+			gpio_info = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "los");
+			vsc7224->los_gpio = gpio_info;
+		}
+		debug("%s: Parsing channels\n", __func__);
+		err = cvmx_fdt_parse_vsc7224_channels(fdt_addr, of_offset, vsc7224);
+		if (err) {
+			debug("%s: Error parsing VSC7224 channels\n", __func__);
+			break;
+		}
+	} while (of_offset > 0);
+
+	if (err) {
+		debug("%s(): Error\n", __func__);
+		if (vsc7224) {
+			if (vsc7224->reset_gpio)
+				__cvmx_fdt_free(vsc7224->reset_gpio, sizeof(*vsc7224->reset_gpio));
+			if (vsc7224->los_gpio)
+				__cvmx_fdt_free(vsc7224->los_gpio, sizeof(*vsc7224->los_gpio));
+			if (vsc7224->i2c_bus)
+				cvmx_fdt_free_i2c_bus(vsc7224->i2c_bus);
+			__cvmx_fdt_free(vsc7224, sizeof(*vsc7224));
+		}
+	}
+	if (!err)
+		parsed = true;
+
+	return err;
+}
+
+/**
+ * @INTERNAL
+ * Parses all instances of the Avago AVSP5410 gearbox phy
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ *
+ * @return	0 for success, error otherwise
+ */
+int __cvmx_fdt_parse_avsp5410(const void *fdt_addr)
+{
+	int of_offset = -1;
+	struct cvmx_avsp5410 *avsp5410 = NULL;
+	struct cvmx_fdt_sfp_info *sfp_info;
+	int err = 0;
+	int of_parent;
+	static bool parsed;
+	int of_mac;
+	int xiface, index;
+	bool is_qsfp;
+	const char *mac_str;
+
+	debug("%s(%p)\n", __func__, fdt_addr);
+
+	if (parsed) {
+		debug("%s: Already parsed\n", __func__);
+		return 0;
+	}
+
+	do {
+		of_offset = fdt_node_offset_by_compatible(fdt_addr, of_offset,
+							  "avago,avsp-5410");
+		debug("%s: of_offset: %d\n", __func__, of_offset);
+		if (of_offset == -FDT_ERR_NOTFOUND) {
+			break;
+		} else if (of_offset < 0) {
+			err = -1;
+			debug("%s: Error %d parsing FDT\n", __func__, of_offset);
+			break;
+		}
+
+		avsp5410 = __cvmx_fdt_alloc(sizeof(*avsp5410));
+
+		if (!avsp5410) {
+			debug("%s: Out of memory!\n", __func__);
+			return -1;
+		}
+		avsp5410->of_offset = of_offset;
+		avsp5410->i2c_addr = cvmx_fdt_get_int(fdt_addr, of_offset,
+						      "reg", -1);
+		of_parent = fdt_parent_offset(fdt_addr, of_offset);
+		avsp5410->i2c_bus = cvmx_fdt_get_i2c_bus(fdt_addr, of_parent);
+		if (avsp5410->i2c_addr < 0) {
+			debug("%s: Error: reg field missing\n", __func__);
+			err = -1;
+			break;
+		}
+		if (!avsp5410->i2c_bus) {
+			debug("%s: Error getting i2c bus\n", __func__);
+			err = -1;
+			break;
+		}
+		avsp5410->name = fdt_get_name(fdt_addr, of_offset, NULL);
+		debug("%s: Adding %s\n", __func__, avsp5410->name);
+
+		/* Now find out which interface it's mapped to */
+		avsp5410->ipd_port = -1;
+
+		mac_str = "sfp-mac";
+		if (fdt_getprop(fdt_addr, of_offset, mac_str, NULL)) {
+			is_qsfp = false;
+		} else if (fdt_getprop(fdt_addr, of_offset, "qsfp-mac", NULL)) {
+			is_qsfp = true;
+			mac_str = "qsfp-mac";
+		} else {
+			debug("%s: Error: MAC not found for %s\n", __func__, avsp5410->name);
+			return -1;
+		}
+		of_mac = cvmx_fdt_lookup_phandle(fdt_addr, of_offset, mac_str);
+		if (of_mac < 0) {
+			debug("%s: Error %d with MAC %s phandle for %s\n", __func__, of_mac,
+			      mac_str, avsp5410->name);
+			return -1;
+		}
+
+		debug("%s: Found mac at offset %d\n", __func__, of_mac);
+		err = cvmx_helper_cfg_get_xiface_index_by_fdt_node_offset(of_mac, &xiface, &index);
+		if (!err) {
+			avsp5410->xiface = xiface;
+			avsp5410->index = index;
+			avsp5410->ipd_port = cvmx_helper_get_ipd_port(xiface, index);
+
+			debug("%s: Found MAC, xiface: 0x%x, index: %d, ipd port: %d\n", __func__,
+			      xiface, index, avsp5410->ipd_port);
+			if (avsp5410->ipd_port >= 0) {
+				cvmx_helper_cfg_set_avsp5410_info(xiface, index, avsp5410);
+				debug("%s: Storing config phy for xiface 0x%x, index %d\n",
+				      __func__, xiface, index);
+			}
+			sfp_info = cvmx_helper_cfg_get_sfp_info(xiface, index);
+			if (!sfp_info) {
+				debug("%s: Warning: no (Q)SFP+ slot found for xinterface 0x%x, index %d\n",
+				      __func__, xiface, index);
+				continue;
+			}
+
+			sfp_info->is_avsp5410 = true;
+			sfp_info->avsp5410 = avsp5410;
+			debug("%s: Registering AVSP5410 %s with SFP %s\n", __func__, avsp5410->name,
+			      sfp_info->name);
+			if (!sfp_info->mod_abs_changed) {
+				debug("%s: Registering cvmx_sfp_avsp5410_mod_abs_changed at %p for xinterface 0x%x, index %d\n",
+				      __func__, &cvmx_sfp_avsp5410_mod_abs_changed, xiface, index);
+				cvmx_sfp_register_mod_abs_changed(
+					sfp_info,
+					&cvmx_sfp_avsp5410_mod_abs_changed,
+					NULL);
+			}
+		}
+	} while (of_offset > 0);
+
+	if (err) {
+		debug("%s(): Error\n", __func__);
+		if (avsp5410) {
+			if (avsp5410->i2c_bus)
+				cvmx_fdt_free_i2c_bus(avsp5410->i2c_bus);
+			__cvmx_fdt_free(avsp5410, sizeof(*avsp5410));
+		}
+	}
+	if (!err)
+		parsed = true;
+
+	return err;
+}
+
+/**
+ * Parse QSFP GPIOs for SFP
+ *
+ * @param[in]	fdt_addr	Pointer to flat device tree
+ * @param	of_offset	Offset of QSFP node
+ * @param[out]	sfp_info	Pointer to sfp info to fill in
+ *
+ * @return	0 for success
+ */
+static int cvmx_parse_qsfp(const void *fdt_addr, int of_offset, struct cvmx_fdt_sfp_info *sfp_info)
+{
+	sfp_info->select = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "select");
+	sfp_info->mod_abs = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "mod_prs");
+	sfp_info->reset = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "reset");
+	sfp_info->interrupt = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "interrupt");
+	sfp_info->lp_mode = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "lp_mode");
+	return 0;
+}
+
+/**
+ * Parse SFP GPIOs for SFP
+ *
+ * @param[in]	fdt_addr	Pointer to flat device tree
+ * @param	of_offset	Offset of SFP node
+ * @param[out]	sfp_info	Pointer to sfp info to fill in
+ *
+ * @return	0 for success
+ */
+static int cvmx_parse_sfp(const void *fdt_addr, int of_offset, struct cvmx_fdt_sfp_info *sfp_info)
+{
+	sfp_info->mod_abs = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "mod_abs");
+	sfp_info->rx_los = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "rx_los");
+	sfp_info->tx_disable = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "tx_disable");
+	sfp_info->tx_error = cvmx_fdt_gpio_get_info_phandle(fdt_addr, of_offset, "tx_error");
+	return 0;
+}
+
+/**
+ * Parse SFP/QSFP EEPROM and diag
+ *
+ * @param[in]	fdt_addr	Pointer to flat device tree
+ * @param	of_offset	Offset of SFP node
+ * @param[out]	sfp_info	Pointer to sfp info to fill in
+ *
+ * @return	0 for success, -1 on error
+ */
+static int cvmx_parse_sfp_eeprom(const void *fdt_addr, int of_offset,
+				 struct cvmx_fdt_sfp_info *sfp_info)
+{
+	int of_eeprom;
+	int of_diag;
+
+	debug("%s(%p, %d, %s)\n", __func__, fdt_addr, of_offset, sfp_info->name);
+	of_eeprom = cvmx_fdt_lookup_phandle(fdt_addr, of_offset, "eeprom");
+	if (of_eeprom < 0) {
+		debug("%s: Missing \"eeprom\" from device tree for %s\n", __func__, sfp_info->name);
+		return -1;
+	}
+
+	sfp_info->i2c_bus = cvmx_fdt_get_i2c_bus(fdt_addr, fdt_parent_offset(fdt_addr, of_eeprom));
+	sfp_info->i2c_eeprom_addr = cvmx_fdt_get_int(fdt_addr, of_eeprom, "reg", 0x50);
+
+	debug("%s(%p, %d, %s, %d)\n", __func__, fdt_addr, of_offset, sfp_info->name,
+	      sfp_info->i2c_eeprom_addr);
+
+	if (!sfp_info->i2c_bus) {
+		debug("%s: Error: could not determine i2c bus for eeprom for %s\n", __func__,
+		      sfp_info->name);
+		return -1;
+	}
+	of_diag = cvmx_fdt_lookup_phandle(fdt_addr, of_offset, "diag");
+	if (of_diag >= 0)
+		sfp_info->i2c_diag_addr = cvmx_fdt_get_int(fdt_addr, of_diag, "reg", 0x51);
+	else
+		sfp_info->i2c_diag_addr = 0x51;
+	return 0;
+}
+
+/**
+ * Parse SFP information from device tree
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ *
+ * @return pointer to sfp info or NULL if error
+ */
+struct cvmx_fdt_sfp_info *cvmx_helper_fdt_parse_sfp_info(const void *fdt_addr, int of_offset)
+{
+	struct cvmx_fdt_sfp_info *sfp_info = NULL;
+	int err = -1;
+	bool is_qsfp;
+
+	if (!fdt_node_check_compatible(fdt_addr, of_offset, "ethernet,sfp-slot")) {
+		is_qsfp = false;
+	} else if (!fdt_node_check_compatible(fdt_addr, of_offset, "ethernet,qsfp-slot")) {
+		is_qsfp = true;
+	} else {
+		debug("%s: Error: incompatible sfp/qsfp slot, compatible=%s\n", __func__,
+		      (char *)fdt_getprop(fdt_addr, of_offset, "compatible", NULL));
+		goto error_exit;
+	}
+
+	debug("%s: %ssfp module found at offset %d\n", __func__, is_qsfp ? "q" : "", of_offset);
+	sfp_info = __cvmx_fdt_alloc(sizeof(*sfp_info));
+	if (!sfp_info) {
+		debug("%s: Error: out of memory\n", __func__);
+		goto error_exit;
+	}
+	sfp_info->name = fdt_get_name(fdt_addr, of_offset, NULL);
+	sfp_info->of_offset = of_offset;
+	sfp_info->is_qsfp = is_qsfp;
+	sfp_info->last_mod_abs = -1;
+	sfp_info->last_rx_los = -1;
+
+	if (is_qsfp)
+		err = cvmx_parse_qsfp(fdt_addr, of_offset, sfp_info);
+	else
+		err = cvmx_parse_sfp(fdt_addr, of_offset, sfp_info);
+	if (err) {
+		debug("%s: Error in %s parsing %ssfp GPIO info\n", __func__, sfp_info->name,
+		      is_qsfp ? "q" : "");
+		goto error_exit;
+	}
+	debug("%s: Parsing %ssfp module eeprom\n", __func__, is_qsfp ? "q" : "");
+	err = cvmx_parse_sfp_eeprom(fdt_addr, of_offset, sfp_info);
+	if (err) {
+		debug("%s: Error parsing eeprom info for %s\n", __func__, sfp_info->name);
+		goto error_exit;
+	}
+
+	/* Register default check for mod_abs changed */
+	if (!err)
+		cvmx_sfp_register_check_mod_abs(sfp_info, cvmx_sfp_check_mod_abs, NULL);
+
+error_exit:
+	/* Note: we don't free any data structures on error since it gets
+	 * rather complicated with i2c buses and whatnot.
+	 */
+	return err ? NULL : sfp_info;
+}
+
+/**
+ * @INTERNAL
+ * Parse a slice of the Inphi/Cortina CS4343 in the device tree
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ * @param	of_offset	fdt offset of slice
+ * @param	phy_info	phy_info data structure
+ *
+ * @return	slice number if non-negative, otherwise error
+ */
+static int cvmx_fdt_parse_cs4343_slice(const void *fdt_addr, int of_offset,
+				       struct cvmx_phy_info *phy_info)
+{
+	struct cvmx_cs4343_slice_info *slice;
+	int reg;
+	int reg_offset;
+
+	reg = cvmx_fdt_get_int(fdt_addr, of_offset, "reg", -1);
+	reg_offset = cvmx_fdt_get_int(fdt_addr, of_offset, "slice_offset", -1);
+
+	if (reg < 0 || reg >= 4) {
+		debug("%s(%p, %d, %p): Error: reg %d undefined or out of range\n", __func__,
+		      fdt_addr, of_offset, phy_info, reg);
+		return -1;
+	}
+	if (reg_offset % 0x1000 || reg_offset > 0x3000 || reg_offset < 0) {
+		debug("%s(%p, %d, %p): Error: reg_offset 0x%x undefined or out of range\n",
+		      __func__, fdt_addr, of_offset, phy_info, reg_offset);
+		return -1;
+	}
+	if (!phy_info->cs4343_info) {
+		debug("%s: Error: phy info cs4343 datastructure is NULL\n", __func__);
+		return -1;
+	}
+	debug("%s(%p, %d, %p): %s, reg: %d, slice offset: 0x%x\n", __func__, fdt_addr, of_offset,
+	      phy_info, fdt_get_name(fdt_addr, of_offset, NULL), reg, reg_offset);
+	slice = &phy_info->cs4343_info->slice[reg];
+	slice->name = fdt_get_name(fdt_addr, of_offset, NULL);
+	slice->mphy = phy_info->cs4343_info;
+	slice->phy_info = phy_info;
+	slice->of_offset = of_offset;
+	slice->slice_no = reg;
+	slice->reg_offset = reg_offset;
+	/* SR settings */
+	slice->sr_stx_cmode_res = cvmx_fdt_get_int(fdt_addr, of_offset, "sr-stx-cmode-res", 3);
+	slice->sr_stx_drv_lower_cm =
+		cvmx_fdt_get_int(fdt_addr, of_offset, "sr-stx-drv-lower-cm", 8);
+	slice->sr_stx_level = cvmx_fdt_get_int(fdt_addr, of_offset, "sr-stx-level", 0x1c);
+	slice->sr_stx_pre_peak = cvmx_fdt_get_int(fdt_addr, of_offset, "sr-stx-pre-peak", 1);
+	slice->sr_stx_muxsubrate_sel =
+		cvmx_fdt_get_int(fdt_addr, of_offset, "sr-stx-muxsubrate-sel", 0);
+	slice->sr_stx_post_peak = cvmx_fdt_get_int(fdt_addr, of_offset, "sr-stx-post-peak", 8);
+	/* CX settings */
+	slice->cx_stx_cmode_res = cvmx_fdt_get_int(fdt_addr, of_offset, "cx-stx-cmode-res", 3);
+	slice->cx_stx_drv_lower_cm =
+		cvmx_fdt_get_int(fdt_addr, of_offset, "cx-stx-drv-lower-cm", 8);
+	slice->cx_stx_level = cvmx_fdt_get_int(fdt_addr, of_offset, "cx-stx-level", 0x1c);
+	slice->cx_stx_pre_peak = cvmx_fdt_get_int(fdt_addr, of_offset, "cx-stx-pre-peak", 1);
+	slice->cx_stx_muxsubrate_sel =
+		cvmx_fdt_get_int(fdt_addr, of_offset, "cx-stx-muxsubrate-sel", 0);
+	slice->cx_stx_post_peak = cvmx_fdt_get_int(fdt_addr, of_offset, "cx-stx-post-peak", 0xC);
+	/* 1000Base-X settings */
+	/* CX settings */
+	slice->basex_stx_cmode_res =
+		cvmx_fdt_get_int(fdt_addr, of_offset, "basex-stx-cmode-res", 3);
+	slice->basex_stx_drv_lower_cm =
+		cvmx_fdt_get_int(fdt_addr, of_offset, "basex-stx-drv-lower-cm", 8);
+	slice->basex_stx_level = cvmx_fdt_get_int(fdt_addr, of_offset,
+						  "basex-stx-level", 0x1c);
+	slice->basex_stx_pre_peak = cvmx_fdt_get_int(fdt_addr, of_offset,
+						     "basex-stx-pre-peak", 1);
+	slice->basex_stx_muxsubrate_sel =
+		cvmx_fdt_get_int(fdt_addr, of_offset,
+				 "basex-stx-muxsubrate-sel", 0);
+	slice->basex_stx_post_peak =
+		cvmx_fdt_get_int(fdt_addr, of_offset, "basex-stx-post-peak", 8);
+	/* Get the link LED gpio pin */
+	slice->link_gpio = cvmx_fdt_get_int(fdt_addr, of_offset,
+					    "link-led-gpio", -1);
+	slice->error_gpio = cvmx_fdt_get_int(fdt_addr, of_offset,
+					     "error-led-gpio", -1);
+	slice->los_gpio = cvmx_fdt_get_int(fdt_addr, of_offset,
+					   "los-input-gpio", -1);
+	slice->link_inverted = cvmx_fdt_get_bool(fdt_addr, of_offset,
+						 "link-led-gpio-inverted");
+	slice->error_inverted = cvmx_fdt_get_bool(fdt_addr, of_offset,
+						  "error-led-gpio-inverted");
+	slice->los_inverted = cvmx_fdt_get_bool(fdt_addr, of_offset,
+						"los-input-gpio-inverted");
+	/* Convert GPIOs to be die based if they're not already */
+	if (slice->link_gpio > 4 && slice->link_gpio <= 8)
+		slice->link_gpio -= 4;
+	if (slice->error_gpio > 4 && slice->error_gpio <= 8)
+		slice->error_gpio -= 4;
+	if (slice->los_gpio > 4 && slice->los_gpio <= 8)
+		slice->los_gpio -= 4;
+
+	return reg;
+}
+
+/**
+ * @INTERNAL
+ * Parses either a CS4343 phy or a slice of the phy from the device tree
+ * @param[in]	fdt_addr	Address of FDT
+ * @param	of_offset	offset of slice or phy in device tree
+ * @param	phy_info	phy_info data structure to fill in
+ *
+ * @return	0 for success, -1 on error
+ */
+int cvmx_fdt_parse_cs4343(const void *fdt_addr, int of_offset, struct cvmx_phy_info *phy_info)
+{
+	int of_slice = -1;
+	struct cvmx_cs4343_info *cs4343;
+	int err = -1;
+	int reg;
+
+	debug("%s(%p, %d, %p): %s (%s)\n", __func__,
+	      fdt_addr, of_offset, phy_info,
+	      fdt_get_name(fdt_addr, of_offset, NULL),
+	      (const char *)fdt_getprop(fdt_addr, of_offset, "compatible", NULL));
+
+	if (!phy_info->cs4343_info)
+		phy_info->cs4343_info = __cvmx_fdt_alloc(sizeof(struct cvmx_cs4343_info));
+	if (!phy_info->cs4343_info) {
+		debug("%s: Error: out of memory!\n", __func__);
+		return -1;
+	}
+	cs4343 = phy_info->cs4343_info;
+	/* If we're passed to a slice then process only that slice */
+	if (!fdt_node_check_compatible(fdt_addr, of_offset, "cortina,cs4343-slice")) {
+		err = 0;
+		of_slice = of_offset;
+		of_offset = fdt_parent_offset(fdt_addr, of_offset);
+		reg = cvmx_fdt_parse_cs4343_slice(fdt_addr, of_slice, phy_info);
+		if (reg >= 0)
+			phy_info->cs4343_slice_info = &cs4343->slice[reg];
+		else
+			err = reg;
+	} else if (!fdt_node_check_compatible(fdt_addr, of_offset,
+					      "cortina,cs4343")) {
+		/* Walk through and process all of the slices */
+		of_slice =
+			fdt_node_offset_by_compatible(fdt_addr, of_offset, "cortina,cs4343-slice");
+		while (of_slice > 0 && fdt_parent_offset(fdt_addr, of_slice) ==
+		       of_offset) {
+			debug("%s: Parsing slice %s\n", __func__,
+			      fdt_get_name(fdt_addr, of_slice, NULL));
+			err = cvmx_fdt_parse_cs4343_slice(fdt_addr, of_slice,
+							  phy_info);
+			if (err < 0)
+				break;
+			of_slice = fdt_node_offset_by_compatible(fdt_addr,
+								 of_slice,
+								 "cortina,cs4343-slice");
+		}
+	} else {
+		debug("%s: Error: unknown compatible string %s for %s\n", __func__,
+		      (const char *)fdt_getprop(fdt_addr, of_offset,
+						"compatible", NULL),
+		      fdt_get_name(fdt_addr, of_offset, NULL));
+	}
+
+	if (err >= 0) {
+		cs4343->name = fdt_get_name(fdt_addr, of_offset, NULL);
+		cs4343->phy_info = phy_info;
+		cs4343->of_offset = of_offset;
+	}
+
+	return err < 0 ? -1 : 0;
+}
diff --git a/arch/mips/mach-octeon/cvmx-helper-jtag.c b/arch/mips/mach-octeon/cvmx-helper-jtag.c
new file mode 100644
index 0000000..a6fa69b
--- /dev/null
+++ b/arch/mips/mach-octeon/cvmx-helper-jtag.c
@@ -0,0 +1,172 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper utilities for qlm_jtag.
+ */
+
+#include <log.h>
+#include <asm/global_data.h>
+#include <linux/delay.h>
+
+#include <mach/cvmx-regs.h>
+#include <mach/octeon-model.h>
+#include <mach/cvmx-fuse.h>
+#include <mach/octeon-feature.h>
+#include <mach/cvmx-qlm.h>
+#include <mach/octeon_qlm.h>
+#include <mach/cvmx-pcie.h>
+#include <mach/cvmx-ciu-defs.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/**
+ * Initialize the internal QLM JTAG logic to allow programming
+ * of the JTAG chain by the cvmx_helper_qlm_jtag_*() functions.
+ * These functions should only be used at the direction of Cavium
+ * Networks. Programming incorrect values into the JTAG chain
+ * can cause chip damage.
+ */
+void cvmx_helper_qlm_jtag_init(void)
+{
+	union cvmx_ciu_qlm_jtgc jtgc;
+	int clock_div = 0;
+	int divisor;
+
+	divisor = gd->bus_clk / (1000000 * (OCTEON_IS_MODEL(OCTEON_CN68XX) ? 10 : 25));
+
+	divisor = (divisor - 1) >> 2;
+	/* Convert the divisor into a power of 2 shift */
+	while (divisor) {
+		clock_div++;
+		divisor >>= 1;
+	}
+
+	/*
+	 * Clock divider for QLM JTAG operations.  sclk is divided by
+	 * 2^(CLK_DIV + 2)
+	 */
+	jtgc.u64 = 0;
+	jtgc.s.clk_div = clock_div;
+	jtgc.s.mux_sel = 0;
+	if (OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX))
+		jtgc.s.bypass = 0x7;
+	else
+		jtgc.s.bypass = 0xf;
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+		jtgc.s.bypass_ext = 1;
+	csr_wr(CVMX_CIU_QLM_JTGC, jtgc.u64);
+	csr_rd(CVMX_CIU_QLM_JTGC);
+}
+
+/**
+ * Write up to 32bits into the QLM jtag chain. Bits are shifted
+ * into the MSB and out the LSB, so you should shift in the low
+ * order bits followed by the high order bits. The JTAG chain for
+ * CN52XX and CN56XX is 4 * 268 bits long, or 1072. The JTAG chain
+ * for CN63XX is 4 * 300 bits long, or 1200.
+ *
+ * @param qlm    QLM to shift value into
+ * @param bits   Number of bits to shift in (1-32).
+ * @param data   Data to shift in. Bit 0 enters the chain first, followed by
+ *               bit 1, etc.
+ *
+ * @return The low order bits of the JTAG chain that shifted out of the
+ *         circle.
+ */
+uint32_t cvmx_helper_qlm_jtag_shift(int qlm, int bits, uint32_t data)
+{
+	union cvmx_ciu_qlm_jtgc jtgc;
+	union cvmx_ciu_qlm_jtgd jtgd;
+
+	jtgc.u64 = csr_rd(CVMX_CIU_QLM_JTGC);
+	jtgc.s.mux_sel = qlm;
+	csr_wr(CVMX_CIU_QLM_JTGC, jtgc.u64);
+	csr_rd(CVMX_CIU_QLM_JTGC);
+
+	jtgd.u64 = 0;
+	jtgd.s.shift = 1;
+	jtgd.s.shft_cnt = bits - 1;
+	jtgd.s.shft_reg = data;
+	jtgd.s.select = 1 << qlm;
+	csr_wr(CVMX_CIU_QLM_JTGD, jtgd.u64);
+	do {
+		jtgd.u64 = csr_rd(CVMX_CIU_QLM_JTGD);
+	} while (jtgd.s.shift);
+	return jtgd.s.shft_reg >> (32 - bits);
+}
+
+/**
+ * Shift long sequences of zeros into the QLM JTAG chain. It is
+ * common to need to shift more than 32 bits of zeros into the
+ * chain. This function is a convience wrapper around
+ * cvmx_helper_qlm_jtag_shift() to shift more than 32 bits of
+ * zeros at a time.
+ *
+ * @param qlm    QLM to shift zeros into
+ * @param bits
+ */
+void cvmx_helper_qlm_jtag_shift_zeros(int qlm, int bits)
+{
+	while (bits > 0) {
+		int n = bits;
+
+		if (n > 32)
+			n = 32;
+		cvmx_helper_qlm_jtag_shift(qlm, n, 0);
+		bits -= n;
+	}
+}
+
+/**
+ * Program the QLM JTAG chain into all lanes of the QLM. You must
+ * have already shifted in the proper number of bits into the
+ * JTAG chain. Updating invalid values can possibly cause chip damage.
+ *
+ * @param qlm    QLM to program
+ */
+void cvmx_helper_qlm_jtag_update(int qlm)
+{
+	union cvmx_ciu_qlm_jtgc jtgc;
+	union cvmx_ciu_qlm_jtgd jtgd;
+
+	jtgc.u64 = csr_rd(CVMX_CIU_QLM_JTGC);
+	jtgc.s.mux_sel = qlm;
+
+	csr_wr(CVMX_CIU_QLM_JTGC, jtgc.u64);
+	csr_rd(CVMX_CIU_QLM_JTGC);
+
+	/* Update the new data */
+	jtgd.u64 = 0;
+	jtgd.s.update = 1;
+	jtgd.s.select = 1 << qlm;
+	csr_wr(CVMX_CIU_QLM_JTGD, jtgd.u64);
+	do {
+		jtgd.u64 = csr_rd(CVMX_CIU_QLM_JTGD);
+	} while (jtgd.s.update);
+}
+
+/**
+ * Load the QLM JTAG chain with data from all lanes of the QLM.
+ *
+ * @param qlm    QLM to program
+ */
+void cvmx_helper_qlm_jtag_capture(int qlm)
+{
+	union cvmx_ciu_qlm_jtgc jtgc;
+	union cvmx_ciu_qlm_jtgd jtgd;
+
+	jtgc.u64 = csr_rd(CVMX_CIU_QLM_JTGC);
+	jtgc.s.mux_sel = qlm;
+
+	csr_wr(CVMX_CIU_QLM_JTGC, jtgc.u64);
+	csr_rd(CVMX_CIU_QLM_JTGC);
+
+	jtgd.u64 = 0;
+	jtgd.s.capture = 1;
+	jtgd.s.select = 1 << qlm;
+	csr_wr(CVMX_CIU_QLM_JTGD, jtgd.u64);
+	do {
+		jtgd.u64 = csr_rd(CVMX_CIU_QLM_JTGD);
+	} while (jtgd.s.capture);
+}
diff --git a/arch/mips/mach-octeon/cvmx-helper-util.c b/arch/mips/mach-octeon/cvmx-helper-util.c
new file mode 100644
index 0000000..4625b45
--- /dev/null
+++ b/arch/mips/mach-octeon/cvmx-helper-util.c
@@ -0,0 +1,1225 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Small helper utilities.
+ */
+
+#include <log.h>
+#include <time.h>
+#include <linux/delay.h>
+
+#include <mach/cvmx-regs.h>
+#include <mach/cvmx-csr-enums.h>
+#include <mach/octeon-model.h>
+#include <mach/octeon-feature.h>
+#include <mach/cvmx-gmxx-defs.h>
+#include <mach/cvmx-ipd-defs.h>
+#include <mach/cvmx-pko-defs.h>
+#include <mach/cvmx-ipd.h>
+#include <mach/cvmx-hwpko.h>
+#include <mach/cvmx-pki.h>
+#include <mach/cvmx-pip.h>
+#include <mach/cvmx-helper.h>
+#include <mach/cvmx-helper-util.h>
+#include <mach/cvmx-helper-pki.h>
+
+/**
+ * @INTERNAL
+ * These are the interface types needed to convert interface numbers to ipd
+ * ports.
+ *
+ * @param GMII
+ *	This type is used for sgmii, rgmii, xaui and rxaui interfaces.
+ * @param ILK
+ *	This type is used for ilk interfaces.
+ * @param SRIO
+ *	This type is used for serial-RapidIo interfaces.
+ * @param NPI
+ *	This type is used for npi interfaces.
+ * @param LB
+ *	This type is used for loopback interfaces.
+ * @param INVALID_IF_TYPE
+ *	This type indicates the interface hasn't been configured.
+ */
+enum port_map_if_type { INVALID_IF_TYPE = 0, GMII, ILK, SRIO, NPI, LB };
+
+/**
+ * @INTERNAL
+ * This structure is used to map interface numbers to ipd ports.
+ *
+ * @param type
+ *	Interface type
+ * @param first_ipd_port
+ *	First IPD port number assigned to this interface.
+ * @param last_ipd_port
+ *	Last IPD port number assigned to this interface.
+ * @param ipd_port_adj
+ *	Different octeon chips require different ipd ports for the
+ *	same interface port/mode configuration. This value is used
+ *	to account for that difference.
+ */
+struct ipd_port_map {
+	enum port_map_if_type type;
+	int first_ipd_port;
+	int last_ipd_port;
+	int ipd_port_adj;
+};
+
+/**
+ * @INTERNAL
+ * Interface number to ipd port map for the octeon 68xx.
+ */
+static const struct ipd_port_map ipd_port_map_68xx[CVMX_HELPER_MAX_IFACE] = {
+	{ GMII, 0x800, 0x8ff, 0x40 }, /* Interface 0 */
+	{ GMII, 0x900, 0x9ff, 0x40 }, /* Interface 1 */
+	{ GMII, 0xa00, 0xaff, 0x40 }, /* Interface 2 */
+	{ GMII, 0xb00, 0xbff, 0x40 }, /* Interface 3 */
+	{ GMII, 0xc00, 0xcff, 0x40 }, /* Interface 4 */
+	{ ILK, 0x400, 0x4ff, 0x00 },  /* Interface 5 */
+	{ ILK, 0x500, 0x5ff, 0x00 },  /* Interface 6 */
+	{ NPI, 0x100, 0x120, 0x00 },  /* Interface 7 */
+	{ LB, 0x000, 0x008, 0x00 },   /* Interface 8 */
+};
+
+/**
+ * @INTERNAL
+ * Interface number to ipd port map for the octeon 78xx.
+ *
+ * This mapping corresponds to WQE(CHAN) enumeration in
+ * HRM Sections 11.15, PKI_CHAN_E, Section 11.6
+ *
+ */
+static const struct ipd_port_map ipd_port_map_78xx[CVMX_HELPER_MAX_IFACE] = {
+	{ GMII, 0x800, 0x83f, 0x00 }, /* Interface 0 - BGX0 */
+	{ GMII, 0x900, 0x93f, 0x00 }, /* Interface 1  -BGX1 */
+	{ GMII, 0xa00, 0xa3f, 0x00 }, /* Interface 2  -BGX2 */
+	{ GMII, 0xb00, 0xb3f, 0x00 }, /* Interface 3 - BGX3 */
+	{ GMII, 0xc00, 0xc3f, 0x00 }, /* Interface 4 - BGX4 */
+	{ GMII, 0xd00, 0xd3f, 0x00 }, /* Interface 5 - BGX5 */
+	{ ILK, 0x400, 0x4ff, 0x00 },  /* Interface 6 - ILK0 */
+	{ ILK, 0x500, 0x5ff, 0x00 },  /* Interface 7 - ILK1 */
+	{ NPI, 0x100, 0x13f, 0x00 },  /* Interface 8 - DPI */
+	{ LB, 0x000, 0x03f, 0x00 },   /* Interface 9 - LOOPBACK */
+};
+
+/**
+ * @INTERNAL
+ * Interface number to ipd port map for the octeon 73xx.
+ */
+static const struct ipd_port_map ipd_port_map_73xx[CVMX_HELPER_MAX_IFACE] = {
+	{ GMII, 0x800, 0x83f, 0x00 }, /* Interface 0 - BGX(0,0-3) */
+	{ GMII, 0x900, 0x93f, 0x00 }, /* Interface 1  -BGX(1,0-3) */
+	{ GMII, 0xa00, 0xa3f, 0x00 }, /* Interface 2  -BGX(2,0-3) */
+	{ NPI, 0x100, 0x17f, 0x00 },  /* Interface 3 - DPI */
+	{ LB, 0x000, 0x03f, 0x00 },   /* Interface 4 - LOOPBACK */
+};
+
+/**
+ * @INTERNAL
+ * Interface number to ipd port map for the octeon 75xx.
+ */
+static const struct ipd_port_map ipd_port_map_75xx[CVMX_HELPER_MAX_IFACE] = {
+	{ GMII, 0x800, 0x83f, 0x00 }, /* Interface 0 - BGX0 */
+	{ SRIO, 0x240, 0x241, 0x00 }, /* Interface 1 - SRIO 0 */
+	{ SRIO, 0x242, 0x243, 0x00 }, /* Interface 2 - SRIO 1 */
+	{ NPI, 0x100, 0x13f, 0x00 },  /* Interface 3 - DPI */
+	{ LB, 0x000, 0x03f, 0x00 },   /* Interface 4 - LOOPBACK */
+};
+
+/**
+ * Convert a interface mode into a human readable string
+ *
+ * @param mode   Mode to convert
+ *
+ * @return String
+ */
+const char *cvmx_helper_interface_mode_to_string(cvmx_helper_interface_mode_t mode)
+{
+	switch (mode) {
+	case CVMX_HELPER_INTERFACE_MODE_DISABLED:
+		return "DISABLED";
+	case CVMX_HELPER_INTERFACE_MODE_RGMII:
+		return "RGMII";
+	case CVMX_HELPER_INTERFACE_MODE_GMII:
+		return "GMII";
+	case CVMX_HELPER_INTERFACE_MODE_SPI:
+		return "SPI";
+	case CVMX_HELPER_INTERFACE_MODE_PCIE:
+		return "PCIE";
+	case CVMX_HELPER_INTERFACE_MODE_XAUI:
+		return "XAUI";
+	case CVMX_HELPER_INTERFACE_MODE_RXAUI:
+		return "RXAUI";
+	case CVMX_HELPER_INTERFACE_MODE_SGMII:
+		return "SGMII";
+	case CVMX_HELPER_INTERFACE_MODE_QSGMII:
+		return "QSGMII";
+	case CVMX_HELPER_INTERFACE_MODE_PICMG:
+		return "PICMG";
+	case CVMX_HELPER_INTERFACE_MODE_NPI:
+		return "NPI";
+	case CVMX_HELPER_INTERFACE_MODE_LOOP:
+		return "LOOP";
+	case CVMX_HELPER_INTERFACE_MODE_SRIO:
+		return "SRIO";
+	case CVMX_HELPER_INTERFACE_MODE_ILK:
+		return "ILK";
+	case CVMX_HELPER_INTERFACE_MODE_AGL:
+		return "AGL";
+	case CVMX_HELPER_INTERFACE_MODE_XLAUI:
+		return "XLAUI";
+	case CVMX_HELPER_INTERFACE_MODE_XFI:
+		return "XFI";
+	case CVMX_HELPER_INTERFACE_MODE_40G_KR4:
+		return "40G_KR4";
+	case CVMX_HELPER_INTERFACE_MODE_10G_KR:
+		return "10G_KR";
+	case CVMX_HELPER_INTERFACE_MODE_MIXED:
+		return "MIXED";
+	}
+	return "UNKNOWN";
+}
+
+/**
+ * Debug routine to dump the packet structure to the console
+ *
+ * @param work   Work queue entry containing the packet to dump
+ * @return
+ */
+int cvmx_helper_dump_packet(cvmx_wqe_t *work)
+{
+	u64 count;
+	u64 remaining_bytes;
+	union cvmx_buf_ptr buffer_ptr;
+	cvmx_buf_ptr_pki_t bptr;
+	cvmx_wqe_78xx_t *wqe = (void *)work;
+	u64 start_of_buffer;
+	u8 *data_address;
+	u8 *end_of_data;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_pki_dump_wqe(wqe);
+		cvmx_wqe_pki_errata_20776(work);
+	} else {
+		debug("WORD0 = %lx\n", (unsigned long)work->word0.u64);
+		debug("WORD1 = %lx\n", (unsigned long)work->word1.u64);
+		debug("WORD2 = %lx\n", (unsigned long)work->word2.u64);
+		debug("Packet Length:   %u\n", cvmx_wqe_get_len(work));
+		debug("    Input Port:  %u\n", cvmx_wqe_get_port(work));
+		debug("    QoS:         %u\n", cvmx_wqe_get_qos(work));
+		debug("    Buffers:     %u\n", cvmx_wqe_get_bufs(work));
+	}
+
+	if (cvmx_wqe_get_bufs(work) == 0) {
+		int wqe_pool;
+
+		if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+			debug("%s: ERROR: Unexpected bufs==0 in WQE\n", __func__);
+			return -1;
+		}
+		wqe_pool = (int)cvmx_fpa_get_wqe_pool();
+		buffer_ptr.u64 = 0;
+		buffer_ptr.s.pool = wqe_pool;
+
+		buffer_ptr.s.size = 128;
+		buffer_ptr.s.addr = cvmx_ptr_to_phys(work->packet_data);
+		if (cvmx_likely(!work->word2.s.not_IP)) {
+			union cvmx_pip_ip_offset pip_ip_offset;
+
+			pip_ip_offset.u64 = csr_rd(CVMX_PIP_IP_OFFSET);
+			buffer_ptr.s.addr +=
+				(pip_ip_offset.s.offset << 3) - work->word2.s.ip_offset;
+			buffer_ptr.s.addr += (work->word2.s.is_v6 ^ 1) << 2;
+		} else {
+			/*
+			 * WARNING: This code assume that the packet
+			 * is not RAW. If it was, we would use
+			 * PIP_GBL_CFG[RAW_SHF] instead of
+			 * PIP_GBL_CFG[NIP_SHF].
+			 */
+			union cvmx_pip_gbl_cfg pip_gbl_cfg;
+
+			pip_gbl_cfg.u64 = csr_rd(CVMX_PIP_GBL_CFG);
+			buffer_ptr.s.addr += pip_gbl_cfg.s.nip_shf;
+		}
+	} else {
+		buffer_ptr = work->packet_ptr;
+	}
+
+	remaining_bytes = cvmx_wqe_get_len(work);
+
+	while (remaining_bytes) {
+		/* native cn78xx buffer format, unless legacy-translated */
+		if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE) && !wqe->pki_wqe_translated) {
+			bptr.u64 = buffer_ptr.u64;
+			/* XXX- assumes cache-line aligned buffer */
+			start_of_buffer = (bptr.addr >> 7) << 7;
+			debug("    Buffer Start:%llx\n", (unsigned long long)start_of_buffer);
+			debug("    Buffer Data: %llx\n", (unsigned long long)bptr.addr);
+			debug("    Buffer Size: %u\n", bptr.size);
+			data_address = (uint8_t *)cvmx_phys_to_ptr(bptr.addr);
+			end_of_data = data_address + bptr.size;
+		} else {
+			start_of_buffer = ((buffer_ptr.s.addr >> 7) - buffer_ptr.s.back) << 7;
+			debug("    Buffer Start:%llx\n", (unsigned long long)start_of_buffer);
+			debug("    Buffer I   : %u\n", buffer_ptr.s.i);
+			debug("    Buffer Back: %u\n", buffer_ptr.s.back);
+			debug("    Buffer Pool: %u\n", buffer_ptr.s.pool);
+			debug("    Buffer Data: %llx\n", (unsigned long long)buffer_ptr.s.addr);
+			debug("    Buffer Size: %u\n", buffer_ptr.s.size);
+			data_address = (uint8_t *)cvmx_phys_to_ptr(buffer_ptr.s.addr);
+			end_of_data = data_address + buffer_ptr.s.size;
+		}
+
+		debug("\t\t");
+		count = 0;
+		while (data_address < end_of_data) {
+			if (remaining_bytes == 0)
+				break;
+
+			remaining_bytes--;
+			debug("%02x", (unsigned int)*data_address);
+			data_address++;
+			if (remaining_bytes && count == 7) {
+				debug("\n\t\t");
+				count = 0;
+			} else {
+				count++;
+			}
+		}
+		debug("\n");
+
+		if (remaining_bytes) {
+			if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE) &&
+			    !wqe->pki_wqe_translated)
+				buffer_ptr.u64 = *(uint64_t *)cvmx_phys_to_ptr(bptr.addr - 8);
+			else
+				buffer_ptr.u64 =
+					*(uint64_t *)cvmx_phys_to_ptr(buffer_ptr.s.addr - 8);
+		}
+	}
+	return 0;
+}
+
+/**
+ * @INTERNAL
+ *
+ * Extract NO_WPTR mode from PIP/IPD register
+ */
+static int __cvmx_ipd_mode_no_wptr(void)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_NO_WPTR)) {
+		cvmx_ipd_ctl_status_t ipd_ctl_status;
+
+		ipd_ctl_status.u64 = csr_rd(CVMX_IPD_CTL_STATUS);
+		return ipd_ctl_status.s.no_wptr;
+	}
+	return 0;
+}
+
+static cvmx_buf_ptr_t __cvmx_packet_short_ptr[4];
+static int8_t __cvmx_wqe_pool = -1;
+
+/**
+ * @INTERNAL
+ * Prepare packet pointer templace for dynamic short
+ * packets.
+ */
+static void cvmx_packet_short_ptr_calculate(void)
+{
+	unsigned int i, off;
+	union cvmx_pip_gbl_cfg pip_gbl_cfg;
+	union cvmx_pip_ip_offset pip_ip_offset;
+
+	/* Fill in the common values for all cases */
+	for (i = 0; i < 4; i++) {
+		if (__cvmx_ipd_mode_no_wptr())
+			/* packet pool, set to 0 in hardware */
+			__cvmx_wqe_pool = 0;
+		else
+			/* WQE pool as configured */
+			__cvmx_wqe_pool = csr_rd(CVMX_IPD_WQE_FPA_QUEUE) & 7;
+
+		__cvmx_packet_short_ptr[i].s.pool = __cvmx_wqe_pool;
+		__cvmx_packet_short_ptr[i].s.size = cvmx_fpa_get_block_size(__cvmx_wqe_pool);
+		__cvmx_packet_short_ptr[i].s.size -= 32;
+		__cvmx_packet_short_ptr[i].s.addr = 32;
+	}
+
+	pip_gbl_cfg.u64 = csr_rd(CVMX_PIP_GBL_CFG);
+	pip_ip_offset.u64 = csr_rd(CVMX_PIP_IP_OFFSET);
+
+	/* RAW_FULL: index = 0 */
+	i = 0;
+	off = pip_gbl_cfg.s.raw_shf;
+	__cvmx_packet_short_ptr[i].s.addr += off;
+	__cvmx_packet_short_ptr[i].s.size -= off;
+	__cvmx_packet_short_ptr[i].s.back += off >> 7;
+
+	/* NON-IP: index = 1 */
+	i = 1;
+	off = pip_gbl_cfg.s.nip_shf;
+	__cvmx_packet_short_ptr[i].s.addr += off;
+	__cvmx_packet_short_ptr[i].s.size -= off;
+	__cvmx_packet_short_ptr[i].s.back += off >> 7;
+
+	/* IPv4: index = 2 */
+	i = 2;
+	off = (pip_ip_offset.s.offset << 3) + 4;
+	__cvmx_packet_short_ptr[i].s.addr += off;
+	__cvmx_packet_short_ptr[i].s.size -= off;
+	__cvmx_packet_short_ptr[i].s.back += off >> 7;
+
+	/* IPv6: index = 3 */
+	i = 3;
+	off = (pip_ip_offset.s.offset << 3) + 0;
+	__cvmx_packet_short_ptr[i].s.addr += off;
+	__cvmx_packet_short_ptr[i].s.size -= off;
+	__cvmx_packet_short_ptr[i].s.back += off >> 7;
+
+	/* For IPv4/IPv6: subtract work->word2.s.ip_offset
+	 * to addr, if it is smaller than IP_OFFSET[OFFSET]*8
+	 * which is stored in __cvmx_packet_short_ptr[3].s.addr
+	 */
+}
+
+/**
+ * Extract packet data buffer pointer from work queue entry.
+ *
+ * Returns the legacy (Octeon1/Octeon2) buffer pointer structure
+ * for the linked buffer list.
+ * On CN78XX, the native buffer pointer structure is converted into
+ * the legacy format.
+ * The legacy buf_ptr is then stored in the WQE, and word0 reserved
+ * field is set to indicate that the buffer pointers were translated.
+ * If the packet data is only found inside the work queue entry,
+ * a standard buffer pointer structure is created for it.
+ */
+cvmx_buf_ptr_t cvmx_wqe_get_packet_ptr(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (void *)work;
+		cvmx_buf_ptr_t optr, lptr;
+		cvmx_buf_ptr_pki_t nptr;
+		unsigned int pool, bufs;
+		int node = cvmx_get_node_num();
+
+		/* In case of repeated calls of this function */
+		if (wqe->pki_wqe_translated || wqe->word2.software) {
+			optr.u64 = wqe->packet_ptr.u64;
+			return optr;
+		}
+
+		bufs = wqe->word0.bufs;
+		pool = wqe->word0.aura;
+		nptr.u64 = wqe->packet_ptr.u64;
+
+		optr.u64 = 0;
+		optr.s.pool = pool;
+		optr.s.addr = nptr.addr;
+		if (bufs == 1) {
+			optr.s.size = pki_dflt_pool[node].buffer_size -
+				      pki_dflt_style[node].parm_cfg.first_skip - 8 -
+				      wqe->word0.apad;
+		} else {
+			optr.s.size = nptr.size;
+		}
+
+		/* Calculate the "back" offset */
+		if (!nptr.packet_outside_wqe) {
+			optr.s.back = (nptr.addr -
+				       cvmx_ptr_to_phys(wqe)) >> 7;
+		} else {
+			optr.s.back =
+				(pki_dflt_style[node].parm_cfg.first_skip +
+				 8 + wqe->word0.apad) >> 7;
+		}
+		lptr = optr;
+
+		/* Follow pointer and convert all linked pointers */
+		while (bufs > 1) {
+			void *vptr;
+
+			vptr = cvmx_phys_to_ptr(lptr.s.addr);
+
+			memcpy(&nptr, vptr - 8, 8);
+			/*
+			 * Errata (PKI-20776) PKI_BUFLINK_S's are endian-swapped
+			 * CN78XX pass 1.x has a bug where the packet pointer
+			 * in each segment is written in the opposite
+			 * endianness of the configured mode. Fix these here
+			 */
+			if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+				nptr.u64 = __builtin_bswap64(nptr.u64);
+			lptr.u64 = 0;
+			lptr.s.pool = pool;
+			lptr.s.addr = nptr.addr;
+			lptr.s.size = nptr.size;
+			lptr.s.back = (pki_dflt_style[0].parm_cfg.later_skip + 8) >>
+				      7; /* TBD: not guaranteed !! */
+
+			memcpy(vptr - 8, &lptr, 8);
+			bufs--;
+		}
+		/* Store translated bufptr in WQE, and set indicator */
+		wqe->pki_wqe_translated = 1;
+		wqe->packet_ptr.u64 = optr.u64;
+		return optr;
+
+	} else {
+		unsigned int i;
+		unsigned int off = 0;
+		cvmx_buf_ptr_t bptr;
+
+		if (cvmx_likely(work->word2.s.bufs > 0))
+			return work->packet_ptr;
+
+		if (cvmx_unlikely(work->word2.s.software))
+			return work->packet_ptr;
+
+		/* first packet, precalculate packet_ptr templaces */
+		if (cvmx_unlikely(__cvmx_packet_short_ptr[0].u64 == 0))
+			cvmx_packet_short_ptr_calculate();
+
+		/* calculate templace index */
+		i = work->word2.s_cn38xx.not_IP | work->word2.s_cn38xx.rcv_error;
+		i = 2 ^ (i << 1);
+
+		/* IPv4/IPv6: Adjust IP offset */
+		if (cvmx_likely(i & 2)) {
+			i |= work->word2.s.is_v6;
+			off = work->word2.s.ip_offset;
+		} else {
+			/* RAWFULL/RAWSCHED should be handled here */
+			i = 1; /* not-IP */
+			off = 0;
+		}
+
+		/* Get the right templace */
+		bptr = __cvmx_packet_short_ptr[i];
+		bptr.s.addr -= off;
+		bptr.s.back = bptr.s.addr >> 7;
+
+		/* Add actual WQE paddr to the templace offset */
+		bptr.s.addr += cvmx_ptr_to_phys(work);
+
+		/* Adjust word2.bufs so that _free_data() handles it
+		 * in the same way as PKO
+		 */
+		work->word2.s.bufs = 1;
+
+		/* Store the new buffer pointer back into WQE */
+		work->packet_ptr = bptr;
+
+		/* Returned the synthetic buffer_pointer */
+		return bptr;
+	}
+}
+
+void cvmx_wqe_free(cvmx_wqe_t *work)
+{
+	unsigned int bufs, ncl = 1;
+	u64 paddr, paddr1;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (void *)work;
+		cvmx_fpa3_gaura_t aura;
+		cvmx_buf_ptr_pki_t bptr;
+
+		bufs = wqe->word0.bufs;
+
+		if (!wqe->pki_wqe_translated && bufs != 0) {
+			/* Handle cn78xx native untralsated WQE */
+
+			bptr = wqe->packet_ptr;
+
+			/* Do nothing - first packet buffer shares WQE buffer */
+			if (!bptr.packet_outside_wqe)
+				return;
+		} else if (cvmx_likely(bufs != 0)) {
+			/* Handle translated 78XX WQE */
+			paddr = (work->packet_ptr.s.addr & (~0x7full)) -
+				(work->packet_ptr.s.back << 7);
+			paddr1 = cvmx_ptr_to_phys(work);
+
+			/* do not free WQE if contains first data buffer */
+			if (paddr == paddr1)
+				return;
+		}
+
+		/* WQE is separate from packet buffer, free it */
+		aura = __cvmx_fpa3_gaura(wqe->word0.aura >> 10, wqe->word0.aura & 0x3ff);
+
+		cvmx_fpa3_free(work, aura, ncl);
+	} else {
+		/* handle legacy WQE */
+		bufs = work->word2.s_cn38xx.bufs;
+
+		if (cvmx_likely(bufs != 0)) {
+			/* Check if the first data buffer is inside WQE */
+			paddr = (work->packet_ptr.s.addr & (~0x7full)) -
+				(work->packet_ptr.s.back << 7);
+			paddr1 = cvmx_ptr_to_phys(work);
+
+			/* do not free WQE if contains first data buffer */
+			if (paddr == paddr1)
+				return;
+		}
+
+		/* precalculate packet_ptr, WQE pool number */
+		if (cvmx_unlikely(__cvmx_wqe_pool < 0))
+			cvmx_packet_short_ptr_calculate();
+		cvmx_fpa1_free(work, __cvmx_wqe_pool, ncl);
+	}
+}
+
+/**
+ * Free the packet buffers contained in a work queue entry.
+ * The work queue entry is also freed if it contains packet data.
+ * If however the packet starts outside the WQE, the WQE will
+ * not be freed. The application should call cvmx_wqe_free()
+ * to free the WQE buffer that contains no packet data.
+ *
+ * @param work   Work queue entry with packet to free
+ */
+void cvmx_helper_free_packet_data(cvmx_wqe_t *work)
+{
+	u64 number_buffers;
+	u64 start_of_buffer;
+	u64 next_buffer_ptr;
+	cvmx_fpa3_gaura_t aura;
+	unsigned int ncl;
+	cvmx_buf_ptr_t buffer_ptr;
+	cvmx_buf_ptr_pki_t bptr;
+	cvmx_wqe_78xx_t *wqe = (void *)work;
+	int o3_pki_wqe = 0;
+
+	number_buffers = cvmx_wqe_get_bufs(work);
+
+	buffer_ptr.u64 = work->packet_ptr.u64;
+
+	/* Zero-out WQE WORD3 so that the WQE is freed by cvmx_wqe_free() */
+	work->packet_ptr.u64 = 0;
+
+	if (number_buffers == 0)
+		return;
+
+	/* Interpret PKI-style bufptr unless it has been translated */
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE) &&
+	    !wqe->pki_wqe_translated) {
+		o3_pki_wqe = 1;
+		cvmx_wqe_pki_errata_20776(work);
+		aura = __cvmx_fpa3_gaura(wqe->word0.aura >> 10,
+					 wqe->word0.aura & 0x3ff);
+	} else {
+		start_of_buffer = ((buffer_ptr.s.addr >> 7) -
+				   buffer_ptr.s.back) << 7;
+		next_buffer_ptr =
+			*(uint64_t *)cvmx_phys_to_ptr(buffer_ptr.s.addr - 8);
+		/*
+		 * Since the number of buffers is not zero, we know this is not
+		 * a dynamic short packet. We need to check if it is a packet
+		 * received with IPD_CTL_STATUS[NO_WPTR]. If this is true,
+		 * we need to free all buffers except for the first one.
+		 * The caller doesn't expect their WQE pointer to be freed
+		 */
+		if (cvmx_ptr_to_phys(work) == start_of_buffer) {
+			buffer_ptr.u64 = next_buffer_ptr;
+			number_buffers--;
+		}
+	}
+	while (number_buffers--) {
+		if (o3_pki_wqe) {
+			bptr.u64 = buffer_ptr.u64;
+
+			ncl = (bptr.size + CVMX_CACHE_LINE_SIZE - 1) /
+				CVMX_CACHE_LINE_SIZE;
+
+			/* XXX- assumes the buffer is cache-line aligned */
+			start_of_buffer = (bptr.addr >> 7) << 7;
+
+			/*
+			 * Read pointer to next buffer before we free the
+			 * current buffer.
+			 */
+			next_buffer_ptr = *(uint64_t *)cvmx_phys_to_ptr(bptr.addr - 8);
+			/* FPA AURA comes from WQE, includes node */
+			cvmx_fpa3_free(cvmx_phys_to_ptr(start_of_buffer),
+				       aura, ncl);
+		} else {
+			ncl = (buffer_ptr.s.size + CVMX_CACHE_LINE_SIZE - 1) /
+				      CVMX_CACHE_LINE_SIZE +
+			      buffer_ptr.s.back;
+			/*
+			 * Calculate buffer start using "back" offset,
+			 * Remember the back pointer is in cache lines,
+			 * not 64bit words
+			 */
+			start_of_buffer = ((buffer_ptr.s.addr >> 7) -
+					   buffer_ptr.s.back) << 7;
+			/*
+			 * Read pointer to next buffer before we free
+			 * the current buffer.
+			 */
+			next_buffer_ptr =
+				*(uint64_t *)cvmx_phys_to_ptr(buffer_ptr.s.addr - 8);
+			/* FPA pool comes from buf_ptr itself */
+			if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+				aura = cvmx_fpa1_pool_to_fpa3_aura(buffer_ptr.s.pool);
+				cvmx_fpa3_free(cvmx_phys_to_ptr(start_of_buffer),
+					       aura, ncl);
+			} else {
+				cvmx_fpa1_free(cvmx_phys_to_ptr(start_of_buffer),
+					       buffer_ptr.s.pool, ncl);
+			}
+		}
+		buffer_ptr.u64 = next_buffer_ptr;
+	}
+}
+
+void cvmx_helper_setup_legacy_red(int pass_thresh, int drop_thresh)
+{
+	unsigned int node = cvmx_get_node_num();
+	int aura, bpid;
+	int buf_cnt;
+	bool ena_red = 0, ena_drop = 0, ena_bp = 0;
+
+#define FPA_RED_AVG_DLY 1
+#define FPA_RED_LVL_DLY 3
+#define FPA_QOS_AVRG	0
+	/* Trying to make it backward compatible with older chips */
+
+	/* Setting up avg_dly and prb_dly, enable bits */
+	if (octeon_has_feature(OCTEON_FEATURE_FPA3)) {
+		cvmx_fpa3_config_red_params(node, FPA_QOS_AVRG,
+					    FPA_RED_LVL_DLY, FPA_RED_AVG_DLY);
+	}
+
+	/* Disable backpressure on queued buffers which is aura in 78xx*/
+	/*
+	 * Assumption is that all packets from all interface and ports goes
+	 * in same poolx/aurax for backward compatibility
+	 */
+	aura = cvmx_fpa_get_packet_pool();
+	buf_cnt = cvmx_fpa_get_packet_pool_buffer_count();
+	pass_thresh = buf_cnt - pass_thresh;
+	drop_thresh = buf_cnt - drop_thresh;
+	/* Map aura to bpid 0*/
+	bpid = 0;
+	cvmx_pki_write_aura_bpid(node, aura, bpid);
+	/* Don't enable back pressure */
+	ena_bp = 0;
+	/* enable RED */
+	ena_red = 1;
+	/*
+	 * This will enable RED on all interfaces since
+	 * they all have packet buffer coming from  same aura
+	 */
+	cvmx_helper_setup_aura_qos(node, aura, ena_red, ena_drop, pass_thresh,
+				   drop_thresh, ena_bp, 0);
+}
+
+/**
+ * Setup Random Early Drop to automatically begin dropping packets.
+ *
+ * @param pass_thresh
+ *               Packets will begin slowly dropping when there are less than
+ *               this many packet buffers free in FPA 0.
+ * @param drop_thresh
+ *               All incoming packets will be dropped when there are less
+ *               than this many free packet buffers in FPA 0.
+ * @return Zero on success. Negative on failure
+ */
+int cvmx_helper_setup_red(int pass_thresh, int drop_thresh)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_PKI))
+		cvmx_helper_setup_legacy_red(pass_thresh, drop_thresh);
+	else
+		cvmx_ipd_setup_red(pass_thresh, drop_thresh);
+	return 0;
+}
+
+/**
+ * @INTERNAL
+ * Setup the common GMX settings that determine the number of
+ * ports. These setting apply to almost all configurations of all
+ * chips.
+ *
+ * @param xiface Interface to configure
+ * @param num_ports Number of ports on the interface
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_setup_gmx(int xiface, int num_ports)
+{
+	union cvmx_gmxx_tx_prts gmx_tx_prts;
+	union cvmx_gmxx_rx_prts gmx_rx_prts;
+	union cvmx_pko_reg_gmx_port_mode pko_mode;
+	union cvmx_gmxx_txx_thresh gmx_tx_thresh;
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	int index;
+
+	/*
+	 * The common BGX settings are already done in the appropriate
+	 * enable functions, nothing to do here.
+	 */
+	if (octeon_has_feature(OCTEON_FEATURE_BGX))
+		return 0;
+
+	/* Tell GMX the number of TX ports on this interface */
+	gmx_tx_prts.u64 = csr_rd(CVMX_GMXX_TX_PRTS(xi.interface));
+	gmx_tx_prts.s.prts = num_ports;
+	csr_wr(CVMX_GMXX_TX_PRTS(xi.interface), gmx_tx_prts.u64);
+
+	/*
+	 * Tell GMX the number of RX ports on this interface.  This only applies
+	 * to *GMII and XAUI ports.
+	 */
+	switch (cvmx_helper_interface_get_mode(xiface)) {
+	case CVMX_HELPER_INTERFACE_MODE_RGMII:
+	case CVMX_HELPER_INTERFACE_MODE_SGMII:
+	case CVMX_HELPER_INTERFACE_MODE_QSGMII:
+	case CVMX_HELPER_INTERFACE_MODE_GMII:
+	case CVMX_HELPER_INTERFACE_MODE_XAUI:
+	case CVMX_HELPER_INTERFACE_MODE_RXAUI:
+		if (num_ports > 4) {
+			debug("%s: Illegal num_ports\n", __func__);
+			return -1;
+		}
+
+		gmx_rx_prts.u64 = csr_rd(CVMX_GMXX_RX_PRTS(xi.interface));
+		gmx_rx_prts.s.prts = num_ports;
+		csr_wr(CVMX_GMXX_RX_PRTS(xi.interface), gmx_rx_prts.u64);
+		break;
+
+	default:
+		break;
+	}
+
+	/*
+	 * Skip setting CVMX_PKO_REG_GMX_PORT_MODE on 30XX, 31XX, 50XX,
+	 * and 68XX.
+	 */
+	if (!OCTEON_IS_MODEL(OCTEON_CN68XX)) {
+		/* Tell PKO the number of ports on this interface */
+		pko_mode.u64 = csr_rd(CVMX_PKO_REG_GMX_PORT_MODE);
+		if (xi.interface == 0) {
+			if (num_ports == 1)
+				pko_mode.s.mode0 = 4;
+			else if (num_ports == 2)
+				pko_mode.s.mode0 = 3;
+			else if (num_ports <= 4)
+				pko_mode.s.mode0 = 2;
+			else if (num_ports <= 8)
+				pko_mode.s.mode0 = 1;
+			else
+				pko_mode.s.mode0 = 0;
+		} else {
+			if (num_ports == 1)
+				pko_mode.s.mode1 = 4;
+			else if (num_ports == 2)
+				pko_mode.s.mode1 = 3;
+			else if (num_ports <= 4)
+				pko_mode.s.mode1 = 2;
+			else if (num_ports <= 8)
+				pko_mode.s.mode1 = 1;
+			else
+				pko_mode.s.mode1 = 0;
+		}
+		csr_wr(CVMX_PKO_REG_GMX_PORT_MODE, pko_mode.u64);
+	}
+
+	/*
+	 * Set GMX to buffer as much data as possible before starting
+	 * transmit. This reduces the chances that we have a TX under run
+	 * due to memory contention. Any packet that fits entirely in the
+	 * GMX FIFO can never have an under run regardless of memory load.
+	 */
+	gmx_tx_thresh.u64 = csr_rd(CVMX_GMXX_TXX_THRESH(0, xi.interface));
+	/* ccn - common cnt numberator */
+	int ccn = 0x100;
+
+	/* Choose the max value for the number of ports */
+	if (num_ports <= 1)
+		gmx_tx_thresh.s.cnt = ccn / 1;
+	else if (num_ports == 2)
+		gmx_tx_thresh.s.cnt = ccn / 2;
+	else
+		gmx_tx_thresh.s.cnt = ccn / 4;
+
+	/*
+	 * SPI and XAUI can have lots of ports but the GMX hardware
+	 * only ever has a max of 4
+	 */
+	if (num_ports > 4)
+		num_ports = 4;
+	for (index = 0; index < num_ports; index++)
+		csr_wr(CVMX_GMXX_TXX_THRESH(index, xi.interface), gmx_tx_thresh.u64);
+
+	/*
+	 * For o68, we need to setup the pipes
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX) && xi.interface < CVMX_HELPER_MAX_GMX) {
+		union cvmx_gmxx_txx_pipe config;
+
+		for (index = 0; index < num_ports; index++) {
+			config.u64 = 0;
+
+			if (__cvmx_helper_cfg_pko_port_base(xiface, index) >= 0) {
+				config.u64 = csr_rd(CVMX_GMXX_TXX_PIPE(index,
+								       xi.interface));
+				config.s.nump = __cvmx_helper_cfg_pko_port_num(xiface,
+									       index);
+				config.s.base = __cvmx_helper_cfg_pko_port_base(xiface,
+										index);
+				csr_wr(CVMX_GMXX_TXX_PIPE(index, xi.interface),
+				       config.u64);
+			}
+		}
+	}
+
+	return 0;
+}
+
+int cvmx_helper_get_pko_port(int interface, int port)
+{
+	return cvmx_pko_get_base_pko_port(interface, port);
+}
+
+int cvmx_helper_get_ipd_port(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		const struct ipd_port_map *port_map;
+		int ipd_port;
+
+		if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
+			port_map = ipd_port_map_68xx;
+			ipd_port = 0;
+		} else if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+			port_map = ipd_port_map_78xx;
+			ipd_port = cvmx_helper_node_to_ipd_port(xi.node, 0);
+		} else if (OCTEON_IS_MODEL(OCTEON_CN73XX)) {
+			port_map = ipd_port_map_73xx;
+			ipd_port = 0;
+		} else if (OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+			port_map = ipd_port_map_75xx;
+			ipd_port = 0;
+		} else {
+			return -1;
+		}
+
+		ipd_port += port_map[xi.interface].first_ipd_port;
+		if (port_map[xi.interface].type == GMII) {
+			cvmx_helper_interface_mode_t mode;
+
+			mode = cvmx_helper_interface_get_mode(xiface);
+			if (mode == CVMX_HELPER_INTERFACE_MODE_XAUI ||
+			    (mode == CVMX_HELPER_INTERFACE_MODE_RXAUI &&
+			     OCTEON_IS_MODEL(OCTEON_CN68XX))) {
+				ipd_port += port_map[xi.interface].ipd_port_adj;
+				return ipd_port;
+			} else {
+				return ipd_port + (index * 16);
+			}
+		} else if (port_map[xi.interface].type == ILK) {
+			return ipd_port + index;
+		} else if (port_map[xi.interface].type == NPI) {
+			return ipd_port + index;
+		} else if (port_map[xi.interface].type == SRIO) {
+			return ipd_port + index;
+		} else if (port_map[xi.interface].type == LB) {
+			return ipd_port + index;
+		}
+
+		debug("ERROR: %s: interface %u:%u bad mode\n",
+		      __func__, xi.node, xi.interface);
+		return -1;
+	} else if (cvmx_helper_interface_get_mode(xiface) ==
+		   CVMX_HELPER_INTERFACE_MODE_AGL) {
+		return 24;
+	}
+
+	switch (xi.interface) {
+	case 0:
+		return index;
+	case 1:
+		return index + 16;
+	case 2:
+		return index + 32;
+	case 3:
+		return index + 36;
+	case 4:
+		return index + 40;
+	case 5:
+		return index + 42;
+	case 6:
+		return index + 44;
+	case 7:
+		return index + 46;
+	}
+	return -1;
+}
+
+int cvmx_helper_get_pknd(int xiface, int index)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_PKND))
+		return __cvmx_helper_cfg_pknd(xiface, index);
+
+	return CVMX_INVALID_PKND;
+}
+
+int cvmx_helper_get_bpid(int interface, int port)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_PKND))
+		return __cvmx_helper_cfg_bpid(interface, port);
+
+	return CVMX_INVALID_BPID;
+}
+
+/**
+ * Display interface statistics.
+ *
+ * @param port IPD/PKO port number
+ *
+ * @return none
+ */
+void cvmx_helper_show_stats(int port)
+{
+	cvmx_pip_port_status_t status;
+	cvmx_pko_port_status_t pko_status;
+
+	/* ILK stats */
+	if (octeon_has_feature(OCTEON_FEATURE_ILK))
+		__cvmx_helper_ilk_show_stats();
+
+	/* PIP stats */
+	cvmx_pip_get_port_stats(port, 0, &status);
+	debug("port %d: the number of packets - ipd: %d\n", port,
+	      (int)status.packets);
+
+	/* PKO stats */
+	cvmx_pko_get_port_status(port, 0, &pko_status);
+	debug("port %d: the number of packets - pko: %d\n", port,
+	      (int)pko_status.packets);
+
+	/* TODO: other stats */
+}
+
+/**
+ * Returns the interface number for an IPD/PKO port number.
+ *
+ * @param ipd_port IPD/PKO port number
+ *
+ * @return Interface number
+ */
+int cvmx_helper_get_interface_num(int ipd_port)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
+		const struct ipd_port_map *port_map;
+		int i;
+		struct cvmx_xport xp = cvmx_helper_ipd_port_to_xport(ipd_port);
+
+		port_map = ipd_port_map_68xx;
+		for (i = 0; i < CVMX_HELPER_MAX_IFACE; i++) {
+			if (xp.port >= port_map[i].first_ipd_port &&
+			    xp.port <= port_map[i].last_ipd_port)
+				return i;
+		}
+		return -1;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+		const struct ipd_port_map *port_map;
+		int i;
+		struct cvmx_xport xp = cvmx_helper_ipd_port_to_xport(ipd_port);
+
+		port_map = ipd_port_map_78xx;
+		for (i = 0; i < CVMX_HELPER_MAX_IFACE; i++) {
+			if (xp.port >= port_map[i].first_ipd_port &&
+			    xp.port <= port_map[i].last_ipd_port)
+				return cvmx_helper_node_interface_to_xiface(xp.node, i);
+		}
+		return -1;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN73XX)) {
+		const struct ipd_port_map *port_map;
+		int i;
+		struct cvmx_xport xp = cvmx_helper_ipd_port_to_xport(ipd_port);
+
+		port_map = ipd_port_map_73xx;
+		for (i = 0; i < CVMX_HELPER_MAX_IFACE; i++) {
+			if (xp.port >= port_map[i].first_ipd_port &&
+			    xp.port <= port_map[i].last_ipd_port)
+				return i;
+		}
+		return -1;
+	} else if (OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+		const struct ipd_port_map *port_map;
+		int i;
+		struct cvmx_xport xp = cvmx_helper_ipd_port_to_xport(ipd_port);
+
+		port_map = ipd_port_map_75xx;
+		for (i = 0; i < CVMX_HELPER_MAX_IFACE; i++) {
+			if (xp.port >= port_map[i].first_ipd_port &&
+			    xp.port <= port_map[i].last_ipd_port)
+				return i;
+		}
+		return -1;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN70XX) && ipd_port == 24) {
+		return 4;
+	}
+
+	if (ipd_port < 16)
+		return 0;
+	else if (ipd_port < 32)
+		return 1;
+	else if (ipd_port < 36)
+		return 2;
+	else if (ipd_port < 40)
+		return 3;
+	else if (ipd_port < 42)
+		return 4;
+	else if (ipd_port < 44)
+		return 5;
+	else if (ipd_port < 46)
+		return 6;
+	else if (ipd_port < 48)
+		return 7;
+
+	debug("%s: Illegal IPD port number %d\n", __func__, ipd_port);
+	return -1;
+}
+
+/**
+ * Returns the interface index number for an IPD/PKO port
+ * number.
+ *
+ * @param ipd_port IPD/PKO port number
+ *
+ * @return Interface index number
+ */
+int cvmx_helper_get_interface_index_num(int ipd_port)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		const struct ipd_port_map *port_map;
+		int port;
+		enum port_map_if_type type = INVALID_IF_TYPE;
+		int i;
+		int num_interfaces;
+
+		if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
+			port_map = ipd_port_map_68xx;
+		} else if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+			struct cvmx_xport xp = cvmx_helper_ipd_port_to_xport(ipd_port);
+
+			port_map = ipd_port_map_78xx;
+			ipd_port = xp.port;
+		} else if (OCTEON_IS_MODEL(OCTEON_CN73XX)) {
+			struct cvmx_xport xp = cvmx_helper_ipd_port_to_xport(ipd_port);
+
+			port_map = ipd_port_map_73xx;
+			ipd_port = xp.port;
+		} else if (OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+			struct cvmx_xport xp = cvmx_helper_ipd_port_to_xport(ipd_port);
+
+			port_map = ipd_port_map_75xx;
+			ipd_port = xp.port;
+		} else {
+			return -1;
+		}
+
+		num_interfaces = cvmx_helper_get_number_of_interfaces();
+
+		/* Get the interface type of the ipd port */
+		for (i = 0; i < num_interfaces; i++) {
+			if (ipd_port >= port_map[i].first_ipd_port &&
+			    ipd_port <= port_map[i].last_ipd_port) {
+				type = port_map[i].type;
+				break;
+			}
+		}
+
+		/* Convert the ipd port to the interface port */
+		switch (type) {
+		/* Ethernet interfaces have a channel in lower 4 bits
+		 * that is does not discriminate traffic, and is ignored.
+		 */
+		case GMII:
+			port = ipd_port - port_map[i].first_ipd_port;
+
+			/* CN68XX adds 0x40 to IPD_PORT when in XAUI/RXAUI
+			 * mode of operation, adjust for that case
+			 */
+			if (port >= port_map[i].ipd_port_adj)
+				port -= port_map[i].ipd_port_adj;
+
+			port >>= 4;
+			return port;
+
+		/*
+		 * These interfaces do not have physical ports,
+		 * but have logical channels instead that separate
+		 * traffic into logical streams
+		 */
+		case ILK:
+		case SRIO:
+		case NPI:
+		case LB:
+			port = ipd_port - port_map[i].first_ipd_port;
+			return port;
+
+		default:
+			printf("ERROR: %s: Illegal IPD port number %#x\n",
+			       __func__, ipd_port);
+			return -1;
+		}
+	}
+	if (OCTEON_IS_MODEL(OCTEON_CN70XX))
+		return ipd_port & 3;
+	if (ipd_port < 32)
+		return ipd_port & 15;
+	else if (ipd_port < 40)
+		return ipd_port & 3;
+	else if (ipd_port < 48)
+		return ipd_port & 1;
+
+	debug("%s: Illegal IPD port number\n", __func__);
+
+	return -1;
+}
+
+/**
+ * Prints out a buffer with the address, hex bytes, and ASCII
+ *
+ * @param	addr	Start address to print on the left
+ * @param[in]	buffer	array of bytes to print
+ * @param	count	Number of bytes to print
+ */
+void cvmx_print_buffer_u8(unsigned int addr, const uint8_t *buffer,
+			  size_t count)
+{
+	uint i;
+
+	while (count) {
+		unsigned int linelen = count < 16 ? count : 16;
+
+		debug("%08x:", addr);
+
+		for (i = 0; i < linelen; i++)
+			debug(" %0*x", 2, buffer[i]);
+
+		while (i++ < 17)
+			debug("   ");
+
+		for (i = 0; i < linelen; i++) {
+			if (buffer[i] >= 0x20 && buffer[i] < 0x7f)
+				debug("%c", buffer[i]);
+			else
+				debug(".");
+		}
+		debug("\n");
+		addr += linelen;
+		buffer += linelen;
+		count -= linelen;
+	}
+}
diff --git a/arch/mips/mach-octeon/cvmx-helper.c b/arch/mips/mach-octeon/cvmx-helper.c
new file mode 100644
index 0000000..529e03a
--- /dev/null
+++ b/arch/mips/mach-octeon/cvmx-helper.c
@@ -0,0 +1,2611 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper functions for common, but complicated tasks.
+ */
+
+#include <log.h>
+#include <linux/delay.h>
+
+#include <mach/cvmx-regs.h>
+#include <mach/cvmx-csr.h>
+#include <mach/cvmx-bootmem.h>
+#include <mach/octeon-model.h>
+#include <mach/cvmx-fuse.h>
+#include <mach/octeon-feature.h>
+#include <mach/cvmx-qlm.h>
+#include <mach/octeon_qlm.h>
+#include <mach/cvmx-pcie.h>
+#include <mach/cvmx-coremask.h>
+
+#include <mach/cvmx-agl-defs.h>
+#include <mach/cvmx-asxx-defs.h>
+#include <mach/cvmx-bgxx-defs.h>
+#include <mach/cvmx-dbg-defs.h>
+#include <mach/cvmx-gmxx-defs.h>
+#include <mach/cvmx-gserx-defs.h>
+#include <mach/cvmx-ipd-defs.h>
+#include <mach/cvmx-l2c-defs.h>
+#include <mach/cvmx-npi-defs.h>
+#include <mach/cvmx-pcsx-defs.h>
+#include <mach/cvmx-pexp-defs.h>
+#include <mach/cvmx-pki-defs.h>
+#include <mach/cvmx-pko-defs.h>
+#include <mach/cvmx-smix-defs.h>
+#include <mach/cvmx-sriox-defs.h>
+#include <mach/cvmx-helper.h>
+#include <mach/cvmx-helper-board.h>
+#include <mach/cvmx-helper-fdt.h>
+#include <mach/cvmx-helper-bgx.h>
+#include <mach/cvmx-helper-cfg.h>
+#include <mach/cvmx-helper-ipd.h>
+#include <mach/cvmx-helper-util.h>
+#include <mach/cvmx-helper-pki.h>
+#include <mach/cvmx-helper-pko.h>
+#include <mach/cvmx-helper-pko3.h>
+#include <mach/cvmx-global-resources.h>
+#include <mach/cvmx-pko-internal-ports-range.h>
+#include <mach/cvmx-pko3-queue.h>
+#include <mach/cvmx-gmx.h>
+#include <mach/cvmx-hwpko.h>
+#include <mach/cvmx-ilk.h>
+#include <mach/cvmx-ipd.h>
+#include <mach/cvmx-pip.h>
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by an interface.
+ *
+ * @param mode		Interface mode.
+ *
+ * @param enumerate	Method the get number of interface ports.
+ *
+ * @param probe		Method to probe an interface to get the number of
+ *			connected ports.
+ *
+ * @param enable	Method to enable an interface
+ *
+ * @param link_get	Method to get the state of an interface link.
+ *
+ * @param link_set	Method to configure an interface link to the specified
+ *			state.
+ *
+ * @param loopback	Method to configure a port in loopback.
+ */
+struct iface_ops {
+	cvmx_helper_interface_mode_t mode;
+	int (*enumerate)(int xiface);
+	int (*probe)(int xiface);
+	int (*enable)(int xiface);
+	cvmx_helper_link_info_t (*link_get)(int ipd_port);
+	int (*link_set)(int ipd_port, cvmx_helper_link_info_t link_info);
+	int (*loopback)(int ipd_port, int en_in, int en_ex);
+};
+
+/**
+ * @INTERNAL
+ * This structure is used by disabled interfaces.
+ */
+static const struct iface_ops iface_ops_dis = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_DISABLED,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as gmii.
+ */
+static const struct iface_ops iface_ops_gmii = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_GMII,
+	.enumerate = __cvmx_helper_rgmii_probe,
+	.probe = __cvmx_helper_rgmii_probe,
+	.enable = __cvmx_helper_rgmii_enable,
+	.link_get = __cvmx_helper_gmii_link_get,
+	.link_set = __cvmx_helper_rgmii_link_set,
+	.loopback = __cvmx_helper_rgmii_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as rgmii.
+ */
+static const struct iface_ops iface_ops_rgmii = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_RGMII,
+	.enumerate = __cvmx_helper_rgmii_probe,
+	.probe = __cvmx_helper_rgmii_probe,
+	.enable = __cvmx_helper_rgmii_enable,
+	.link_get = __cvmx_helper_rgmii_link_get,
+	.link_set = __cvmx_helper_rgmii_link_set,
+	.loopback = __cvmx_helper_rgmii_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as sgmii that use the gmx mac.
+ */
+static const struct iface_ops iface_ops_sgmii = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_SGMII,
+	.enumerate = __cvmx_helper_sgmii_enumerate,
+	.probe = __cvmx_helper_sgmii_probe,
+	.enable = __cvmx_helper_sgmii_enable,
+	.link_get = __cvmx_helper_sgmii_link_get,
+	.link_set = __cvmx_helper_sgmii_link_set,
+	.loopback = __cvmx_helper_sgmii_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as sgmii that use the bgx mac.
+ */
+static const struct iface_ops iface_ops_bgx_sgmii = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_SGMII,
+	.enumerate = __cvmx_helper_bgx_enumerate,
+	.probe = __cvmx_helper_bgx_probe,
+	.enable = __cvmx_helper_bgx_sgmii_enable,
+	.link_get = __cvmx_helper_bgx_sgmii_link_get,
+	.link_set = __cvmx_helper_bgx_sgmii_link_set,
+	.loopback = __cvmx_helper_bgx_sgmii_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as qsgmii.
+ */
+static const struct iface_ops iface_ops_qsgmii = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_QSGMII,
+	.enumerate = __cvmx_helper_sgmii_enumerate,
+	.probe = __cvmx_helper_sgmii_probe,
+	.enable = __cvmx_helper_sgmii_enable,
+	.link_get = __cvmx_helper_sgmii_link_get,
+	.link_set = __cvmx_helper_sgmii_link_set,
+	.loopback = __cvmx_helper_sgmii_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as xaui using the gmx mac.
+ */
+static const struct iface_ops iface_ops_xaui = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_XAUI,
+	.enumerate = __cvmx_helper_xaui_enumerate,
+	.probe = __cvmx_helper_xaui_probe,
+	.enable = __cvmx_helper_xaui_enable,
+	.link_get = __cvmx_helper_xaui_link_get,
+	.link_set = __cvmx_helper_xaui_link_set,
+	.loopback = __cvmx_helper_xaui_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as xaui using the gmx mac.
+ */
+static const struct iface_ops iface_ops_bgx_xaui = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_XAUI,
+	.enumerate = __cvmx_helper_bgx_enumerate,
+	.probe = __cvmx_helper_bgx_probe,
+	.enable = __cvmx_helper_bgx_xaui_enable,
+	.link_get = __cvmx_helper_bgx_xaui_link_get,
+	.link_set = __cvmx_helper_bgx_xaui_link_set,
+	.loopback = __cvmx_helper_bgx_xaui_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as rxaui.
+ */
+static const struct iface_ops iface_ops_rxaui = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_RXAUI,
+	.enumerate = __cvmx_helper_xaui_enumerate,
+	.probe = __cvmx_helper_xaui_probe,
+	.enable = __cvmx_helper_xaui_enable,
+	.link_get = __cvmx_helper_xaui_link_get,
+	.link_set = __cvmx_helper_xaui_link_set,
+	.loopback = __cvmx_helper_xaui_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as xaui using the gmx mac.
+ */
+static const struct iface_ops iface_ops_bgx_rxaui = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_RXAUI,
+	.enumerate = __cvmx_helper_bgx_enumerate,
+	.probe = __cvmx_helper_bgx_probe,
+	.enable = __cvmx_helper_bgx_xaui_enable,
+	.link_get = __cvmx_helper_bgx_xaui_link_get,
+	.link_set = __cvmx_helper_bgx_xaui_link_set,
+	.loopback = __cvmx_helper_bgx_xaui_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as xlaui.
+ */
+static const struct iface_ops iface_ops_bgx_xlaui = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_XLAUI,
+	.enumerate = __cvmx_helper_bgx_enumerate,
+	.probe = __cvmx_helper_bgx_probe,
+	.enable = __cvmx_helper_bgx_xaui_enable,
+	.link_get = __cvmx_helper_bgx_xaui_link_get,
+	.link_set = __cvmx_helper_bgx_xaui_link_set,
+	.loopback = __cvmx_helper_bgx_xaui_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as xfi.
+ */
+static const struct iface_ops iface_ops_bgx_xfi = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_XFI,
+	.enumerate = __cvmx_helper_bgx_enumerate,
+	.probe = __cvmx_helper_bgx_probe,
+	.enable = __cvmx_helper_bgx_xaui_enable,
+	.link_get = __cvmx_helper_bgx_xaui_link_get,
+	.link_set = __cvmx_helper_bgx_xaui_link_set,
+	.loopback = __cvmx_helper_bgx_xaui_configure_loopback,
+};
+
+static const struct iface_ops iface_ops_bgx_10G_KR = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_10G_KR,
+	.enumerate = __cvmx_helper_bgx_enumerate,
+	.probe = __cvmx_helper_bgx_probe,
+	.enable = __cvmx_helper_bgx_xaui_enable,
+	.link_get = __cvmx_helper_bgx_xaui_link_get,
+	.link_set = __cvmx_helper_bgx_xaui_link_set,
+	.loopback = __cvmx_helper_bgx_xaui_configure_loopback,
+};
+
+static const struct iface_ops iface_ops_bgx_40G_KR4 = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_40G_KR4,
+	.enumerate = __cvmx_helper_bgx_enumerate,
+	.probe = __cvmx_helper_bgx_probe,
+	.enable = __cvmx_helper_bgx_xaui_enable,
+	.link_get = __cvmx_helper_bgx_xaui_link_get,
+	.link_set = __cvmx_helper_bgx_xaui_link_set,
+	.loopback = __cvmx_helper_bgx_xaui_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as ilk.
+ */
+static const struct iface_ops iface_ops_ilk = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_ILK,
+	.enumerate = __cvmx_helper_ilk_enumerate,
+	.probe = __cvmx_helper_ilk_probe,
+	.enable = __cvmx_helper_ilk_enable,
+	.link_get = __cvmx_helper_ilk_link_get,
+	.link_set = __cvmx_helper_ilk_link_set,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as npi.
+ */
+static const struct iface_ops iface_ops_npi = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_NPI,
+	.enumerate = __cvmx_helper_npi_probe,
+	.probe = __cvmx_helper_npi_probe,
+	.enable = __cvmx_helper_npi_enable,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as srio.
+ */
+static const struct iface_ops iface_ops_srio = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_SRIO,
+	.enumerate = __cvmx_helper_srio_probe,
+	.probe = __cvmx_helper_srio_probe,
+	.enable = __cvmx_helper_srio_enable,
+	.link_get = __cvmx_helper_srio_link_get,
+	.link_set = __cvmx_helper_srio_link_set,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as agl.
+ */
+static const struct iface_ops iface_ops_agl = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_AGL,
+	.enumerate = __cvmx_helper_agl_enumerate,
+	.probe = __cvmx_helper_agl_probe,
+	.enable = __cvmx_helper_agl_enable,
+	.link_get = __cvmx_helper_agl_link_get,
+	.link_set = __cvmx_helper_agl_link_set,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as mixed mode, some ports are sgmii and some are xfi.
+ */
+static const struct iface_ops iface_ops_bgx_mixed = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_MIXED,
+	.enumerate = __cvmx_helper_bgx_enumerate,
+	.probe = __cvmx_helper_bgx_probe,
+	.enable = __cvmx_helper_bgx_mixed_enable,
+	.link_get = __cvmx_helper_bgx_mixed_link_get,
+	.link_set = __cvmx_helper_bgx_mixed_link_set,
+	.loopback = __cvmx_helper_bgx_mixed_configure_loopback,
+};
+
+/**
+ * @INTERNAL
+ * This structure specifies the interface methods used by interfaces
+ * configured as loop.
+ */
+static const struct iface_ops iface_ops_loop = {
+	.mode = CVMX_HELPER_INTERFACE_MODE_LOOP,
+	.enumerate = __cvmx_helper_loop_enumerate,
+	.probe = __cvmx_helper_loop_probe,
+};
+
+const struct iface_ops *iface_node_ops[CVMX_MAX_NODES][CVMX_HELPER_MAX_IFACE];
+#define iface_ops iface_node_ops[0]
+
+struct cvmx_iface {
+	int cvif_ipd_nports;
+	int cvif_has_fcs; /* PKO fcs for this interface. */
+	enum cvmx_pko_padding cvif_padding;
+	cvmx_helper_link_info_t *cvif_ipd_port_link_info;
+};
+
+/*
+ * This has to be static as u-boot expects to probe an interface and
+ * gets the number of its ports.
+ */
+static struct cvmx_iface cvmx_interfaces[CVMX_MAX_NODES][CVMX_HELPER_MAX_IFACE];
+
+int __cvmx_helper_get_num_ipd_ports(int xiface)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	struct cvmx_iface *piface;
+
+	if (xi.interface >= cvmx_helper_get_number_of_interfaces())
+		return -1;
+
+	piface = &cvmx_interfaces[xi.node][xi.interface];
+	return piface->cvif_ipd_nports;
+}
+
+enum cvmx_pko_padding __cvmx_helper_get_pko_padding(int xiface)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	struct cvmx_iface *piface;
+
+	if (xi.interface >= cvmx_helper_get_number_of_interfaces())
+		return CVMX_PKO_PADDING_NONE;
+
+	piface = &cvmx_interfaces[xi.node][xi.interface];
+	return piface->cvif_padding;
+}
+
+int __cvmx_helper_init_interface(int xiface, int num_ipd_ports, int has_fcs,
+				 enum cvmx_pko_padding pad)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	struct cvmx_iface *piface;
+	cvmx_helper_link_info_t *p;
+	int i;
+	int sz;
+	u64 addr;
+	char name[32];
+
+	if (xi.interface >= cvmx_helper_get_number_of_interfaces())
+		return -1;
+
+	piface = &cvmx_interfaces[xi.node][xi.interface];
+	piface->cvif_ipd_nports = num_ipd_ports;
+	piface->cvif_padding = pad;
+
+	piface->cvif_has_fcs = has_fcs;
+
+	/*
+	 * allocate the per-ipd_port link_info structure
+	 */
+	sz = piface->cvif_ipd_nports * sizeof(cvmx_helper_link_info_t);
+	snprintf(name, sizeof(name), "__int_%d_link_info", xi.interface);
+	addr = CAST64(cvmx_bootmem_alloc_named_range_once(sz, 0, 0,
+							  __alignof(cvmx_helper_link_info_t),
+							  name, NULL));
+	piface->cvif_ipd_port_link_info =
+		(cvmx_helper_link_info_t *)__cvmx_phys_addr_to_ptr(addr, sz);
+	if (!piface->cvif_ipd_port_link_info) {
+		if (sz != 0)
+			debug("iface %d failed to alloc link info\n", xi.interface);
+		return -1;
+	}
+
+	/* Initialize them */
+	p = piface->cvif_ipd_port_link_info;
+
+	for (i = 0; i < piface->cvif_ipd_nports; i++) {
+		(*p).u64 = 0;
+		p++;
+	}
+	return 0;
+}
+
+/*
+ * Shut down the interfaces; free the resources.
+ * @INTERNAL
+ */
+void __cvmx_helper_shutdown_interfaces_node(unsigned int node)
+{
+	int i;
+	int nifaces; /* number of interfaces */
+	struct cvmx_iface *piface;
+
+	nifaces = cvmx_helper_get_number_of_interfaces();
+	for (i = 0; i < nifaces; i++) {
+		piface = &cvmx_interfaces[node][i];
+
+		/*
+		 * For SE apps, bootmem was meant to be allocated and never
+		 * freed.
+		 */
+		piface->cvif_ipd_port_link_info = 0;
+	}
+}
+
+void __cvmx_helper_shutdown_interfaces(void)
+{
+	unsigned int node = cvmx_get_node_num();
+
+	__cvmx_helper_shutdown_interfaces_node(node);
+}
+
+int __cvmx_helper_set_link_info(int xiface, int index, cvmx_helper_link_info_t link_info)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	struct cvmx_iface *piface;
+
+	if (xi.interface >= cvmx_helper_get_number_of_interfaces())
+		return -1;
+
+	piface = &cvmx_interfaces[xi.node][xi.interface];
+
+	if (piface->cvif_ipd_port_link_info) {
+		piface->cvif_ipd_port_link_info[index] = link_info;
+		return 0;
+	}
+
+	return -1;
+}
+
+cvmx_helper_link_info_t __cvmx_helper_get_link_info(int xiface, int port)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	struct cvmx_iface *piface;
+	cvmx_helper_link_info_t err;
+
+	err.u64 = 0;
+
+	if (xi.interface >= cvmx_helper_get_number_of_interfaces())
+		return err;
+	piface = &cvmx_interfaces[xi.node][xi.interface];
+
+	if (piface->cvif_ipd_port_link_info)
+		return piface->cvif_ipd_port_link_info[port];
+
+	return err;
+}
+
+/**
+ * Returns if FCS is enabled for the specified interface and port
+ *
+ * @param xiface - interface to check
+ *
+ * @return zero if FCS is not used, otherwise FCS is used.
+ */
+int __cvmx_helper_get_has_fcs(int xiface)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	return cvmx_interfaces[xi.node][xi.interface].cvif_has_fcs;
+}
+
+u64 cvmx_rgmii_backpressure_dis = 1;
+
+typedef int (*cvmx_export_config_t)(void);
+cvmx_export_config_t cvmx_export_app_config;
+
+void cvmx_rgmii_set_back_pressure(uint64_t backpressure_dis)
+{
+	cvmx_rgmii_backpressure_dis = backpressure_dis;
+}
+
+/*
+ * internal functions that are not exported in the .h file but must be
+ * declared to make gcc happy.
+ */
+extern cvmx_helper_link_info_t __cvmx_helper_get_link_info(int interface, int port);
+
+/**
+ * cvmx_override_iface_phy_mode(int interface, int index) is a function pointer.
+ * It is meant to allow customization of interfaces which do not have a PHY.
+ *
+ * @returns 0 if MAC decides TX_CONFIG_REG or 1 if PHY decides  TX_CONFIG_REG.
+ *
+ * If this function pointer is NULL then it defaults to the MAC.
+ */
+int (*cvmx_override_iface_phy_mode)(int interface, int index);
+
+/**
+ * cvmx_override_ipd_port_setup(int ipd_port) is a function
+ * pointer. It is meant to allow customization of the IPD
+ * port/port kind setup before packet input/output comes online.
+ * It is called after cvmx-helper does the default IPD configuration,
+ * but before IPD is enabled. Users should set this pointer to a
+ * function before calling any cvmx-helper operations.
+ */
+void (*cvmx_override_ipd_port_setup)(int ipd_port) = NULL;
+
+/**
+ * Return the number of interfaces the chip has. Each interface
+ * may have multiple ports. Most chips support two interfaces,
+ * but the CNX0XX and CNX1XX are exceptions. These only support
+ * one interface.
+ *
+ * @return Number of interfaces on chip
+ */
+int cvmx_helper_get_number_of_interfaces(void)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+		return 9;
+	else if (OCTEON_IS_MODEL(OCTEON_CN66XX))
+		if (OCTEON_IS_MODEL(OCTEON_CN66XX_PASS1_0))
+			return 7;
+		else
+			return 8;
+	else if (OCTEON_IS_MODEL(OCTEON_CN63XX))
+		return 6;
+	else if (OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX))
+		return 4;
+	else if (OCTEON_IS_MODEL(OCTEON_CN70XX))
+		return 5;
+	else if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return 10;
+	else if (OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		return 5;
+	else if (OCTEON_IS_MODEL(OCTEON_CN73XX))
+		return 5;
+	else
+		return 3;
+}
+
+int __cvmx_helper_early_ports_on_interface(int interface)
+{
+	int ports;
+
+	if (octeon_has_feature(OCTEON_FEATURE_PKND))
+		return cvmx_helper_interface_enumerate(interface);
+
+	ports = cvmx_helper_interface_enumerate(interface);
+	ports = __cvmx_helper_board_interface_probe(interface, ports);
+
+	return ports;
+}
+
+/**
+ * Return the number of ports on an interface. Depending on the
+ * chip and configuration, this can be 1-16. A value of 0
+ * specifies that the interface doesn't exist or isn't usable.
+ *
+ * @param xiface xiface to get the port count for
+ *
+ * @return Number of ports on interface. Can be Zero.
+ */
+int cvmx_helper_ports_on_interface(int xiface)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_PKND))
+		return cvmx_helper_interface_enumerate(xiface);
+	else
+		return __cvmx_helper_get_num_ipd_ports(xiface);
+}
+
+/**
+ * @INTERNAL
+ * Return interface mode for CN70XX.
+ */
+static cvmx_helper_interface_mode_t __cvmx_get_mode_cn70xx(int interface)
+{
+	/* SGMII/RXAUI/QSGMII */
+	if (interface < 2) {
+		enum cvmx_qlm_mode qlm_mode =
+			cvmx_qlm_get_dlm_mode(0, interface);
+
+		if (qlm_mode == CVMX_QLM_MODE_SGMII)
+			iface_ops[interface] = &iface_ops_sgmii;
+		else if (qlm_mode == CVMX_QLM_MODE_QSGMII)
+			iface_ops[interface] = &iface_ops_qsgmii;
+		else if (qlm_mode == CVMX_QLM_MODE_RXAUI)
+			iface_ops[interface] = &iface_ops_rxaui;
+		else
+			iface_ops[interface] = &iface_ops_dis;
+	} else if (interface == 2) { /* DPI */
+		iface_ops[interface] = &iface_ops_npi;
+	} else if (interface == 3) { /* LOOP */
+		iface_ops[interface] = &iface_ops_loop;
+	} else if (interface == 4) { /* RGMII (AGL) */
+		cvmx_agl_prtx_ctl_t prtx_ctl;
+
+		prtx_ctl.u64 = csr_rd(CVMX_AGL_PRTX_CTL(0));
+		if (prtx_ctl.s.mode == 0)
+			iface_ops[interface] = &iface_ops_agl;
+		else
+			iface_ops[interface] = &iface_ops_dis;
+	} else {
+		iface_ops[interface] = &iface_ops_dis;
+	}
+
+	return iface_ops[interface]->mode;
+}
+
+/**
+ * @INTERNAL
+ * Return interface mode for CN78XX.
+ */
+static cvmx_helper_interface_mode_t __cvmx_get_mode_cn78xx(int xiface)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	/* SGMII/RXAUI/XAUI */
+	if (xi.interface < 6) {
+		int qlm = cvmx_qlm_lmac(xiface, 0);
+		enum cvmx_qlm_mode qlm_mode;
+
+		if (qlm == -1) {
+			iface_node_ops[xi.node][xi.interface] = &iface_ops_dis;
+			return iface_node_ops[xi.node][xi.interface]->mode;
+		}
+		qlm_mode = cvmx_qlm_get_mode_cn78xx(xi.node, qlm);
+
+		if (qlm_mode == CVMX_QLM_MODE_SGMII)
+			iface_node_ops[xi.node][xi.interface] = &iface_ops_bgx_sgmii;
+		else if (qlm_mode == CVMX_QLM_MODE_XAUI)
+			iface_node_ops[xi.node][xi.interface] = &iface_ops_bgx_xaui;
+		else if (qlm_mode == CVMX_QLM_MODE_XLAUI)
+			iface_node_ops[xi.node][xi.interface] = &iface_ops_bgx_xlaui;
+		else if (qlm_mode == CVMX_QLM_MODE_XFI)
+			iface_node_ops[xi.node][xi.interface] = &iface_ops_bgx_xfi;
+		else if (qlm_mode == CVMX_QLM_MODE_RXAUI)
+			iface_node_ops[xi.node][xi.interface] = &iface_ops_bgx_rxaui;
+		else
+			iface_node_ops[xi.node][xi.interface] = &iface_ops_dis;
+	} else if (xi.interface < 8) {
+		enum cvmx_qlm_mode qlm_mode;
+		int found = 0;
+		int i;
+		int intf, lane_mask;
+
+		if (xi.interface == 6) {
+			intf = 6;
+			lane_mask = cvmx_ilk_lane_mask[xi.node][0];
+		} else {
+			intf = 7;
+			lane_mask = cvmx_ilk_lane_mask[xi.node][1];
+		}
+		switch (lane_mask) {
+		default:
+		case 0x0:
+			iface_node_ops[xi.node][intf] = &iface_ops_dis;
+			break;
+		case 0xf:
+			qlm_mode = cvmx_qlm_get_mode_cn78xx(xi.node, 4);
+			if (qlm_mode == CVMX_QLM_MODE_ILK)
+				iface_node_ops[xi.node][intf] = &iface_ops_ilk;
+			else
+				iface_node_ops[xi.node][intf] = &iface_ops_dis;
+			break;
+		case 0xff:
+			found = 0;
+			for (i = 4; i < 6; i++) {
+				qlm_mode = cvmx_qlm_get_mode_cn78xx(xi.node, i);
+				if (qlm_mode == CVMX_QLM_MODE_ILK)
+					found++;
+			}
+			if (found == 2)
+				iface_node_ops[xi.node][intf] = &iface_ops_ilk;
+			else
+				iface_node_ops[xi.node][intf] = &iface_ops_dis;
+			break;
+		case 0xfff:
+			found = 0;
+			for (i = 4; i < 7; i++) {
+				qlm_mode = cvmx_qlm_get_mode_cn78xx(xi.node, i);
+				if (qlm_mode == CVMX_QLM_MODE_ILK)
+					found++;
+			}
+			if (found == 3)
+				iface_node_ops[xi.node][intf] = &iface_ops_ilk;
+			else
+				iface_node_ops[xi.node][intf] = &iface_ops_dis;
+			break;
+		case 0xff00:
+			found = 0;
+			for (i = 6; i < 8; i++) {
+				qlm_mode = cvmx_qlm_get_mode_cn78xx(xi.node, i);
+				if (qlm_mode == CVMX_QLM_MODE_ILK)
+					found++;
+			}
+			if (found == 2)
+				iface_node_ops[xi.node][intf] = &iface_ops_ilk;
+			else
+				iface_node_ops[xi.node][intf] = &iface_ops_dis;
+			break;
+		case 0xf0:
+			qlm_mode = cvmx_qlm_get_mode_cn78xx(xi.node, 5);
+			if (qlm_mode == CVMX_QLM_MODE_ILK)
+				iface_node_ops[xi.node][intf] = &iface_ops_ilk;
+			else
+				iface_node_ops[xi.node][intf] = &iface_ops_dis;
+			break;
+		case 0xf00:
+			qlm_mode = cvmx_qlm_get_mode_cn78xx(xi.node, 6);
+			if (qlm_mode == CVMX_QLM_MODE_ILK)
+				iface_node_ops[xi.node][intf] = &iface_ops_ilk;
+			else
+				iface_node_ops[xi.node][intf] = &iface_ops_dis;
+			break;
+		case 0xf000:
+			qlm_mode = cvmx_qlm_get_mode_cn78xx(xi.node, 7);
+			if (qlm_mode == CVMX_QLM_MODE_ILK)
+				iface_node_ops[xi.node][intf] = &iface_ops_ilk;
+			else
+				iface_node_ops[xi.node][intf] = &iface_ops_dis;
+			break;
+		case 0xfff0:
+			found = 0;
+			for (i = 5; i < 8; i++) {
+				qlm_mode = cvmx_qlm_get_mode_cn78xx(xi.node, i);
+				if (qlm_mode == CVMX_QLM_MODE_ILK)
+					found++;
+			}
+			if (found == 3)
+				iface_node_ops[xi.node][intf] = &iface_ops_ilk;
+			else
+				iface_node_ops[xi.node][intf] = &iface_ops_dis;
+			break;
+		}
+	} else if (xi.interface == 8) { /* DPI */
+		int qlm = 0;
+
+		for (qlm = 0; qlm < 5; qlm++) {
+			/* if GSERX_CFG[pcie] == 1, then enable npi */
+			if (csr_rd_node(xi.node, CVMX_GSERX_CFG(qlm)) & 0x1) {
+				iface_node_ops[xi.node][xi.interface] =
+					&iface_ops_npi;
+				return iface_node_ops[xi.node][xi.interface]->mode;
+			}
+		}
+		iface_node_ops[xi.node][xi.interface] = &iface_ops_dis;
+	} else if (xi.interface == 9) { /* LOOP */
+		iface_node_ops[xi.node][xi.interface] = &iface_ops_loop;
+	} else {
+		iface_node_ops[xi.node][xi.interface] = &iface_ops_dis;
+	}
+
+	return iface_node_ops[xi.node][xi.interface]->mode;
+}
+
+/**
+ * @INTERNAL
+ * Return interface mode for CN73XX.
+ */
+static cvmx_helper_interface_mode_t __cvmx_get_mode_cn73xx(int xiface)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	int interface = xi.interface;
+
+	/* SGMII/XAUI/XLAUI/XFI */
+	if (interface < 3) {
+		int qlm = cvmx_qlm_lmac(xiface, 0);
+		enum cvmx_qlm_mode qlm_mode;
+
+		if (qlm == -1) {
+			iface_ops[interface] = &iface_ops_dis;
+			return iface_ops[interface]->mode;
+		}
+		qlm_mode = cvmx_qlm_get_mode(qlm);
+
+		switch (qlm_mode) {
+		case CVMX_QLM_MODE_SGMII:
+		case CVMX_QLM_MODE_SGMII_2X1:
+		case CVMX_QLM_MODE_RGMII_SGMII:
+		case CVMX_QLM_MODE_RGMII_SGMII_1X1:
+			iface_ops[interface] = &iface_ops_bgx_sgmii;
+			break;
+		case CVMX_QLM_MODE_XAUI:
+		case CVMX_QLM_MODE_RGMII_XAUI:
+			iface_ops[interface] = &iface_ops_bgx_xaui;
+			break;
+		case CVMX_QLM_MODE_RXAUI:
+		case CVMX_QLM_MODE_RXAUI_1X2:
+		case CVMX_QLM_MODE_RGMII_RXAUI:
+			iface_ops[interface] = &iface_ops_bgx_rxaui;
+			break;
+		case CVMX_QLM_MODE_XLAUI:
+		case CVMX_QLM_MODE_RGMII_XLAUI:
+			iface_ops[interface] = &iface_ops_bgx_xlaui;
+			break;
+		case CVMX_QLM_MODE_XFI:
+		case CVMX_QLM_MODE_XFI_1X2:
+		case CVMX_QLM_MODE_RGMII_XFI:
+			iface_ops[interface] = &iface_ops_bgx_xfi;
+			break;
+		case CVMX_QLM_MODE_10G_KR:
+		case CVMX_QLM_MODE_10G_KR_1X2:
+		case CVMX_QLM_MODE_RGMII_10G_KR:
+			iface_ops[interface] = &iface_ops_bgx_10G_KR;
+			break;
+		case CVMX_QLM_MODE_40G_KR4:
+		case CVMX_QLM_MODE_RGMII_40G_KR4:
+			iface_ops[interface] = &iface_ops_bgx_40G_KR4;
+			break;
+		case CVMX_QLM_MODE_MIXED:
+			iface_ops[interface] = &iface_ops_bgx_mixed;
+			break;
+		default:
+			iface_ops[interface] = &iface_ops_dis;
+			break;
+		}
+	} else if (interface == 3) { /* DPI */
+		iface_ops[interface] = &iface_ops_npi;
+	} else if (interface == 4) { /* LOOP */
+		iface_ops[interface] = &iface_ops_loop;
+	} else {
+		iface_ops[interface] = &iface_ops_dis;
+	}
+
+	return iface_ops[interface]->mode;
+}
+
+/**
+ * @INTERNAL
+ * Return interface mode for CNF75XX.
+ *
+ * CNF75XX has a single BGX block, which is attached to two DLMs,
+ * the first, GSER4 only supports SGMII mode, while the second,
+ * GSER5 supports 1G/10G single late modes, i.e. SGMII, XFI, 10G-KR.
+ * Each half-BGX is thus designated as a separate interface with two ports each.
+ */
+static cvmx_helper_interface_mode_t __cvmx_get_mode_cnf75xx(int xiface)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	int interface = xi.interface;
+
+	/* BGX0: SGMII (DLM4/DLM5)/XFI(DLM5)  */
+	if (interface < 1) {
+		enum cvmx_qlm_mode qlm_mode;
+		int qlm = cvmx_qlm_lmac(xiface, 0);
+
+		if (qlm == -1) {
+			iface_ops[interface] = &iface_ops_dis;
+			return iface_ops[interface]->mode;
+		}
+		qlm_mode = cvmx_qlm_get_mode(qlm);
+
+		switch (qlm_mode) {
+		case CVMX_QLM_MODE_SGMII:
+		case CVMX_QLM_MODE_SGMII_2X1:
+			iface_ops[interface] = &iface_ops_bgx_sgmii;
+			break;
+		case CVMX_QLM_MODE_XFI_1X2:
+			iface_ops[interface] = &iface_ops_bgx_xfi;
+			break;
+		case CVMX_QLM_MODE_10G_KR_1X2:
+			iface_ops[interface] = &iface_ops_bgx_10G_KR;
+			break;
+		case CVMX_QLM_MODE_MIXED:
+			iface_ops[interface] = &iface_ops_bgx_mixed;
+			break;
+		default:
+			iface_ops[interface] = &iface_ops_dis;
+			break;
+		}
+	} else if ((interface < 3) && OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+		cvmx_sriox_status_reg_t sriox_status_reg;
+		int srio_port = interface - 1;
+
+		sriox_status_reg.u64 = csr_rd(CVMX_SRIOX_STATUS_REG(srio_port));
+
+		if (sriox_status_reg.s.srio)
+			iface_ops[interface] = &iface_ops_srio;
+		else
+			iface_ops[interface] = &iface_ops_dis;
+	} else if (interface == 3) { /* DPI */
+		iface_ops[interface] = &iface_ops_npi;
+	} else if (interface == 4) { /* LOOP */
+		iface_ops[interface] = &iface_ops_loop;
+	} else {
+		iface_ops[interface] = &iface_ops_dis;
+	}
+
+	return iface_ops[interface]->mode;
+}
+
+/**
+ * @INTERNAL
+ * Return interface mode for CN68xx.
+ */
+static cvmx_helper_interface_mode_t __cvmx_get_mode_cn68xx(int interface)
+{
+	union cvmx_mio_qlmx_cfg qlm_cfg;
+
+	switch (interface) {
+	case 0:
+		qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(0));
+		/* QLM is disabled when QLM SPD is 15. */
+		if (qlm_cfg.s.qlm_spd == 15)
+			iface_ops[interface] = &iface_ops_dis;
+		else if (qlm_cfg.s.qlm_cfg == 7)
+			iface_ops[interface] = &iface_ops_rxaui;
+		else if (qlm_cfg.s.qlm_cfg == 2)
+			iface_ops[interface] = &iface_ops_sgmii;
+		else if (qlm_cfg.s.qlm_cfg == 3)
+			iface_ops[interface] = &iface_ops_xaui;
+		else
+			iface_ops[interface] = &iface_ops_dis;
+		break;
+
+	case 1:
+		qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(0));
+		/* QLM is disabled when QLM SPD is 15. */
+		if (qlm_cfg.s.qlm_spd == 15)
+			iface_ops[interface] = &iface_ops_dis;
+		else if (qlm_cfg.s.qlm_cfg == 7)
+			iface_ops[interface] = &iface_ops_rxaui;
+		else
+			iface_ops[interface] = &iface_ops_dis;
+		break;
+
+	case 2:
+	case 3:
+	case 4:
+		qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(interface));
+		/* QLM is disabled when QLM SPD is 15. */
+		if (qlm_cfg.s.qlm_spd == 15)
+			iface_ops[interface] = &iface_ops_dis;
+		else if (qlm_cfg.s.qlm_cfg == 2)
+			iface_ops[interface] = &iface_ops_sgmii;
+		else if (qlm_cfg.s.qlm_cfg == 3)
+			iface_ops[interface] = &iface_ops_xaui;
+		else
+			iface_ops[interface] = &iface_ops_dis;
+		break;
+
+	case 5:
+	case 6:
+		qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(interface - 4));
+		/* QLM is disabled when QLM SPD is 15. */
+		if (qlm_cfg.s.qlm_spd == 15)
+			iface_ops[interface] = &iface_ops_dis;
+		else if (qlm_cfg.s.qlm_cfg == 1)
+			iface_ops[interface] = &iface_ops_ilk;
+		else
+			iface_ops[interface] = &iface_ops_dis;
+		break;
+
+	case 7: {
+		union cvmx_mio_qlmx_cfg qlm_cfg1;
+		/* Check if PCIe0/PCIe1 is configured for PCIe */
+		qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(3));
+		qlm_cfg1.u64 = csr_rd(CVMX_MIO_QLMX_CFG(1));
+		/* QLM is disabled when QLM SPD is 15. */
+		if ((qlm_cfg.s.qlm_spd != 15 && qlm_cfg.s.qlm_cfg == 0) ||
+		    (qlm_cfg1.s.qlm_spd != 15 && qlm_cfg1.s.qlm_cfg == 0))
+			iface_ops[interface] = &iface_ops_npi;
+		else
+			iface_ops[interface] = &iface_ops_dis;
+	} break;
+
+	case 8:
+		iface_ops[interface] = &iface_ops_loop;
+		break;
+
+	default:
+		iface_ops[interface] = &iface_ops_dis;
+		break;
+	}
+
+	return iface_ops[interface]->mode;
+}
+
+/**
+ * @INTERNAL
+ * Return interface mode for an Octeon II
+ */
+static cvmx_helper_interface_mode_t __cvmx_get_mode_octeon2(int interface)
+{
+	union cvmx_gmxx_inf_mode mode;
+
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+		return __cvmx_get_mode_cn68xx(interface);
+
+	if (interface == 2) {
+		iface_ops[interface] = &iface_ops_npi;
+	} else if (interface == 3) {
+		iface_ops[interface] = &iface_ops_loop;
+	} else if ((OCTEON_IS_MODEL(OCTEON_CN63XX) &&
+		    (interface == 4 || interface == 5)) ||
+		   (OCTEON_IS_MODEL(OCTEON_CN66XX) && interface >= 4 &&
+		    interface <= 7)) {
+		/* Only present in CN63XX & CN66XX Octeon model */
+		union cvmx_sriox_status_reg sriox_status_reg;
+
+		/* cn66xx pass1.0 has only 2 SRIO interfaces. */
+		if ((interface == 5 || interface == 7) &&
+		    OCTEON_IS_MODEL(OCTEON_CN66XX_PASS1_0)) {
+			iface_ops[interface] = &iface_ops_dis;
+		} else if (interface == 5 && OCTEON_IS_MODEL(OCTEON_CN66XX)) {
+			/*
+			 * Later passes of cn66xx support SRIO0 - x4/x2/x1,
+			 * SRIO2 - x2/x1, SRIO3 - x1
+			 */
+			iface_ops[interface] = &iface_ops_dis;
+		} else {
+			sriox_status_reg.u64 =
+				csr_rd(CVMX_SRIOX_STATUS_REG(interface - 4));
+			if (sriox_status_reg.s.srio)
+				iface_ops[interface] = &iface_ops_srio;
+			else
+				iface_ops[interface] = &iface_ops_dis;
+		}
+	} else if (OCTEON_IS_MODEL(OCTEON_CN66XX)) {
+		union cvmx_mio_qlmx_cfg mio_qlm_cfg;
+
+		/* QLM2 is SGMII0 and QLM1 is SGMII1 */
+		if (interface == 0) {
+			mio_qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(2));
+		} else if (interface == 1) {
+			mio_qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(1));
+		} else {
+			iface_ops[interface] = &iface_ops_dis;
+			return iface_ops[interface]->mode;
+		}
+
+		if (mio_qlm_cfg.s.qlm_spd == 15)
+			iface_ops[interface] = &iface_ops_dis;
+		else if (mio_qlm_cfg.s.qlm_cfg == 9)
+			iface_ops[interface] = &iface_ops_sgmii;
+		else if (mio_qlm_cfg.s.qlm_cfg == 11)
+			iface_ops[interface] = &iface_ops_xaui;
+		else
+			iface_ops[interface] = &iface_ops_dis;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN61XX)) {
+		union cvmx_mio_qlmx_cfg qlm_cfg;
+
+		if (interface == 0) {
+			qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(2));
+		} else if (interface == 1) {
+			qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(0));
+		} else {
+			iface_ops[interface] = &iface_ops_dis;
+			return iface_ops[interface]->mode;
+		}
+
+		if (qlm_cfg.s.qlm_spd == 15)
+			iface_ops[interface] = &iface_ops_dis;
+		else if (qlm_cfg.s.qlm_cfg == 2)
+			iface_ops[interface] = &iface_ops_sgmii;
+		else if (qlm_cfg.s.qlm_cfg == 3)
+			iface_ops[interface] = &iface_ops_xaui;
+		else
+			iface_ops[interface] = &iface_ops_dis;
+	} else if (OCTEON_IS_MODEL(OCTEON_CNF71XX)) {
+		if (interface == 0) {
+			union cvmx_mio_qlmx_cfg qlm_cfg;
+
+			qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(0));
+			if (qlm_cfg.s.qlm_cfg == 2)
+				iface_ops[interface] = &iface_ops_sgmii;
+			else
+				iface_ops[interface] = &iface_ops_dis;
+		} else {
+			iface_ops[interface] = &iface_ops_dis;
+		}
+	} else if (interface == 1 && OCTEON_IS_MODEL(OCTEON_CN63XX)) {
+		iface_ops[interface] = &iface_ops_dis;
+	} else {
+		mode.u64 = csr_rd(CVMX_GMXX_INF_MODE(interface));
+
+		if (OCTEON_IS_MODEL(OCTEON_CN63XX)) {
+			switch (mode.cn63xx.mode) {
+			case 0:
+				iface_ops[interface] = &iface_ops_sgmii;
+				break;
+
+			case 1:
+				iface_ops[interface] = &iface_ops_xaui;
+				break;
+
+			default:
+				iface_ops[interface] = &iface_ops_dis;
+				break;
+			}
+		} else {
+			if (!mode.s.en)
+				iface_ops[interface] = &iface_ops_dis;
+			else if (mode.s.type)
+				iface_ops[interface] = &iface_ops_gmii;
+			else
+				iface_ops[interface] = &iface_ops_rgmii;
+		}
+	}
+
+	return iface_ops[interface]->mode;
+}
+
+/**
+ * Get the operating mode of an interface. Depending on the Octeon
+ * chip and configuration, this function returns an enumeration
+ * of the type of packet I/O supported by an interface.
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Mode of the interface. Unknown or unsupported interfaces return
+ *         DISABLED.
+ */
+cvmx_helper_interface_mode_t cvmx_helper_interface_get_mode(int xiface)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (xi.interface < 0 ||
+	    xi.interface >= cvmx_helper_get_number_of_interfaces())
+		return CVMX_HELPER_INTERFACE_MODE_DISABLED;
+
+	/*
+	 * Check if the interface mode has been already cached. If it has,
+	 * simply return it. Otherwise, fall through the rest of the code to
+	 * determine the interface mode and cache it in iface_ops.
+	 */
+	if (iface_node_ops[xi.node][xi.interface]) {
+		cvmx_helper_interface_mode_t mode;
+
+		mode = iface_node_ops[xi.node][xi.interface]->mode;
+		return mode;
+	}
+
+	/*
+	 * OCTEON III models
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN70XX))
+		return __cvmx_get_mode_cn70xx(xi.interface);
+
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return __cvmx_get_mode_cn78xx(xiface);
+
+	if (OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+		cvmx_helper_interface_mode_t mode;
+
+		mode = __cvmx_get_mode_cnf75xx(xiface);
+		return mode;
+	}
+
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX)) {
+		cvmx_helper_interface_mode_t mode;
+
+		mode = __cvmx_get_mode_cn73xx(xiface);
+		return mode;
+	}
+
+	/*
+	 * Octeon II models
+	 */
+	if (OCTEON_IS_OCTEON2())
+		return __cvmx_get_mode_octeon2(xi.interface);
+
+	/*
+	 * Octeon and Octeon Plus models
+	 */
+	if (xi.interface == 2) {
+		iface_ops[xi.interface] = &iface_ops_npi;
+	} else if (xi.interface == 3) {
+		iface_ops[xi.interface] = &iface_ops_dis;
+	} else {
+		union cvmx_gmxx_inf_mode mode;
+
+		mode.u64 = csr_rd(CVMX_GMXX_INF_MODE(xi.interface));
+
+		if (!mode.s.en)
+			iface_ops[xi.interface] = &iface_ops_dis;
+		else if (mode.s.type)
+			iface_ops[xi.interface] = &iface_ops_gmii;
+		else
+			iface_ops[xi.interface] = &iface_ops_rgmii;
+	}
+
+	return iface_ops[xi.interface]->mode;
+}
+
+/**
+ * Determine the actual number of hardware ports connected to an
+ * interface. It doesn't setup the ports or enable them.
+ *
+ * @param xiface Interface to enumerate
+ *
+ * @return The number of ports on the interface, negative on failure
+ */
+int cvmx_helper_interface_enumerate(int xiface)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	int result = 0;
+
+	cvmx_helper_interface_get_mode(xiface);
+	if (iface_node_ops[xi.node][xi.interface]->enumerate)
+		result = iface_node_ops[xi.node][xi.interface]->enumerate(xiface);
+
+	return result;
+}
+
+/**
+ * This function probes an interface to determine the actual number of
+ * hardware ports connected to it. It does some setup the ports but
+ * doesn't enable them. The main goal here is to set the global
+ * interface_port_count[interface] correctly. Final hardware setup of
+ * the ports will be performed later.
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_helper_interface_probe(int xiface)
+{
+	/*
+	 * At this stage in the game we don't want packets to be
+	 * moving yet.  The following probe calls should perform
+	 * hardware setup needed to determine port counts. Receive
+	 * must still be disabled.
+	 */
+	int nports;
+	int has_fcs;
+	enum cvmx_pko_padding padding = CVMX_PKO_PADDING_NONE;
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	nports = -1;
+	has_fcs = 0;
+
+	cvmx_helper_interface_get_mode(xiface);
+	if (iface_node_ops[xi.node][xi.interface]->probe)
+		nports = iface_node_ops[xi.node][xi.interface]->probe(xiface);
+
+	switch (iface_node_ops[xi.node][xi.interface]->mode) {
+		/* These types don't support ports to IPD/PKO */
+	case CVMX_HELPER_INTERFACE_MODE_DISABLED:
+	case CVMX_HELPER_INTERFACE_MODE_PCIE:
+		nports = 0;
+		break;
+		/* XAUI is a single high speed port */
+	case CVMX_HELPER_INTERFACE_MODE_XAUI:
+	case CVMX_HELPER_INTERFACE_MODE_RXAUI:
+	case CVMX_HELPER_INTERFACE_MODE_XLAUI:
+	case CVMX_HELPER_INTERFACE_MODE_XFI:
+	case CVMX_HELPER_INTERFACE_MODE_10G_KR:
+	case CVMX_HELPER_INTERFACE_MODE_40G_KR4:
+	case CVMX_HELPER_INTERFACE_MODE_MIXED:
+		has_fcs = 1;
+		padding = CVMX_PKO_PADDING_60;
+		break;
+		/*
+		 * RGMII/GMII/MII are all treated about the same. Most
+		 * functions refer to these ports as RGMII.
+		 */
+	case CVMX_HELPER_INTERFACE_MODE_RGMII:
+	case CVMX_HELPER_INTERFACE_MODE_GMII:
+		padding = CVMX_PKO_PADDING_60;
+		break;
+		/*
+		 * SPI4 can have 1-16 ports depending on the device at
+		 * the other end.
+		 */
+	case CVMX_HELPER_INTERFACE_MODE_SPI:
+		padding = CVMX_PKO_PADDING_60;
+		break;
+		/*
+		 * SGMII can have 1-4 ports depending on how many are
+		 * hooked up.
+		 */
+	case CVMX_HELPER_INTERFACE_MODE_SGMII:
+	case CVMX_HELPER_INTERFACE_MODE_QSGMII:
+		padding = CVMX_PKO_PADDING_60;
+	case CVMX_HELPER_INTERFACE_MODE_PICMG:
+		has_fcs = 1;
+		break;
+		/* PCI target Network Packet Interface */
+	case CVMX_HELPER_INTERFACE_MODE_NPI:
+		break;
+		/*
+		 * Special loopback only ports. These are not the same
+		 * as other ports in loopback mode.
+		 */
+	case CVMX_HELPER_INTERFACE_MODE_LOOP:
+		break;
+		/* SRIO has 2^N ports, where N is number of interfaces */
+	case CVMX_HELPER_INTERFACE_MODE_SRIO:
+		break;
+	case CVMX_HELPER_INTERFACE_MODE_ILK:
+		padding = CVMX_PKO_PADDING_60;
+		has_fcs = 1;
+		break;
+	case CVMX_HELPER_INTERFACE_MODE_AGL:
+		has_fcs = 1;
+		break;
+	}
+
+	if (nports == -1)
+		return -1;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_PKND))
+		has_fcs = 0;
+
+	nports = __cvmx_helper_board_interface_probe(xiface, nports);
+	__cvmx_helper_init_interface(xiface, nports, has_fcs, padding);
+	/* Make sure all global variables propagate to other cores */
+	CVMX_SYNCWS;
+
+	return 0;
+}
+
+/**
+ * @INTERNAL
+ * Setup backpressure.
+ *
+ * @return Zero on success, negative on failure
+ */
+static int __cvmx_helper_global_setup_backpressure(int node)
+{
+	cvmx_qos_proto_t qos_proto;
+	cvmx_qos_pkt_mode_t qos_mode;
+	int port, xipdport;
+	unsigned int bpmask;
+	int interface, xiface, ports;
+	int num_interfaces = cvmx_helper_get_number_of_interfaces();
+
+	if (cvmx_rgmii_backpressure_dis) {
+		qos_proto = CVMX_QOS_PROTO_NONE;
+		qos_mode = CVMX_QOS_PKT_MODE_DROP;
+	} else {
+		qos_proto = CVMX_QOS_PROTO_PAUSE;
+		qos_mode = CVMX_QOS_PKT_MODE_HWONLY;
+	}
+
+	for (interface = 0; interface < num_interfaces; interface++) {
+		xiface = cvmx_helper_node_interface_to_xiface(node, interface);
+		ports = cvmx_helper_ports_on_interface(xiface);
+
+		switch (cvmx_helper_interface_get_mode(xiface)) {
+		case CVMX_HELPER_INTERFACE_MODE_DISABLED:
+		case CVMX_HELPER_INTERFACE_MODE_PCIE:
+		case CVMX_HELPER_INTERFACE_MODE_SRIO:
+		case CVMX_HELPER_INTERFACE_MODE_ILK:
+		case CVMX_HELPER_INTERFACE_MODE_NPI:
+		case CVMX_HELPER_INTERFACE_MODE_PICMG:
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_LOOP:
+		case CVMX_HELPER_INTERFACE_MODE_XAUI:
+		case CVMX_HELPER_INTERFACE_MODE_RXAUI:
+		case CVMX_HELPER_INTERFACE_MODE_XLAUI:
+		case CVMX_HELPER_INTERFACE_MODE_XFI:
+		case CVMX_HELPER_INTERFACE_MODE_10G_KR:
+		case CVMX_HELPER_INTERFACE_MODE_40G_KR4:
+			bpmask = (cvmx_rgmii_backpressure_dis) ? 0xF : 0;
+			if (octeon_has_feature(OCTEON_FEATURE_BGX)) {
+				for (port = 0; port < ports; port++) {
+					xipdport = cvmx_helper_get_ipd_port(xiface, port);
+					cvmx_bgx_set_flowctl_mode(xipdport, qos_proto, qos_mode);
+				}
+				cvmx_bgx_set_backpressure_override(xiface, bpmask);
+			}
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_RGMII:
+		case CVMX_HELPER_INTERFACE_MODE_GMII:
+		case CVMX_HELPER_INTERFACE_MODE_SPI:
+		case CVMX_HELPER_INTERFACE_MODE_SGMII:
+		case CVMX_HELPER_INTERFACE_MODE_QSGMII:
+		case CVMX_HELPER_INTERFACE_MODE_MIXED:
+			bpmask = (cvmx_rgmii_backpressure_dis) ? 0xF : 0;
+			if (octeon_has_feature(OCTEON_FEATURE_BGX)) {
+				for (port = 0; port < ports; port++) {
+					xipdport = cvmx_helper_get_ipd_port(xiface, port);
+					cvmx_bgx_set_flowctl_mode(xipdport, qos_proto, qos_mode);
+				}
+				cvmx_bgx_set_backpressure_override(xiface, bpmask);
+			} else {
+				cvmx_gmx_set_backpressure_override(interface, bpmask);
+			}
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_AGL:
+			bpmask = (cvmx_rgmii_backpressure_dis) ? 0x1 : 0;
+			cvmx_agl_set_backpressure_override(interface, bpmask);
+			break;
+		}
+	}
+	return 0;
+}
+
+/**
+ * @INTERNAL
+ * Verify the per port IPD backpressure is aligned properly.
+ * @return Zero if working, non zero if misaligned
+ */
+int __cvmx_helper_backpressure_is_misaligned(void)
+{
+	return 0;
+}
+
+/**
+ * @INTERNAL
+ * Enable packet input/output from the hardware. This function is
+ * called after all internal setup is complete and IPD is enabled.
+ * After this function completes, packets will be accepted from the
+ * hardware ports. PKO should still be disabled to make sure packets
+ * aren't sent out partially setup hardware.
+ *
+ * @param xiface Interface to enable
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_packet_hardware_enable(int xiface)
+{
+	int result = 0;
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (iface_node_ops[xi.node][xi.interface]->enable)
+		result = iface_node_ops[xi.node][xi.interface]->enable(xiface);
+	result |= __cvmx_helper_board_hardware_enable(xiface);
+	return result;
+}
+
+int cvmx_helper_ipd_and_packet_input_enable(void)
+{
+	return cvmx_helper_ipd_and_packet_input_enable_node(cvmx_get_node_num());
+}
+
+/**
+ * Called after all internal packet IO paths are setup. This
+ * function enables IPD/PIP and begins packet input and output.
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_helper_ipd_and_packet_input_enable_node(int node)
+{
+	int num_interfaces;
+	int interface;
+	int num_ports;
+
+	if (octeon_has_feature(OCTEON_FEATURE_PKI)) {
+		cvmx_helper_pki_enable(node);
+	} else {
+		/* Enable IPD */
+		cvmx_ipd_enable();
+	}
+
+	/*
+	 * Time to enable hardware ports packet input and output. Note
+	 * that at this point IPD/PIP must be fully functional and PKO
+	 * must be disabled .
+	 */
+	num_interfaces = cvmx_helper_get_number_of_interfaces();
+	for (interface = 0; interface < num_interfaces; interface++) {
+		int xiface = cvmx_helper_node_interface_to_xiface(node, interface);
+
+		num_ports = cvmx_helper_ports_on_interface(xiface);
+		if (num_ports > 0)
+			__cvmx_helper_packet_hardware_enable(xiface);
+	}
+
+	/* Finally enable PKO now that the entire path is up and running */
+	/* enable pko */
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		; // cvmx_pko_enable_78xx(0); already enabled
+	else
+		cvmx_pko_enable();
+
+	return 0;
+}
+
+/**
+ * Initialize the PIP, IPD, and PKO hardware to support
+ * simple priority based queues for the ethernet ports. Each
+ * port is configured with a number of priority queues based
+ * on CVMX_PKO_QUEUES_PER_PORT_* where each queue is lower
+ * priority than the previous.
+ *
+ * @return Zero on success, non-zero on failure
+ */
+int cvmx_helper_initialize_packet_io_node(unsigned int node)
+{
+	int result = 0;
+	int interface;
+	int xiface;
+	union cvmx_l2c_cfg l2c_cfg;
+	union cvmx_smix_en smix_en;
+	const int num_interfaces = cvmx_helper_get_number_of_interfaces();
+
+	/*
+	 * Tell L2 to give the IOB statically higher priority compared
+	 * to the cores. This avoids conditions where IO blocks might
+	 * be starved under very high L2 loads.
+	 */
+	if (OCTEON_IS_OCTEON2() || OCTEON_IS_OCTEON3()) {
+		union cvmx_l2c_ctl l2c_ctl;
+
+		l2c_ctl.u64 = csr_rd_node(node, CVMX_L2C_CTL);
+		l2c_ctl.s.rsp_arb_mode = 1;
+		l2c_ctl.s.xmc_arb_mode = 0;
+		csr_wr_node(node, CVMX_L2C_CTL, l2c_ctl.u64);
+	} else {
+		l2c_cfg.u64 = csr_rd(CVMX_L2C_CFG);
+		l2c_cfg.s.lrf_arb_mode = 0;
+		l2c_cfg.s.rfb_arb_mode = 0;
+		csr_wr(CVMX_L2C_CFG, l2c_cfg.u64);
+	}
+
+	int smi_inf;
+	int i;
+
+	/* Newer chips have more than one SMI/MDIO interface */
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CN78XX))
+		smi_inf = 4;
+	else if (OCTEON_IS_MODEL(OCTEON_CN73XX) || OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		smi_inf = 2;
+	else
+		smi_inf = 2;
+
+	for (i = 0; i < smi_inf; i++) {
+		/* Make sure SMI/MDIO is enabled so we can query PHYs */
+		smix_en.u64 = csr_rd_node(node, CVMX_SMIX_EN(i));
+		if (!smix_en.s.en) {
+			smix_en.s.en = 1;
+			csr_wr_node(node, CVMX_SMIX_EN(i), smix_en.u64);
+		}
+	}
+
+	//vinita_to_do ask it need to be modify for multinode
+	__cvmx_helper_init_port_valid();
+
+	for (interface = 0; interface < num_interfaces; interface++) {
+		xiface = cvmx_helper_node_interface_to_xiface(node, interface);
+		result |= cvmx_helper_interface_probe(xiface);
+	}
+
+	/* PKO3 init precedes that of interfaces */
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		__cvmx_helper_init_port_config_data(node);
+		result = cvmx_helper_pko3_init_global(node);
+	} else {
+		result = cvmx_helper_pko_init();
+	}
+
+	/* Errata SSO-29000, Disabling power saving SSO conditional clocking */
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_sso_ws_cfg_t cfg;
+
+		cfg.u64 = csr_rd_node(node, CVMX_SSO_WS_CFG);
+		cfg.s.sso_cclk_dis = 1;
+		csr_wr_node(node, CVMX_SSO_WS_CFG, cfg.u64);
+	}
+
+	if (result < 0)
+		return result;
+
+	for (interface = 0; interface < num_interfaces; interface++) {
+		xiface = cvmx_helper_node_interface_to_xiface(node, interface);
+		/* Skip invalid/disabled interfaces */
+		if (cvmx_helper_ports_on_interface(xiface) <= 0)
+			continue;
+		printf("Node %d Interface %d has %d ports (%s)\n", node, interface,
+		       cvmx_helper_ports_on_interface(xiface),
+		       cvmx_helper_interface_mode_to_string(
+			       cvmx_helper_interface_get_mode(xiface)));
+
+		result |= __cvmx_helper_ipd_setup_interface(xiface);
+		if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+			result |= cvmx_helper_pko3_init_interface(xiface);
+		else
+			result |= __cvmx_helper_interface_setup_pko(interface);
+	}
+
+	if (octeon_has_feature(OCTEON_FEATURE_PKI))
+		result |= __cvmx_helper_pki_global_setup(node);
+	else
+		result |= __cvmx_helper_ipd_global_setup();
+
+	/* Enable any flow control and backpressure */
+	result |= __cvmx_helper_global_setup_backpressure(node);
+
+	/* export app config if set */
+	if (cvmx_export_app_config)
+		result |= (*cvmx_export_app_config)();
+
+	if (cvmx_ipd_cfg.ipd_enable && cvmx_pki_dflt_init[node])
+		result |= cvmx_helper_ipd_and_packet_input_enable_node(node);
+	return result;
+}
+
+/**
+ * Initialize the PIP, IPD, and PKO hardware to support
+ * simple priority based queues for the ethernet ports. Each
+ * port is configured with a number of priority queues based
+ * on CVMX_PKO_QUEUES_PER_PORT_* where each queue is lower
+ * priority than the previous.
+ *
+ * @return Zero on success, non-zero on failure
+ */
+int cvmx_helper_initialize_packet_io_global(void)
+{
+	unsigned int node = cvmx_get_node_num();
+
+	return cvmx_helper_initialize_packet_io_node(node);
+}
+
+/**
+ * Does core local initialization for packet io
+ *
+ * @return Zero on success, non-zero on failure
+ */
+int cvmx_helper_initialize_packet_io_local(void)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		__cvmx_pko3_dq_table_setup();
+
+	return 0;
+}
+
+struct cvmx_buffer_list {
+	struct cvmx_buffer_list *next;
+};
+
+/**
+ * Disables the sending of flow control (pause) frames on the specified
+ * GMX port(s).
+ *
+ * @param interface Which interface (0 or 1)
+ * @param port_mask Mask (4bits) of which ports on the interface to disable
+ *                  backpressure on.
+ *                  1 => disable backpressure
+ *                  0 => enable backpressure
+ *
+ * @return 0 on success
+ *         -1 on error
+ */
+int cvmx_gmx_set_backpressure_override(u32 interface, uint32_t port_mask)
+{
+	union cvmx_gmxx_tx_ovr_bp gmxx_tx_ovr_bp;
+	/* Check for valid arguments */
+	if (port_mask & ~0xf || interface & ~0x1)
+		return -1;
+	if (interface >= CVMX_HELPER_MAX_GMX)
+		return -1;
+
+	gmxx_tx_ovr_bp.u64 = 0;
+	gmxx_tx_ovr_bp.s.en = port_mask;       /* Per port Enable back pressure override */
+	gmxx_tx_ovr_bp.s.ign_full = port_mask; /* Ignore the RX FIFO full when computing BP */
+	csr_wr(CVMX_GMXX_TX_OVR_BP(interface), gmxx_tx_ovr_bp.u64);
+	return 0;
+}
+
+/**
+ * Disables the sending of flow control (pause) frames on the specified
+ * AGL (RGMII) port(s).
+ *
+ * @param interface Which interface (0 or 1)
+ * @param port_mask Mask (4bits) of which ports on the interface to disable
+ *                  backpressure on.
+ *                  1 => disable backpressure
+ *                  0 => enable backpressure
+ *
+ * @return 0 on success
+ *         -1 on error
+ */
+int cvmx_agl_set_backpressure_override(u32 interface, uint32_t port_mask)
+{
+	union cvmx_agl_gmx_tx_ovr_bp agl_gmx_tx_ovr_bp;
+	int port = cvmx_helper_agl_get_port(interface);
+
+	if (port == -1)
+		return -1;
+	/* Check for valid arguments */
+	agl_gmx_tx_ovr_bp.u64 = 0;
+	/* Per port Enable back pressure override */
+	agl_gmx_tx_ovr_bp.s.en = port_mask;
+	/* Ignore the RX FIFO full when computing BP */
+	agl_gmx_tx_ovr_bp.s.ign_full = port_mask;
+	csr_wr(CVMX_GMXX_TX_OVR_BP(port), agl_gmx_tx_ovr_bp.u64);
+	return 0;
+}
+
+/**
+ * Helper function for global packet IO shutdown
+ */
+int cvmx_helper_shutdown_packet_io_global_cn78xx(int node)
+{
+	int num_interfaces = cvmx_helper_get_number_of_interfaces();
+	cvmx_wqe_t *work;
+	int interface;
+	int result = 0;
+
+	/* Shut down all interfaces and disable TX and RX on all ports */
+	for (interface = 0; interface < num_interfaces; interface++) {
+		int xiface = cvmx_helper_node_interface_to_xiface(node, interface);
+		int index;
+		int num_ports = cvmx_helper_ports_on_interface(xiface);
+
+		if (num_ports > 4)
+			num_ports = 4;
+
+		cvmx_bgx_set_backpressure_override(xiface, 0);
+		for (index = 0; index < num_ports; index++) {
+			cvmx_helper_link_info_t link_info;
+
+			if (!cvmx_helper_is_port_valid(xiface, index))
+				continue;
+
+			cvmx_helper_bgx_shutdown_port(xiface, index);
+
+			/* Turn off link LEDs */
+			link_info.u64 = 0;
+			cvmx_helper_update_link_led(xiface, index, link_info);
+		}
+	}
+
+	/* Stop input first */
+	cvmx_helper_pki_shutdown(node);
+
+	/* Retrieve all packets from the SSO and free them */
+	result = 0;
+	while ((work = cvmx_pow_work_request_sync(CVMX_POW_WAIT))) {
+		cvmx_helper_free_pki_pkt_data(work);
+		cvmx_wqe_pki_free(work);
+		result++;
+	}
+
+	if (result > 0)
+		debug("%s: Purged %d packets from SSO\n", __func__, result);
+
+	/*
+	 * No need to wait for PKO queues to drain,
+	 * dq_close() drains the queues to NULL.
+	 */
+
+	/* Shutdown PKO interfaces */
+	for (interface = 0; interface < num_interfaces; interface++) {
+		int xiface = cvmx_helper_node_interface_to_xiface(node, interface);
+
+		cvmx_helper_pko3_shut_interface(xiface);
+	}
+
+	/* Disable MAC address filtering */
+	for (interface = 0; interface < num_interfaces; interface++) {
+		int xiface = cvmx_helper_node_interface_to_xiface(node, interface);
+
+		switch (cvmx_helper_interface_get_mode(xiface)) {
+		case CVMX_HELPER_INTERFACE_MODE_XAUI:
+		case CVMX_HELPER_INTERFACE_MODE_RXAUI:
+		case CVMX_HELPER_INTERFACE_MODE_XLAUI:
+		case CVMX_HELPER_INTERFACE_MODE_XFI:
+		case CVMX_HELPER_INTERFACE_MODE_10G_KR:
+		case CVMX_HELPER_INTERFACE_MODE_40G_KR4:
+		case CVMX_HELPER_INTERFACE_MODE_SGMII:
+		case CVMX_HELPER_INTERFACE_MODE_MIXED: {
+			int index;
+			int num_ports = cvmx_helper_ports_on_interface(xiface);
+
+			for (index = 0; index < num_ports; index++) {
+				if (!cvmx_helper_is_port_valid(xiface, index))
+					continue;
+
+				/* Reset MAC filtering */
+				cvmx_helper_bgx_rx_adr_ctl(node, interface, index, 0, 0, 0);
+			}
+			break;
+		}
+		default:
+			break;
+		}
+	}
+
+	for (interface = 0; interface < num_interfaces; interface++) {
+		int index;
+		int xiface = cvmx_helper_node_interface_to_xiface(node, interface);
+		int num_ports = cvmx_helper_ports_on_interface(xiface);
+
+		for (index = 0; index < num_ports; index++) {
+			/* Doing this twice should clear it since no packets
+			 * can be received.
+			 */
+			cvmx_update_rx_activity_led(xiface, index, false);
+			cvmx_update_rx_activity_led(xiface, index, false);
+		}
+	}
+
+	/* Shutdown the PKO unit */
+	result = cvmx_helper_pko3_shutdown(node);
+
+	/* Release interface structures */
+	__cvmx_helper_shutdown_interfaces();
+
+	return result;
+}
+
+/**
+ * Undo the initialization performed in
+ * cvmx_helper_initialize_packet_io_global(). After calling this routine and the
+ * local version on each core, packet IO for Octeon will be disabled and placed
+ * in the initial reset state. It will then be safe to call the initialize
+ * later on. Note that this routine does not empty the FPA pools. It frees all
+ * buffers used by the packet IO hardware to the FPA so a function emptying the
+ * FPA after shutdown should find all packet buffers in the FPA.
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_helper_shutdown_packet_io_global(void)
+{
+	const int timeout = 5; /* Wait up to 5 seconds for timeouts */
+	int result = 0;
+	int num_interfaces = cvmx_helper_get_number_of_interfaces();
+	int interface;
+	int num_ports;
+	int index;
+	struct cvmx_buffer_list *pool0_buffers;
+	struct cvmx_buffer_list *pool0_buffers_tail;
+	cvmx_wqe_t *work;
+	union cvmx_ipd_ctl_status ipd_ctl_status;
+	int wqe_pool = (int)cvmx_fpa_get_wqe_pool();
+	int node = cvmx_get_node_num();
+	cvmx_pcsx_mrx_control_reg_t control_reg;
+
+	if (octeon_has_feature(OCTEON_FEATURE_BGX))
+		return cvmx_helper_shutdown_packet_io_global_cn78xx(node);
+
+	/* Step 1: Disable all backpressure */
+	for (interface = 0; interface < num_interfaces; interface++) {
+		cvmx_helper_interface_mode_t mode =
+			cvmx_helper_interface_get_mode(interface);
+
+		if (mode == CVMX_HELPER_INTERFACE_MODE_AGL)
+			cvmx_agl_set_backpressure_override(interface, 0x1);
+		else if (mode != CVMX_HELPER_INTERFACE_MODE_DISABLED)
+			cvmx_gmx_set_backpressure_override(interface, 0xf);
+	}
+
+	/* Step 2: Wait for the PKO queues to drain */
+	result = __cvmx_helper_pko_drain();
+	if (result < 0) {
+		debug("WARNING: %s: Failed to drain some PKO queues\n",
+		      __func__);
+	}
+
+	/* Step 3: Disable TX and RX on all ports */
+	for (interface = 0; interface < num_interfaces; interface++) {
+		int xiface = cvmx_helper_node_interface_to_xiface(node,
+								  interface);
+
+		switch (cvmx_helper_interface_get_mode(interface)) {
+		case CVMX_HELPER_INTERFACE_MODE_DISABLED:
+		case CVMX_HELPER_INTERFACE_MODE_PCIE:
+			/* Not a packet interface */
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_NPI:
+		case CVMX_HELPER_INTERFACE_MODE_SRIO:
+		case CVMX_HELPER_INTERFACE_MODE_ILK:
+			/*
+			 * We don't handle the NPI/NPEI/SRIO packet
+			 * engines. The caller must know these are
+			 * idle.
+			 */
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_LOOP:
+			/*
+			 * Nothing needed. Once PKO is idle, the
+			 * loopback devices must be idle.
+			 */
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_SPI:
+			/*
+			 * SPI cannot be disabled from Octeon. It is
+			 * the responsibility of the caller to make
+			 * sure SPI is idle before doing shutdown.
+			 *
+			 * Fall through and do the same processing as
+			 * RGMII/GMII.
+			 */
+			fallthrough;
+		case CVMX_HELPER_INTERFACE_MODE_GMII:
+		case CVMX_HELPER_INTERFACE_MODE_RGMII:
+			/* Disable outermost RX at the ASX block */
+			csr_wr(CVMX_ASXX_RX_PRT_EN(interface), 0);
+			num_ports = cvmx_helper_ports_on_interface(xiface);
+			if (num_ports > 4)
+				num_ports = 4;
+			for (index = 0; index < num_ports; index++) {
+				union cvmx_gmxx_prtx_cfg gmx_cfg;
+
+				if (!cvmx_helper_is_port_valid(interface, index))
+					continue;
+				gmx_cfg.u64 = csr_rd(CVMX_GMXX_PRTX_CFG(index, interface));
+				gmx_cfg.s.en = 0;
+				csr_wr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64);
+				/* Poll the GMX state machine waiting for it to become idle */
+				csr_wr(CVMX_NPI_DBG_SELECT,
+				       interface * 0x800 + index * 0x100 + 0x880);
+				if (CVMX_WAIT_FOR_FIELD64(CVMX_DBG_DATA, union cvmx_dbg_data,
+							  data & 7, ==, 0, timeout * 1000000)) {
+					debug("GMX RX path timeout waiting for idle\n");
+					result = -1;
+				}
+				if (CVMX_WAIT_FOR_FIELD64(CVMX_DBG_DATA, union cvmx_dbg_data,
+							  data & 0xf, ==, 0, timeout * 1000000)) {
+					debug("GMX TX path timeout waiting for idle\n");
+					result = -1;
+				}
+			}
+			/* Disable outermost TX at the ASX block */
+			csr_wr(CVMX_ASXX_TX_PRT_EN(interface), 0);
+			/* Disable interrupts for interface */
+			csr_wr(CVMX_ASXX_INT_EN(interface), 0);
+			csr_wr(CVMX_GMXX_TX_INT_EN(interface), 0);
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_XAUI:
+		case CVMX_HELPER_INTERFACE_MODE_RXAUI:
+		case CVMX_HELPER_INTERFACE_MODE_SGMII:
+		case CVMX_HELPER_INTERFACE_MODE_QSGMII:
+		case CVMX_HELPER_INTERFACE_MODE_PICMG:
+			num_ports = cvmx_helper_ports_on_interface(xiface);
+			if (num_ports > 4)
+				num_ports = 4;
+			for (index = 0; index < num_ports; index++) {
+				union cvmx_gmxx_prtx_cfg gmx_cfg;
+
+				if (!cvmx_helper_is_port_valid(interface, index))
+					continue;
+				gmx_cfg.u64 = csr_rd(CVMX_GMXX_PRTX_CFG(index, interface));
+				gmx_cfg.s.en = 0;
+				csr_wr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64);
+				if (CVMX_WAIT_FOR_FIELD64(CVMX_GMXX_PRTX_CFG(index, interface),
+							  union cvmx_gmxx_prtx_cfg, rx_idle, ==, 1,
+							  timeout * 1000000)) {
+					debug("GMX RX path timeout waiting for idle\n");
+					result = -1;
+				}
+				if (CVMX_WAIT_FOR_FIELD64(CVMX_GMXX_PRTX_CFG(index, interface),
+							  union cvmx_gmxx_prtx_cfg, tx_idle, ==, 1,
+							  timeout * 1000000)) {
+					debug("GMX TX path timeout waiting for idle\n");
+					result = -1;
+				}
+				/* For SGMII some PHYs require that the PCS
+				 * interface be powered down and reset (i.e.
+				 * Atheros/Qualcomm PHYs).
+				 */
+				if (cvmx_helper_interface_get_mode(interface) ==
+				    CVMX_HELPER_INTERFACE_MODE_SGMII) {
+					u64 reg;
+
+					reg = CVMX_PCSX_MRX_CONTROL_REG(index, interface);
+					/* Power down the interface */
+					control_reg.u64 = csr_rd(reg);
+					control_reg.s.pwr_dn = 1;
+					csr_wr(reg, control_reg.u64);
+					csr_rd(reg);
+				}
+			}
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_AGL: {
+			int port = cvmx_helper_agl_get_port(interface);
+			union cvmx_agl_gmx_prtx_cfg agl_gmx_cfg;
+
+			agl_gmx_cfg.u64 = csr_rd(CVMX_AGL_GMX_PRTX_CFG(port));
+			agl_gmx_cfg.s.en = 0;
+			csr_wr(CVMX_AGL_GMX_PRTX_CFG(port), agl_gmx_cfg.u64);
+			if (CVMX_WAIT_FOR_FIELD64(CVMX_AGL_GMX_PRTX_CFG(port),
+						  union cvmx_agl_gmx_prtx_cfg, rx_idle, ==, 1,
+						  timeout * 1000000)) {
+				debug("AGL RX path timeout waiting for idle\n");
+				result = -1;
+			}
+			if (CVMX_WAIT_FOR_FIELD64(CVMX_AGL_GMX_PRTX_CFG(port),
+						  union cvmx_agl_gmx_prtx_cfg, tx_idle, ==, 1,
+						  timeout * 1000000)) {
+				debug("AGL TX path timeout waiting for idle\n");
+				result = -1;
+			}
+		} break;
+		default:
+			break;
+		}
+	}
+
+	/* Step 4: Retrieve all packets from the POW and free them */
+	while ((work = cvmx_pow_work_request_sync(CVMX_POW_WAIT))) {
+		cvmx_helper_free_packet_data(work);
+		cvmx_fpa1_free(work, wqe_pool, 0);
+	}
+
+	/* Step 5 */
+	cvmx_ipd_disable();
+
+	/*
+	 * Step 6: Drain all prefetched buffers from IPD/PIP. Note that IPD/PIP
+	 * have not been reset yet
+	 */
+	__cvmx_ipd_free_ptr();
+
+	/* Step 7: Free the PKO command buffers and put PKO in reset */
+	cvmx_pko_shutdown();
+
+	/* Step 8: Disable MAC address filtering */
+	for (interface = 0; interface < num_interfaces; interface++) {
+		int xiface = cvmx_helper_node_interface_to_xiface(node, interface);
+
+		switch (cvmx_helper_interface_get_mode(interface)) {
+		case CVMX_HELPER_INTERFACE_MODE_DISABLED:
+		case CVMX_HELPER_INTERFACE_MODE_PCIE:
+		case CVMX_HELPER_INTERFACE_MODE_SRIO:
+		case CVMX_HELPER_INTERFACE_MODE_ILK:
+		case CVMX_HELPER_INTERFACE_MODE_NPI:
+		case CVMX_HELPER_INTERFACE_MODE_LOOP:
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_XAUI:
+		case CVMX_HELPER_INTERFACE_MODE_RXAUI:
+		case CVMX_HELPER_INTERFACE_MODE_GMII:
+		case CVMX_HELPER_INTERFACE_MODE_RGMII:
+		case CVMX_HELPER_INTERFACE_MODE_SPI:
+		case CVMX_HELPER_INTERFACE_MODE_SGMII:
+		case CVMX_HELPER_INTERFACE_MODE_QSGMII:
+		case CVMX_HELPER_INTERFACE_MODE_PICMG:
+			num_ports = cvmx_helper_ports_on_interface(xiface);
+			if (num_ports > 4)
+				num_ports = 4;
+			for (index = 0; index < num_ports; index++) {
+				if (!cvmx_helper_is_port_valid(interface, index))
+					continue;
+				csr_wr(CVMX_GMXX_RXX_ADR_CTL(index, interface), 1);
+				csr_wr(CVMX_GMXX_RXX_ADR_CAM_EN(index, interface), 0);
+				csr_wr(CVMX_GMXX_RXX_ADR_CAM0(index, interface), 0);
+				csr_wr(CVMX_GMXX_RXX_ADR_CAM1(index, interface), 0);
+				csr_wr(CVMX_GMXX_RXX_ADR_CAM2(index, interface), 0);
+				csr_wr(CVMX_GMXX_RXX_ADR_CAM3(index, interface), 0);
+				csr_wr(CVMX_GMXX_RXX_ADR_CAM4(index, interface), 0);
+				csr_wr(CVMX_GMXX_RXX_ADR_CAM5(index, interface), 0);
+			}
+			break;
+		case CVMX_HELPER_INTERFACE_MODE_AGL: {
+			int port = cvmx_helper_agl_get_port(interface);
+
+			csr_wr(CVMX_AGL_GMX_RXX_ADR_CTL(port), 1);
+			csr_wr(CVMX_AGL_GMX_RXX_ADR_CAM_EN(port), 0);
+			csr_wr(CVMX_AGL_GMX_RXX_ADR_CAM0(port), 0);
+			csr_wr(CVMX_AGL_GMX_RXX_ADR_CAM1(port), 0);
+			csr_wr(CVMX_AGL_GMX_RXX_ADR_CAM2(port), 0);
+			csr_wr(CVMX_AGL_GMX_RXX_ADR_CAM3(port), 0);
+			csr_wr(CVMX_AGL_GMX_RXX_ADR_CAM4(port), 0);
+			csr_wr(CVMX_AGL_GMX_RXX_ADR_CAM5(port), 0);
+		} break;
+		default:
+			break;
+		}
+	}
+
+	/*
+	 * Step 9: Drain all FPA buffers out of pool 0 before we reset
+	 * IPD/PIP.  This is needed to keep IPD_QUE0_FREE_PAGE_CNT in
+	 * sync. We temporarily keep the buffers in the pool0_buffers
+	 * list.
+	 */
+	pool0_buffers = NULL;
+	pool0_buffers_tail = NULL;
+	while (1) {
+		struct cvmx_buffer_list *buffer = cvmx_fpa1_alloc(0);
+
+		if (buffer) {
+			buffer->next = NULL;
+
+			if (!pool0_buffers)
+				pool0_buffers = buffer;
+			else
+				pool0_buffers_tail->next = buffer;
+
+			pool0_buffers_tail = buffer;
+		} else {
+			break;
+		}
+	}
+
+	/* Step 10: Reset IPD and PIP */
+	ipd_ctl_status.u64 = csr_rd(CVMX_IPD_CTL_STATUS);
+	ipd_ctl_status.s.reset = 1;
+	csr_wr(CVMX_IPD_CTL_STATUS, ipd_ctl_status.u64);
+
+	/* Make sure IPD has finished reset. */
+	if (OCTEON_IS_OCTEON2() || OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+		if (CVMX_WAIT_FOR_FIELD64(CVMX_IPD_CTL_STATUS, union cvmx_ipd_ctl_status, rst_done,
+					  ==, 0, 1000)) {
+			debug("IPD reset timeout waiting for idle\n");
+			result = -1;
+		}
+	}
+
+	/* Step 11: Restore the FPA buffers into pool 0 */
+	while (pool0_buffers) {
+		struct cvmx_buffer_list *n = pool0_buffers->next;
+
+		cvmx_fpa1_free(pool0_buffers, 0, 0);
+		pool0_buffers = n;
+	}
+
+	/* Step 12: Release interface structures */
+	__cvmx_helper_shutdown_interfaces();
+
+	return result;
+}
+
+/**
+ * Does core local shutdown of packet io
+ *
+ * @return Zero on success, non-zero on failure
+ */
+int cvmx_helper_shutdown_packet_io_local(void)
+{
+	/*
+	 * Currently there is nothing to do per core. This may change
+	 * in the future.
+	 */
+	return 0;
+}
+
+/**
+ * Auto configure an IPD/PKO port link state and speed. This
+ * function basically does the equivalent of:
+ * cvmx_helper_link_set(ipd_port, cvmx_helper_link_get(ipd_port));
+ *
+ * @param xipd_port IPD/PKO port to auto configure
+ *
+ * @return Link state after configure
+ */
+cvmx_helper_link_info_t cvmx_helper_link_autoconf(int xipd_port)
+{
+	cvmx_helper_link_info_t link_info;
+	int xiface = cvmx_helper_get_interface_num(xipd_port);
+	int index = cvmx_helper_get_interface_index_num(xipd_port);
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	int interface = xi.interface;
+
+	if (interface == -1 || index == -1 || index >= cvmx_helper_ports_on_interface(xiface)) {
+		link_info.u64 = 0;
+		return link_info;
+	}
+
+	link_info = cvmx_helper_link_get(xipd_port);
+	if (link_info.u64 == (__cvmx_helper_get_link_info(xiface, index)).u64)
+		return link_info;
+
+	if (!link_info.s.link_up)
+		cvmx_error_disable_group(CVMX_ERROR_GROUP_ETHERNET, xipd_port);
+
+	/* If we fail to set the link speed, port_link_info will not change */
+	cvmx_helper_link_set(xipd_port, link_info);
+
+	if (link_info.s.link_up)
+		cvmx_error_enable_group(CVMX_ERROR_GROUP_ETHERNET, xipd_port);
+
+	return link_info;
+}
+
+/**
+ * Return the link state of an IPD/PKO port as returned by
+ * auto negotiation. The result of this function may not match
+ * Octeon's link config if auto negotiation has changed since
+ * the last call to cvmx_helper_link_set().
+ *
+ * @param xipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t cvmx_helper_link_get(int xipd_port)
+{
+	cvmx_helper_link_info_t result;
+	int xiface = cvmx_helper_get_interface_num(xipd_port);
+	int index = cvmx_helper_get_interface_index_num(xipd_port);
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	struct cvmx_fdt_sfp_info *sfp_info;
+
+	/*
+	 * The default result will be a down link unless the code
+	 * below changes it.
+	 */
+	result.u64 = 0;
+
+	if (__cvmx_helper_xiface_is_null(xiface) || index == -1 ||
+	    index >= cvmx_helper_ports_on_interface(xiface)) {
+		return result;
+	}
+
+	if (iface_node_ops[xi.node][xi.interface]->link_get)
+		result = iface_node_ops[xi.node][xi.interface]->link_get(xipd_port);
+
+	if (xipd_port >= 0) {
+		cvmx_helper_update_link_led(xiface, index, result);
+
+		sfp_info = cvmx_helper_cfg_get_sfp_info(xiface, index);
+
+		while (sfp_info) {
+			if ((!result.s.link_up || (result.s.link_up && sfp_info->last_mod_abs)))
+				cvmx_sfp_check_mod_abs(sfp_info, sfp_info->mod_abs_data);
+			sfp_info = sfp_info->next_iface_sfp;
+		}
+	}
+
+	return result;
+}
+
+/**
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead.
+ *
+ * @param xipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_helper_link_set(int xipd_port, cvmx_helper_link_info_t link_info)
+{
+	int result = -1;
+	int xiface = cvmx_helper_get_interface_num(xipd_port);
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	int index = cvmx_helper_get_interface_index_num(xipd_port);
+
+	if (__cvmx_helper_xiface_is_null(xiface) || index == -1 ||
+	    index >= cvmx_helper_ports_on_interface(xiface))
+		return -1;
+
+	if (iface_node_ops[xi.node][xi.interface]->link_set)
+		result = iface_node_ops[xi.node][xi.interface]->link_set(xipd_port, link_info);
+
+	/*
+	 * Set the port_link_info here so that the link status is
+	 * updated no matter how cvmx_helper_link_set is called. We
+	 * don't change the value if link_set failed.
+	 */
+	if (result == 0)
+		__cvmx_helper_set_link_info(xiface, index, link_info);
+	return result;
+}
+
+/**
+ * Configure a port for internal and/or external loopback. Internal loopback
+ * causes packets sent by the port to be received by Octeon. External loopback
+ * causes packets received from the wire to sent out again.
+ *
+ * @param xipd_port IPD/PKO port to loopback.
+ * @param enable_internal
+ *                 Non zero if you want internal loopback
+ * @param enable_external
+ *                 Non zero if you want external loopback
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_helper_configure_loopback(int xipd_port, int enable_internal, int enable_external)
+{
+	int result = -1;
+	int xiface = cvmx_helper_get_interface_num(xipd_port);
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+	int index = cvmx_helper_get_interface_index_num(xipd_port);
+
+	if (index >= cvmx_helper_ports_on_interface(xiface))
+		return -1;
+
+	cvmx_helper_interface_get_mode(xiface);
+	if (iface_node_ops[xi.node][xi.interface]->loopback)
+		result = iface_node_ops[xi.node][xi.interface]->loopback(xipd_port, enable_internal,
+									 enable_external);
+
+	return result;
+}
+
+void cvmx_helper_setup_simulator_io_buffer_counts(int node, int num_packet_buffers, int pko_buffers)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_PKI)) {
+		cvmx_helper_pki_set_dflt_pool_buffer(node, num_packet_buffers);
+		cvmx_helper_pki_set_dflt_aura_buffer(node, num_packet_buffers);
+
+	} else {
+		cvmx_ipd_set_packet_pool_buffer_count(num_packet_buffers);
+		cvmx_ipd_set_wqe_pool_buffer_count(num_packet_buffers);
+		cvmx_pko_set_cmd_queue_pool_buffer_count(pko_buffers);
+	}
+}
+
+void *cvmx_helper_mem_alloc(int node, uint64_t alloc_size, uint64_t align)
+{
+	s64 paddr;
+
+	paddr = cvmx_bootmem_phy_alloc_range(alloc_size, align, cvmx_addr_on_node(node, 0ull),
+					     cvmx_addr_on_node(node, 0xffffffffff));
+	if (paddr <= 0ll) {
+		printf("ERROR: %s failed size %u\n", __func__, (unsigned int)alloc_size);
+		return NULL;
+	}
+	return cvmx_phys_to_ptr(paddr);
+}
+
+void cvmx_helper_mem_free(void *buffer, uint64_t size)
+{
+	__cvmx_bootmem_phy_free(cvmx_ptr_to_phys(buffer), size, 0);
+}
+
+int cvmx_helper_qos_config_init(cvmx_qos_proto_t qos_proto, cvmx_qos_config_t *qos_cfg)
+{
+	int i;
+
+	memset(qos_cfg, 0, sizeof(cvmx_qos_config_t));
+	qos_cfg->pkt_mode = CVMX_QOS_PKT_MODE_HWONLY; /* Process PAUSEs in hardware only.*/
+	qos_cfg->pool_mode = CVMX_QOS_POOL_PER_PORT;  /* One Pool per BGX:LMAC.*/
+	qos_cfg->pktbuf_size = 2048;		      /* Fit WQE + MTU in one buffer.*/
+	qos_cfg->aura_size = 1024;	/* 1K buffers typically enough for any application.*/
+	qos_cfg->pko_pfc_en = 1;	/* Enable PKO layout for PFC feature. */
+	qos_cfg->vlan_num = 1;		/* For Stacked VLAN, use 2nd VLAN in the QPG algorithm.*/
+	qos_cfg->qos_proto = qos_proto; /* Use PFC flow-control protocol.*/
+	qos_cfg->qpg_base = -1;		/* QPG Table index is undefined.*/
+	qos_cfg->p_time = 0x60;		/* PAUSE packets time window.*/
+	qos_cfg->p_interval = 0x10;	/* PAUSE packets interval.*/
+	for (i = 0; i < CVMX_QOS_NUM; i++) {
+		qos_cfg->groups[i] = i;	      /* SSO Groups = 0...7 */
+		qos_cfg->group_prio[i] = i;   /* SSO Group priority = QOS. */
+		qos_cfg->drop_thresh[i] = 99; /* 99% of the Aura size.*/
+		qos_cfg->red_thresh[i] = 90;  /* 90% of the Aura size.*/
+		qos_cfg->bp_thresh[i] = 70;   /* 70% of the Aura size.*/
+	}
+	return 0;
+}
+
+int cvmx_helper_qos_port_config_update(int xipdport, cvmx_qos_config_t *qos_cfg)
+{
+	cvmx_user_static_pko_queue_config_t pkocfg;
+	cvmx_xport_t xp = cvmx_helper_ipd_port_to_xport(xipdport);
+	int xiface = cvmx_helper_get_interface_num(xipdport);
+	cvmx_xiface_t xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	/* Configure PKO port for PFC SQ layout: */
+	cvmx_helper_pko_queue_config_get(xp.node, &pkocfg);
+	pkocfg.pknd.pko_cfg_iface[xi.interface].pfc_enable = 1;
+	cvmx_helper_pko_queue_config_set(xp.node, &pkocfg);
+	return 0;
+}
+
+int cvmx_helper_qos_port_setup(int xipdport, cvmx_qos_config_t *qos_cfg)
+{
+	const int channles = CVMX_QOS_NUM;
+	int bufsize = qos_cfg->pktbuf_size;
+	int aura_size = qos_cfg->aura_size;
+	cvmx_xport_t xp = cvmx_helper_ipd_port_to_xport(xipdport);
+	int node = xp.node;
+	int ipdport = xp.port;
+	int port = cvmx_helper_get_interface_index_num(xp.port);
+	int xiface = cvmx_helper_get_interface_num(xipdport);
+	cvmx_xiface_t xi = cvmx_helper_xiface_to_node_interface(xiface);
+	cvmx_fpa3_pool_t gpool;
+	cvmx_fpa3_gaura_t gaura;
+	cvmx_bgxx_cmr_rx_ovr_bp_t ovrbp;
+	struct cvmx_pki_qpg_config qpgcfg;
+	struct cvmx_pki_style_config stcfg, stcfg_dflt;
+	struct cvmx_pki_pkind_config pkcfg;
+	int chan, bpid, group, qpg;
+	int bpen, reden, dropen, passthr, dropthr, bpthr;
+	int nbufs, pkind, style;
+	char name[32];
+
+	if (qos_cfg->pool_mode == CVMX_QOS_POOL_PER_PORT) {
+		/* Allocate and setup packet Pool: */
+		nbufs = aura_size * channles;
+		sprintf(name, "QOS.P%d", ipdport);
+		gpool = cvmx_fpa3_setup_fill_pool(node, -1 /*auto*/, name, bufsize, nbufs, NULL);
+		if (!__cvmx_fpa3_pool_valid(gpool)) {
+			printf("%s: Failed to setup FPA Pool\n", __func__);
+			return -1;
+		}
+		for (chan = 0; chan < channles; chan++)
+			qos_cfg->gpools[chan] = gpool;
+	} else {
+		printf("%s: Invalid pool_mode %d\n", __func__, qos_cfg->pool_mode);
+		return -1;
+	}
+	/* Allocate QPG entries: */
+	qos_cfg->qpg_base = cvmx_pki_qpg_entry_alloc(node, -1 /*auto*/, channles);
+	if (qos_cfg->qpg_base < 0) {
+		printf("%s: Failed to allocate QPG entry\n", __func__);
+		return -1;
+	}
+	for (chan = 0; chan < channles; chan++) {
+		/* Allocate and setup Aura, setup BP threshold: */
+		gpool = qos_cfg->gpools[chan];
+		sprintf(name, "QOS.A%d", ipdport + chan);
+		gaura = cvmx_fpa3_set_aura_for_pool(gpool, -1 /*auto*/, name, bufsize, aura_size);
+		if (!__cvmx_fpa3_aura_valid(gaura)) {
+			printf("%s: Failed to setup FPA Aura for Channel %d\n", __func__, chan);
+			return -1;
+		}
+		qos_cfg->gauras[chan] = gaura;
+		bpen = 1;
+		reden = 1;
+		dropen = 1;
+		dropthr = (qos_cfg->drop_thresh[chan] * 10 * aura_size) / 1000;
+		passthr = (qos_cfg->red_thresh[chan] * 10 * aura_size) / 1000;
+		bpthr = (qos_cfg->bp_thresh[chan] * 10 * aura_size) / 1000;
+		cvmx_fpa3_setup_aura_qos(gaura, reden, passthr, dropthr, bpen, bpthr);
+		cvmx_pki_enable_aura_qos(node, gaura.laura, reden, dropen, bpen);
+
+		/* Allocate BPID, link Aura and Channel using BPID: */
+		bpid = cvmx_pki_bpid_alloc(node, -1 /*auto*/);
+		if (bpid < 0) {
+			printf("%s: Failed to allocate BPID for channel %d\n",
+			       __func__, chan);
+			return -1;
+		}
+		qos_cfg->bpids[chan] = bpid;
+		cvmx_pki_write_aura_bpid(node, gaura.laura, bpid);
+		cvmx_pki_write_channel_bpid(node, ipdport + chan, bpid);
+
+		/* Setup QPG entries: */
+		group = qos_cfg->groups[chan];
+		qpg = qos_cfg->qpg_base + chan;
+		cvmx_pki_read_qpg_entry(node, qpg, &qpgcfg);
+		qpgcfg.port_add = chan;
+		qpgcfg.aura_num = gaura.laura;
+		qpgcfg.grp_ok = (node << CVMX_WQE_GRP_NODE_SHIFT) | group;
+		qpgcfg.grp_bad = (node << CVMX_WQE_GRP_NODE_SHIFT) | group;
+		qpgcfg.grptag_ok = (node << CVMX_WQE_GRP_NODE_SHIFT) | 0;
+		qpgcfg.grptag_bad = (node << CVMX_WQE_GRP_NODE_SHIFT) | 0;
+		cvmx_pki_write_qpg_entry(node, qpg, &qpgcfg);
+	}
+	/* Allocate and setup STYLE: */
+	cvmx_helper_pki_get_dflt_style(node, &stcfg_dflt);
+	style = cvmx_pki_style_alloc(node, -1 /*auto*/);
+	cvmx_pki_read_style_config(node, style, CVMX_PKI_CLUSTER_ALL, &stcfg);
+	stcfg.tag_cfg = stcfg_dflt.tag_cfg;
+	stcfg.parm_cfg.tag_type = CVMX_POW_TAG_TYPE_ORDERED;
+	stcfg.parm_cfg.qpg_qos = CVMX_PKI_QPG_QOS_VLAN;
+	stcfg.parm_cfg.qpg_base = qos_cfg->qpg_base;
+	stcfg.parm_cfg.qpg_port_msb = 0;
+	stcfg.parm_cfg.qpg_port_sh = 0;
+	stcfg.parm_cfg.qpg_dis_grptag = 1;
+	stcfg.parm_cfg.fcs_strip = 1;
+	stcfg.parm_cfg.mbuff_size = bufsize - 64; /* Do not use 100% of the buffer. */
+	stcfg.parm_cfg.force_drop = 0;
+	stcfg.parm_cfg.nodrop = 0;
+	stcfg.parm_cfg.rawdrp = 0;
+	stcfg.parm_cfg.cache_mode = 2; /* 1st buffer in L2 */
+	stcfg.parm_cfg.wqe_vs = qos_cfg->vlan_num;
+	cvmx_pki_write_style_config(node, style, CVMX_PKI_CLUSTER_ALL, &stcfg);
+
+	/* Setup PKIND: */
+	pkind = cvmx_helper_get_pknd(xiface, port);
+	cvmx_pki_read_pkind_config(node, pkind, &pkcfg);
+	pkcfg.cluster_grp = 0; /* OCTEON3 has only one cluster group = 0 */
+	pkcfg.initial_style = style;
+	pkcfg.initial_parse_mode = CVMX_PKI_PARSE_LA_TO_LG;
+	cvmx_pki_write_pkind_config(node, pkind, &pkcfg);
+
+	/* Setup parameters of the QOS packet and enable QOS flow-control: */
+	cvmx_bgx_set_pause_pkt_param(xipdport, 0, 0x0180c2000001, 0x8808, qos_cfg->p_time,
+				     qos_cfg->p_interval);
+	cvmx_bgx_set_flowctl_mode(xipdport, qos_cfg->qos_proto, qos_cfg->pkt_mode);
+
+	/* Enable PKI channel backpressure in the BGX: */
+	ovrbp.u64 = csr_rd_node(node, CVMX_BGXX_CMR_RX_OVR_BP(xi.interface));
+	ovrbp.s.en &= ~(1 << port);
+	ovrbp.s.ign_fifo_bp &= ~(1 << port);
+	csr_wr_node(node, CVMX_BGXX_CMR_RX_OVR_BP(xi.interface), ovrbp.u64);
+	return 0;
+}
+
+int cvmx_helper_qos_sso_setup(int xipdport, cvmx_qos_config_t *qos_cfg)
+{
+	const int channels = CVMX_QOS_NUM;
+	cvmx_sso_grpx_pri_t grppri;
+	int chan, qos, group;
+	cvmx_xport_t xp = cvmx_helper_ipd_port_to_xport(xipdport);
+	int node = xp.node;
+
+	for (chan = 0; chan < channels; chan++) {
+		qos = cvmx_helper_qos2prio(chan);
+		group = qos_cfg->groups[qos];
+		grppri.u64 = csr_rd_node(node, CVMX_SSO_GRPX_PRI(group));
+		grppri.s.pri = qos_cfg->group_prio[chan];
+		csr_wr_node(node, CVMX_SSO_GRPX_PRI(group), grppri.u64);
+	}
+	return 0;
+}
+
+int cvmx_helper_get_chan_e_name(int chan, char *namebuf, int buflen)
+{
+	int n, dpichans;
+
+	if ((unsigned int)chan >= CVMX_PKO3_IPD_NUM_MAX) {
+		printf("%s: Channel %d is out of range (0..4095)\n", __func__, chan);
+		return -1;
+	}
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		dpichans = 64;
+	else
+		dpichans = 128;
+
+	if (chan >= 0 && chan < 64)
+		n = snprintf(namebuf, buflen, "LBK%d", chan);
+	else if (chan >= 0x100 && chan < (0x100 + dpichans))
+		n = snprintf(namebuf, buflen, "DPI%d", chan - 0x100);
+	else if (chan == 0x200)
+		n = snprintf(namebuf, buflen, "NQM");
+	else if (chan >= 0x240 && chan < (0x240 + (1 << 1) + 2))
+		n = snprintf(namebuf, buflen, "SRIO%d:%d", (chan - 0x240) >> 1,
+			     (chan - 0x240) & 0x1);
+	else if (chan >= 0x400 && chan < (0x400 + (1 << 8) + 256))
+		n = snprintf(namebuf, buflen, "ILK%d:%d", (chan - 0x400) >> 8,
+			     (chan - 0x400) & 0xFF);
+	else if (chan >= 0x800 && chan < (0x800 + (5 << 8) + (3 << 4) + 16))
+		n = snprintf(namebuf, buflen, "BGX%d:%d:%d", (chan - 0x800) >> 8,
+			     ((chan - 0x800) >> 4) & 0x3, (chan - 0x800) & 0xF);
+	else
+		n = snprintf(namebuf, buflen, "--");
+	return n;
+}
+
+#ifdef CVMX_DUMP_DIAGNOSTICS
+void cvmx_helper_dump_for_diagnostics(int node)
+{
+	if (!(OCTEON_IS_OCTEON3() && !OCTEON_IS_MODEL(OCTEON_CN70XX))) {
+		printf("Diagnostics are not implemented for this model\n");
+		return;
+	}
+#ifdef CVMX_DUMP_GSER
+	{
+		int qlm, num_qlms;
+
+		num_qlms = cvmx_qlm_get_num();
+		for (qlm = 0; qlm < num_qlms; qlm++) {
+			cvmx_dump_gser_config_node(node, qlm);
+			cvmx_dump_gser_status_node(node, qlm);
+		}
+	}
+#endif
+#ifdef CVMX_DUMP_BGX
+	{
+		int bgx;
+
+		for (bgx = 0; bgx < CVMX_HELPER_MAX_GMX; bgx++) {
+			cvmx_dump_bgx_config_node(node, bgx);
+			cvmx_dump_bgx_status_node(node, bgx);
+		}
+	}
+#endif
+#ifdef CVMX_DUMP_PKI
+	cvmx_pki_config_dump(node);
+	cvmx_pki_stats_dump(node);
+#endif
+#ifdef CVMX_DUMP_PKO
+	cvmx_helper_pko3_config_dump(node);
+	cvmx_helper_pko3_stats_dump(node);
+#endif
+#ifdef CVMX_DUMO_SSO
+	cvmx_sso_config_dump(node);
+#endif
+}
+#endif
diff --git a/arch/mips/mach-octeon/cvmx-pcie.c b/arch/mips/mach-octeon/cvmx-pcie.c
new file mode 100644
index 0000000..f42d44c
--- /dev/null
+++ b/arch/mips/mach-octeon/cvmx-pcie.c
@@ -0,0 +1,2487 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to PCIe as a host(RC) or target(EP)
+ */
+
+#include <log.h>
+#include <linux/delay.h>
+#include <linux/libfdt.h>
+
+#include <mach/cvmx-regs.h>
+#include <mach/octeon-model.h>
+#include <mach/cvmx-fuse.h>
+#include <mach/octeon-feature.h>
+#include <mach/cvmx-qlm.h>
+#include <mach/octeon_qlm.h>
+
+#include <mach/cvmx-helper-fdt.h>
+
+#include <mach/cvmx-regs.h>
+#include <mach/octeon-model.h>
+#include <mach/cvmx-fuse.h>
+#include <mach/octeon-feature.h>
+#include <mach/cvmx-qlm.h>
+#include <mach/octeon_qlm.h>
+#include <mach/cvmx-pcie.h>
+#include <mach/cvmx-error.h>
+#include <mach/cvmx-helper.h>
+#include <mach/cvmx-helper-util.h>
+#include <mach/cvmx-bgxx-defs.h>
+#include <mach/cvmx-ciu-defs.h>
+#include <mach/cvmx-gmxx-defs.h>
+#include <mach/cvmx-gserx-defs.h>
+#include <mach/cvmx-mio-defs.h>
+#include <mach/cvmx-pciercx-defs.h>
+#include <mach/cvmx-pcieepx-defs.h>
+#include <mach/cvmx-pemx-defs.h>
+#include <mach/cvmx-pexp-defs.h>
+#include <mach/cvmx-rst-defs.h>
+#include <mach/cvmx-sata-defs.h>
+#include <mach/cvmx-sli-defs.h>
+#include <mach/cvmx-sriomaintx-defs.h>
+#include <mach/cvmx-sriox-defs.h>
+
+#include <mach/cvmx-dpi-defs.h>
+#include <mach/cvmx-sli-defs.h>
+#include <mach/cvmx-dtx-defs.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define MRRS_CN6XXX 3 /* 1024 byte Max Read Request Size */
+#define MPS_CN6XXX  0 /* 128 byte Max Packet Size (Limit of most PCs) */
+
+/* Endian swap mode. */
+#define _CVMX_PCIE_ES 1
+
+#define CVMX_READ_CSR(addr)		   csr_rd_node(node, addr)
+#define CVMX_WRITE_CSR(addr, val)	   csr_wr_node(node, addr, val)
+#define CVMX_PCIE_CFGX_READ(p, addr)	   cvmx_pcie_cfgx_read_node(node, p, addr)
+#define CVMX_PCIE_CFGX_WRITE(p, addr, val) cvmx_pcie_cfgx_write_node(node, p, addr, val)
+
+/* #define DEBUG_PCIE */
+
+/* Delay after link up, before issuing first configuration read */
+#define PCIE_DEVICE_READY_WAIT_DELAY_MICROSECONDS 700000
+
+/* Recommended Preset Vector: Drop Preset 10    */
+int pcie_preset_vec[4] = { 0x593, 0x593, 0x593, 0x593 };
+
+/* Number of LTSSM transitions to record, must be a power of 2 */
+#define LTSSM_HISTORY_SIZE 64
+#define MAX_RETRIES	   2
+
+bool pcie_link_initialized[CVMX_MAX_NODES][CVMX_PCIE_MAX_PORTS];
+int cvmx_primary_pcie_bus_number = 1;
+
+static uint32_t __cvmx_pcie_config_read32(int node, int pcie_port, int bus, int dev, int func,
+					  int reg, int lst);
+
+/**
+ * Return the Core virtual base address for PCIe IO access. IOs are
+ * read/written as an offset from this address.
+ *
+ * @param pcie_port PCIe port the IO is for
+ *
+ * @return 64bit Octeon IO base address for read/write
+ */
+uint64_t cvmx_pcie_get_io_base_address(int pcie_port)
+{
+	cvmx_pcie_address_t pcie_addr;
+
+	pcie_addr.u64 = 0;
+	pcie_addr.io.upper = 0;
+	pcie_addr.io.io = 1;
+	pcie_addr.io.did = 3;
+	pcie_addr.io.subdid = 2;
+	pcie_addr.io.node = (pcie_port >> 4) & 0x3;
+	pcie_addr.io.es = _CVMX_PCIE_ES;
+	pcie_addr.io.port = (pcie_port & 0x3);
+	return pcie_addr.u64;
+}
+
+/**
+ * Size of the IO address region returned at address
+ * cvmx_pcie_get_io_base_address()
+ *
+ * @param pcie_port PCIe port the IO is for
+ *
+ * @return Size of the IO window
+ */
+uint64_t cvmx_pcie_get_io_size(int pcie_port)
+{
+	return 1ull << 32;
+}
+
+/**
+ * Return the Core virtual base address for PCIe MEM access. Memory is
+ * read/written as an offset from this address.
+ *
+ * @param pcie_port PCIe port the IO is for
+ *
+ * @return 64bit Octeon IO base address for read/write
+ */
+uint64_t cvmx_pcie_get_mem_base_address(int pcie_port)
+{
+	cvmx_pcie_address_t pcie_addr;
+
+	pcie_addr.u64 = 0;
+	pcie_addr.mem.upper = 0;
+	pcie_addr.mem.io = 1;
+	pcie_addr.mem.did = 3;
+	pcie_addr.mem.subdid = 3 + (pcie_port & 0x3);
+	pcie_addr.mem.node = (pcie_port >> 4) & 0x3;
+	return pcie_addr.u64;
+}
+
+/**
+ * Size of the Mem address region returned at address
+ * cvmx_pcie_get_mem_base_address()
+ *
+ * @param pcie_port PCIe port the IO is for
+ *
+ * @return Size of the Mem window
+ */
+uint64_t cvmx_pcie_get_mem_size(int pcie_port)
+{
+	return 1ull << 36;
+}
+
+/**
+ * @INTERNAL
+ * Return the QLM number for the PCIE port.
+ *
+ * @param  pcie_port  QLM number to return for.
+ *
+ * @return QLM number.
+ */
+static int __cvmx_pcie_get_qlm(int node, int pcie_port)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX)) {
+		cvmx_pemx_cfg_t pem_cfg;
+		cvmx_pemx_qlm_t pem_qlm;
+		cvmx_gserx_cfg_t gserx_cfg;
+
+		switch (pcie_port) {
+		case 0: /* PEM0 */
+			gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(0));
+			if (gserx_cfg.s.pcie)
+				return 0; /* PEM0 is on QLM0 and possibly QLM1 */
+			else
+				return -1; /* PEM0 is disabled */
+		case 1:			   /* PEM1 */
+			pem_cfg.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG(0));
+			gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(1));
+			if (!pem_cfg.cn78xx.lanes8 && gserx_cfg.s.pcie)
+				return 1; /* PEM1 is on QLM 1 */
+			else
+				return -1; /* PEM1 is disabled */
+		case 2:			   /* PEM2 */
+			pem_qlm.u64 = CVMX_READ_CSR(CVMX_PEMX_QLM(2));
+			if (pem_qlm.cn73xx.pemdlmsel == 1) {
+				gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(5));
+				if (gserx_cfg.s.pcie)
+					return 5; /* PEM2 is on DLM5 */
+				else
+					return -1; /* PEM2 is disabled */
+			}
+			gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(2));
+			if (gserx_cfg.s.pcie)
+				return 2; /* PEM2 is on QLM2 and possibly QLM3 */
+			else
+				return -1; /* PEM2 is disabled */
+		case 3:			   /* PEM3 */
+			pem_qlm.u64 = CVMX_READ_CSR(CVMX_PEMX_QLM(3));
+			if (pem_qlm.cn73xx.pemdlmsel == 1) {
+				gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(6));
+				if (gserx_cfg.s.pcie)
+					return 6; /* PEM2 is on DLM5 */
+				else
+					return -1; /* PEM2 is disabled */
+			}
+			pem_cfg.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG(2));
+			gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(3));
+			if (!pem_cfg.cn78xx.lanes8 && gserx_cfg.s.pcie)
+				return 3; /* PEM2 is on QLM2 and possibly QLM3 */
+			else
+				return -1; /* PEM2 is disabled */
+		default:
+			printf("Invalid %d PCIe port\n", pcie_port);
+			return -2;
+		}
+	} else if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+		cvmx_pemx_cfg_t pem_cfg;
+		cvmx_gserx_cfg_t gserx_cfg;
+
+		switch (pcie_port) {
+		case 0:
+			gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(0));
+			if (gserx_cfg.s.pcie)
+				return 0; /* PEM0 is on QLM0 and possibly QLM1 */
+			else
+				return -1; /* PEM0 is disabled */
+		case 1:			   /* PEM1 */
+			pem_cfg.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG(0));
+			gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(1));
+			if (!pem_cfg.cn78xx.lanes8 && gserx_cfg.s.pcie)
+				return 1; /* PEM1 is on QLM 1 */
+			else
+				return -1; /* PEM1 is disabled */
+		case 2:			   /* PEM2 */
+			gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(2));
+			if (gserx_cfg.s.pcie)
+				return 2; /* PEM2 is on QLM2 and possibly QLM3 */
+			else
+				return -1; /* PEM2 is disabled */
+		case 3:			   /* PEM3 */
+		{
+			cvmx_gserx_cfg_t gser4_cfg;
+
+			pem_cfg.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG(2));
+			gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(3));
+			gser4_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(4));
+			if (pem_cfg.cn78xx.lanes8) {
+				if (gser4_cfg.s.pcie)
+					return 4; /* PEM3 is on QLM4 */
+				else
+					return -1; /* PEM3 is disabled */
+			} else {
+				if (gserx_cfg.s.pcie)
+					return 3; /* PEM3 is on QLM3 */
+				else if (gser4_cfg.s.pcie)
+					return 4; /* PEM3 is on QLM4 */
+				else
+					return -1; /* PEM3 is disabled */
+			}
+		}
+		default:
+			printf("Invalid %d PCIe port\n", pcie_port);
+			return -1;
+		}
+	} else if (OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+		enum cvmx_qlm_mode mode1 = cvmx_qlm_get_mode(1);
+		enum cvmx_qlm_mode mode2 = cvmx_qlm_get_mode(2);
+
+		switch (pcie_port) {
+		case 0: /* PCIe0 can be DLM1 with 1, 2 or 4 lanes */
+			if (mode1 == CVMX_QLM_MODE_PCIE ||     /* Using DLM 1-2 */
+			    mode1 == CVMX_QLM_MODE_PCIE_1X2 || /* Using DLM 1 */
+			    mode1 == CVMX_QLM_MODE_PCIE_2X1 || /* Using DLM 1, lane 0 */
+			    mode1 == CVMX_QLM_MODE_PCIE_1X1) /* Using DLM 1, l0, l1 not used */
+				return 1;
+			else
+				return -1;
+		case 1: /* PCIe1 can be DLM1 1 lane(1), DLM2 1 lane(0) or 2 lanes(0-1) */
+			if (mode1 == CVMX_QLM_MODE_PCIE_2X1)
+				return 1;
+			else if (mode2 == CVMX_QLM_MODE_PCIE_1X2)
+				return 2;
+			else if (mode2 == CVMX_QLM_MODE_PCIE_2X1)
+				return 2;
+			else
+				return -1;
+		case 2: /* PCIe2 can be DLM2 1 lanes(1) */
+			if (mode2 == CVMX_QLM_MODE_PCIE_2X1)
+				return 2;
+			else
+				return -1;
+		default: /* Only three PEM blocks */
+			return -1;
+		}
+	} else if (OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+		cvmx_gserx_cfg_t gserx_cfg;
+
+		switch (pcie_port) {
+		case 0: /* PEM0 */
+			gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(0));
+			if (gserx_cfg.s.pcie)
+				return 0; /* PEM0 is on QLM0 and possibly QLM1 */
+			else
+				return -1; /* PEM0 is disabled */
+		case 1:			   /* PEM1 */
+			gserx_cfg.u64 = CVMX_READ_CSR(CVMX_GSERX_CFG(1));
+			if (gserx_cfg.s.pcie)
+				return 1; /* PEM1 is on DLM1 */
+			else
+				return -1; /* PEM1 is disabled */
+		default:
+			return -1;
+		}
+	}
+	return -1;
+}
+
+/**
+ * @INTERNAL
+ * Initialize the RC config space CSRs
+ *
+ * @param node      node
+ * @param pcie_port PCIe port to initialize
+ */
+static void __cvmx_pcie_rc_initialize_config_space(int node, int pcie_port)
+{
+	/* Max Payload Size (PCIE*_CFG030[MPS]) */
+	/* Max Read Request Size (PCIE*_CFG030[MRRS]) */
+	/* Relaxed-order, no-snoop enables (PCIE*_CFG030[RO_EN,NS_EN] */
+	/* Error Message Enables (PCIE*_CFG030[CE_EN,NFE_EN,FE_EN,UR_EN]) */
+	{
+		cvmx_pciercx_cfg030_t pciercx_cfg030;
+
+		pciercx_cfg030.u32 = CVMX_PCIE_CFGX_READ(pcie_port,
+							 CVMX_PCIERCX_CFG030(pcie_port));
+		pciercx_cfg030.s.mps = MPS_CN6XXX;
+		pciercx_cfg030.s.mrrs = MRRS_CN6XXX;
+		/*
+		 * Enable relaxed order processing. This will allow devices
+		 * to affect read response ordering
+		 */
+		pciercx_cfg030.s.ro_en = 1;
+		/* Enable no snoop processing. Not used by Octeon */
+		pciercx_cfg030.s.ns_en = 1;
+		/* Correctable error reporting enable. */
+		pciercx_cfg030.s.ce_en = 1;
+		/* Non-fatal error reporting enable. */
+		pciercx_cfg030.s.nfe_en = 1;
+		/* Fatal error reporting enable. */
+		pciercx_cfg030.s.fe_en = 1;
+		/* Unsupported request reporting enable. */
+		pciercx_cfg030.s.ur_en = 1;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG030(pcie_port),
+				     pciercx_cfg030.u32);
+	}
+
+	/*
+	 * Max Payload Size (DPI_SLI_PRTX_CFG[MPS]) must match
+	 * PCIE*_CFG030[MPS]
+	 */
+	/*
+	 * Max Read Request Size (DPI_SLI_PRTX_CFG[MRRS]) must not exceed
+	 * PCIE*_CFG030[MRRS]
+	 */
+	cvmx_dpi_sli_prtx_cfg_t prt_cfg;
+	cvmx_sli_s2m_portx_ctl_t sli_s2m_portx_ctl;
+
+	prt_cfg.u64 = CVMX_READ_CSR(CVMX_DPI_SLI_PRTX_CFG(pcie_port));
+	prt_cfg.s.mps = MPS_CN6XXX;
+	prt_cfg.s.mrrs = MRRS_CN6XXX;
+	/* Max outstanding load request. */
+	prt_cfg.s.molr = 32;
+	CVMX_WRITE_CSR(CVMX_DPI_SLI_PRTX_CFG(pcie_port), prt_cfg.u64);
+
+	sli_s2m_portx_ctl.u64 = CVMX_READ_CSR(CVMX_PEXP_SLI_S2M_PORTX_CTL(pcie_port));
+	if (!(OCTEON_IS_MODEL(OCTEON_CN78XX) || OCTEON_IS_MODEL(OCTEON_CN73XX) ||
+	      OCTEON_IS_MODEL(OCTEON_CNF75XX)))
+		sli_s2m_portx_ctl.cn61xx.mrrs = MRRS_CN6XXX;
+	CVMX_WRITE_CSR(CVMX_PEXP_SLI_S2M_PORTX_CTL(pcie_port), sli_s2m_portx_ctl.u64);
+
+	/* ECRC Generation (PCIE*_CFG070[GE,CE]) */
+	{
+		cvmx_pciercx_cfg070_t pciercx_cfg070;
+
+		pciercx_cfg070.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG070(pcie_port));
+		pciercx_cfg070.s.ge = 1; /* ECRC generation enable. */
+		pciercx_cfg070.s.ce = 1; /* ECRC check enable. */
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG070(pcie_port), pciercx_cfg070.u32);
+	}
+
+	/* Access Enables (PCIE*_CFG001[MSAE,ME]) */
+	/* ME and MSAE should always be set. */
+	/* Interrupt Disable (PCIE*_CFG001[I_DIS]) */
+	/* System Error Message Enable (PCIE*_CFG001[SEE]) */
+	{
+		cvmx_pciercx_cfg001_t pciercx_cfg001;
+
+		pciercx_cfg001.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG001(pcie_port));
+		pciercx_cfg001.s.msae = 1;  /* Memory space enable. */
+		pciercx_cfg001.s.me = 1;    /* Bus master enable. */
+		pciercx_cfg001.s.i_dis = 1; /* INTx assertion disable. */
+		pciercx_cfg001.s.see = 1;   /* SERR# enable */
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG001(pcie_port), pciercx_cfg001.u32);
+	}
+
+	/* Advanced Error Recovery Message Enables */
+	/* (PCIE*_CFG066,PCIE*_CFG067,PCIE*_CFG069) */
+	CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG066(pcie_port), 0);
+	/* Use CVMX_PCIERCX_CFG067 hardware default */
+	CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG069(pcie_port), 0);
+
+	/* Active State Power Management (PCIE*_CFG032[ASLPC]) */
+	{
+		cvmx_pciercx_cfg032_t pciercx_cfg032;
+
+		pciercx_cfg032.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG032(pcie_port));
+		pciercx_cfg032.s.aslpc = 0; /* Active state Link PM control. */
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG032(pcie_port), pciercx_cfg032.u32);
+	}
+
+	/* Link Width Mode (PCIERCn_CFG452[LME]) - Set during
+	 * cvmx_pcie_rc_initialize_link()
+	 */
+	/* Primary Bus Number (PCIERCn_CFG006[PBNUM]) */
+	{
+		/* We set the primary bus number to 1 so IDT bridges are happy.
+		 * They don't like zero
+		 */
+		cvmx_pciercx_cfg006_t pciercx_cfg006;
+
+		pciercx_cfg006.u32 = 0;
+		pciercx_cfg006.s.pbnum = cvmx_primary_pcie_bus_number;
+		pciercx_cfg006.s.sbnum = cvmx_primary_pcie_bus_number;
+		pciercx_cfg006.s.subbnum = cvmx_primary_pcie_bus_number;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG006(pcie_port), pciercx_cfg006.u32);
+	}
+
+	/* Memory-mapped I/O BAR (PCIERCn_CFG008) */
+	/* Most applications should disable the memory-mapped I/O BAR by */
+	/* setting PCIERCn_CFG008[ML_ADDR] < PCIERCn_CFG008[MB_ADDR] */
+	{
+		cvmx_pciercx_cfg008_t pciercx_cfg008;
+
+		pciercx_cfg008.u32 = 0;
+		pciercx_cfg008.s.mb_addr = 0x100;
+		pciercx_cfg008.s.ml_addr = 0;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG008(pcie_port), pciercx_cfg008.u32);
+	}
+
+	/* Prefetchable BAR (PCIERCn_CFG009,PCIERCn_CFG010,PCIERCn_CFG011) */
+	/* Most applications should disable the prefetchable BAR by setting */
+	/* PCIERCn_CFG011[UMEM_LIMIT],PCIERCn_CFG009[LMEM_LIMIT] < */
+	/* PCIERCn_CFG010[UMEM_BASE],PCIERCn_CFG009[LMEM_BASE] */
+	{
+		cvmx_pciercx_cfg009_t pciercx_cfg009;
+		cvmx_pciercx_cfg010_t pciercx_cfg010;
+		cvmx_pciercx_cfg011_t pciercx_cfg011;
+
+		pciercx_cfg009.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG009(pcie_port));
+		pciercx_cfg010.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG010(pcie_port));
+		pciercx_cfg011.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG011(pcie_port));
+		pciercx_cfg009.s.lmem_base = 0x100;
+		pciercx_cfg009.s.lmem_limit = 0;
+		pciercx_cfg010.s.umem_base = 0x100;
+		pciercx_cfg011.s.umem_limit = 0;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG009(pcie_port), pciercx_cfg009.u32);
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG010(pcie_port), pciercx_cfg010.u32);
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG011(pcie_port), pciercx_cfg011.u32);
+	}
+
+	/* System Error Interrupt Enables (PCIERCn_CFG035[SECEE,SEFEE,SENFEE]) */
+	/* PME Interrupt Enables (PCIERCn_CFG035[PMEIE]) */
+	{
+		cvmx_pciercx_cfg035_t pciercx_cfg035;
+
+		pciercx_cfg035.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG035(pcie_port));
+		pciercx_cfg035.s.secee = 1;  /* System error on correctable error enable. */
+		pciercx_cfg035.s.sefee = 1;  /* System error on fatal error enable. */
+		pciercx_cfg035.s.senfee = 1; /* System error on non-fatal error enable. */
+		pciercx_cfg035.s.pmeie = 1;  /* PME interrupt enable. */
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG035(pcie_port), pciercx_cfg035.u32);
+	}
+
+	/* Advanced Error Recovery Interrupt Enables */
+	/* (PCIERCn_CFG075[CERE,NFERE,FERE]) */
+	{
+		cvmx_pciercx_cfg075_t pciercx_cfg075;
+
+		pciercx_cfg075.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG075(pcie_port));
+		pciercx_cfg075.s.cere = 1;  /* Correctable error reporting enable. */
+		pciercx_cfg075.s.nfere = 1; /* Non-fatal error reporting enable. */
+		pciercx_cfg075.s.fere = 1;  /* Fatal error reporting enable. */
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG075(pcie_port), pciercx_cfg075.u32);
+	}
+
+	/* HP Interrupt Enables (PCIERCn_CFG034[HPINT_EN], */
+	/* PCIERCn_CFG034[DLLS_EN,CCINT_EN]) */
+	{
+		cvmx_pciercx_cfg034_t pciercx_cfg034;
+
+		pciercx_cfg034.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG034(pcie_port));
+		pciercx_cfg034.s.hpint_en = 1; /* Hot-plug interrupt enable. */
+		pciercx_cfg034.s.dlls_en = 1;  /* Data Link Layer state changed enable */
+		pciercx_cfg034.s.ccint_en = 1; /* Command completed interrupt enable. */
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG034(pcie_port), pciercx_cfg034.u32);
+	}
+
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX) || OCTEON_IS_MODEL(OCTEON_CN73XX) ||
+	    OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+		int qlm = __cvmx_pcie_get_qlm(node, pcie_port);
+		int speed = cvmx_qlm_get_gbaud_mhz(qlm);
+		cvmx_pemx_cfg_t pem_cfg;
+		cvmx_pciercx_cfg031_t cfg031;
+		cvmx_pciercx_cfg040_t cfg040;
+		cvmx_pciercx_cfg452_t cfg452;
+		cvmx_pciercx_cfg089_t cfg089;
+		cvmx_pciercx_cfg090_t cfg090;
+		cvmx_pciercx_cfg091_t cfg091;
+		cvmx_pciercx_cfg092_t cfg092;
+		cvmx_pciercx_cfg554_t cfg554;
+
+		/*
+		 * Make sure the PEM agrees with GSERX about the speed
+		 * its going to try
+		 */
+		switch (speed) {
+		case 2500: /* Gen1 */
+			pem_cfg.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG(pcie_port));
+			pem_cfg.s.md = 0;
+			CVMX_WRITE_CSR(CVMX_PEMX_CFG(pcie_port), pem_cfg.u64);
+
+			/* Set the target link speed */
+			cfg040.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG040(pcie_port));
+			cfg040.s.tls = 1;
+			CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG040(pcie_port), cfg040.u32);
+			break;
+		case 5000: /* Gen2 */
+			pem_cfg.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG(pcie_port));
+			pem_cfg.s.md = 1;
+			CVMX_WRITE_CSR(CVMX_PEMX_CFG(pcie_port), pem_cfg.u64);
+
+			/* Set the target link speed */
+			cfg040.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG040(pcie_port));
+			cfg040.s.tls = 2;
+			CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG040(pcie_port), cfg040.u32);
+			break;
+		case 8000: /* Gen3 */
+			pem_cfg.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG(pcie_port));
+			pem_cfg.s.md = 2;
+			CVMX_WRITE_CSR(CVMX_PEMX_CFG(pcie_port), pem_cfg.u64);
+
+			/* Set the target link speed */
+			cfg040.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG040(pcie_port));
+			cfg040.s.tls = 3;
+			CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG040(pcie_port), cfg040.u32);
+			break;
+		default:
+			break;
+		}
+
+		/* Link Width Mode (PCIERCn_CFG452[LME]) */
+		pem_cfg.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG(pcie_port));
+		cfg452.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG452(pcie_port));
+		if (qlm >= 5)
+			cfg452.s.lme = 0x3;
+		else
+			cfg452.s.lme = (pem_cfg.cn78xx.lanes8) ? 0xf : 0x7;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG452(pcie_port), cfg452.u32);
+
+		/* Errata PEM-25990 - Disable ASLPMS */
+		cfg031.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG031(pcie_port));
+		cfg031.s.aslpms = 0;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG031(pcie_port), cfg031.u32);
+
+		/* CFG554.PRV default changed from 16'h7ff to 16'h593. */
+		cfg554.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG554(pcie_port));
+		cfg554.s.prv = pcie_preset_vec[pcie_port];
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG554(pcie_port), cfg554.u32);
+		/* Errata PEM-26189 - Disable the 2ms timer on all chips */
+		cfg554.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG554(pcie_port));
+		cfg554.s.p23td = 1;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG554(pcie_port), cfg554.u32);
+
+		/* Errata PEM-21178 - Change the CFG[089-092] LxUTP & LxDTP defaults. */
+		cfg089.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG089(pcie_port));
+		cfg089.s.l1ddtp = 7;
+		cfg089.s.l1utp = 7;
+		cfg089.s.l0dtp = 7;
+		cfg089.s.l0utp = 7;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG089(pcie_port), cfg089.u32);
+		cfg090.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG090(pcie_port));
+		cfg090.s.l3dtp = 7;
+		cfg090.s.l3utp = 7;
+		cfg090.s.l2dtp = 7;
+		cfg090.s.l2utp = 7;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG090(pcie_port), cfg090.u32);
+		cfg091.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG091(pcie_port));
+		cfg091.s.l5dtp = 7;
+		cfg091.s.l5utp = 7;
+		cfg091.s.l4dtp = 7;
+		cfg091.s.l4utp = 7;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG091(pcie_port), cfg091.u32);
+		cfg092.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG092(pcie_port));
+		cfg092.s.l7dtp = 7;
+		cfg092.s.l7utp = 7;
+		cfg092.s.l6dtp = 7;
+		cfg092.s.l6utp = 7;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG092(pcie_port), cfg092.u32);
+	}
+}
+
+static void __cvmx_increment_ba(cvmx_sli_mem_access_subidx_t *pmas)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+		pmas->cn68xx.ba++;
+	else
+		pmas->cn63xx.ba++;
+}
+
+/*
+ * milliseconds to retry PCIe cfg-space access:
+ * Value 32(unscaled) was recommended in HRM, but may be too small for
+ * some PCIe devices. This 200mS default should cover most devices,
+ * but can be extended by bootparam cvmx-pcie.cfg_timeout, or reduced
+ * to speed boot if it is known that no devices need so much time.
+ */
+static int cfg_timeout = 200;
+
+static int cfg_retries(void)
+{
+	static int cfg_ticks = -1;
+
+	if (cfg_ticks < 0) {
+		u64 nS = cfg_timeout * 1000000;
+		const int ceiling = 0xffff;
+
+		cfg_ticks = nS / (gd->bus_clk >> 16);
+		if (cfg_ticks > ceiling)
+			cfg_ticks = ceiling;
+	}
+
+	return cfg_ticks;
+}
+
+/**
+ * @INTERNAL
+ * Enable/Disable PEMX_PEMON.pemon based on the direction.
+ *
+ * @param node      node
+ * @param pcie_port PCIe port
+ * @param direction 0 to disable, 1 to enable
+ */
+static void __cvmx_pcie_config_pemon(int node, int pcie_port, bool direction)
+{
+	cvmx_pemx_on_t pemon;
+
+	pemon.u64 = CVMX_READ_CSR(CVMX_PEMX_ON(pcie_port));
+	pemon.s.pemon = direction;
+	CVMX_WRITE_CSR(CVMX_PEMX_ON(pcie_port), pemon.u64);
+	pemon.u64 = CVMX_READ_CSR(CVMX_PEMX_ON(pcie_port));
+}
+
+/**
+ * @INTERNAL
+ * De-assert GSER_PHY.phy_reset for a given qlm
+ *
+ * @param node       node
+ * @param qlm        qlm for a given PCIe port
+ */
+static void __cvmx_pcie_gser_phy_config(int node, int pcie_port, int qlm)
+{
+	cvmx_pemx_cfg_t pem_cfg;
+	cvmx_gserx_phy_ctl_t ctrl;
+	int has_8lanes = 0;
+	int is_gen3 = 0;
+
+	ctrl.u64 = CVMX_READ_CSR(CVMX_GSERX_PHY_CTL(qlm));
+
+	/* Assert the reset */
+	ctrl.s.phy_reset = 1;
+	CVMX_WRITE_CSR(CVMX_GSERX_PHY_CTL(qlm), ctrl.u64);
+	pem_cfg.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG(pcie_port));
+	udelay(10);
+
+	has_8lanes = pem_cfg.cn78xx.lanes8;
+	is_gen3 = pem_cfg.cn78xx.md >= 2;
+
+	if (has_8lanes) {
+		ctrl.u64 = CVMX_READ_CSR(CVMX_GSERX_PHY_CTL(qlm + 1));
+		ctrl.s.phy_reset = 1;
+		CVMX_WRITE_CSR(CVMX_GSERX_PHY_CTL(qlm + 1), ctrl.u64);
+		ctrl.u64 = CVMX_READ_CSR(CVMX_GSERX_PHY_CTL(qlm + 1));
+	}
+	ctrl.u64 = CVMX_READ_CSR(CVMX_GSERX_PHY_CTL(qlm));
+	udelay(10);
+
+	/* Deassert the reset */
+	ctrl.s.phy_reset = 0;
+	CVMX_WRITE_CSR(CVMX_GSERX_PHY_CTL(qlm), ctrl.u64);
+	pem_cfg.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG(pcie_port));
+	udelay(500);
+
+	if (has_8lanes) {
+		ctrl.u64 = CVMX_READ_CSR(CVMX_GSERX_PHY_CTL(qlm + 1));
+		ctrl.s.phy_reset = 0;
+		CVMX_WRITE_CSR(CVMX_GSERX_PHY_CTL(qlm + 1), ctrl.u64);
+	}
+	ctrl.u64 = CVMX_READ_CSR(CVMX_GSERX_PHY_CTL(qlm));
+	udelay(500);
+
+	/* Apply some erratas after PHY reset, only applies to PCIe GEN3 */
+	if (is_gen3) {
+		int i;
+		int high_qlm = has_8lanes ? qlm + 1 : qlm;
+
+		/* Apply workaround for Errata GSER-26150 */
+		if (OCTEON_IS_MODEL(OCTEON_CN73XX_PASS1_0)) {
+			for (i = qlm; i < high_qlm; i++) {
+				cvmx_gserx_glbl_pll_cfg_3_t pll_cfg_3;
+				cvmx_gserx_glbl_misc_config_1_t misc_config_1;
+				/* Update PLL parameters */
+				/*
+				 * Step 1: Set
+				 * GSER()_GLBL_PLL_CFG_3[PLL_VCTRL_SEL_LCVCO_VAL] = 0x2,
+				 * and
+				 * GSER()_GLBL_PLL_CFG_3[PCS_SDS_PLL_VCO_AMP] = 0
+				 */
+				pll_cfg_3.u64 = CVMX_READ_CSR(CVMX_GSERX_GLBL_PLL_CFG_3(i));
+				pll_cfg_3.s.pcs_sds_pll_vco_amp = 0;
+				pll_cfg_3.s.pll_vctrl_sel_lcvco_val = 2;
+				CVMX_WRITE_CSR(CVMX_GSERX_GLBL_PLL_CFG_3(i), pll_cfg_3.u64);
+
+				/*
+				 * Step 2: Set
+				 * GSER()_GLBL_MISC_CONFIG_1[PCS_SDS_TRIM_CHP_REG] = 0x2.
+				 */
+				misc_config_1.u64 = CVMX_READ_CSR(CVMX_GSERX_GLBL_MISC_CONFIG_1(i));
+				misc_config_1.s.pcs_sds_trim_chp_reg = 2;
+				CVMX_WRITE_CSR(CVMX_GSERX_GLBL_MISC_CONFIG_1(i), misc_config_1.u64);
+			}
+		}
+
+		/* Apply workaround for Errata GSER-25992 */
+		if (OCTEON_IS_MODEL(OCTEON_CN73XX_PASS1_X) ||
+		    OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X)) {
+			for (i = qlm; i < high_qlm; i++)
+				cvmx_qlm_gser_errata_25992(node, i);
+		}
+	}
+}
+
+/* Get the PCIe LTSSM state for the given port
+ *
+ * @param node      Node to query
+ * @param pcie_port PEM to query
+ *
+ * @return LTSSM state
+ */
+static int __cvmx_pcie_rc_get_ltssm_state(int node, int pcie_port)
+{
+	u64 debug;
+
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX) && pcie_port == 0) {
+		CVMX_WRITE_CSR(CVMX_DTX_SPEM_SELX(0), 0);
+		CVMX_READ_CSR(CVMX_DTX_SPEM_SELX(0));
+		CVMX_WRITE_CSR(CVMX_DTX_SPEM_ENAX(0), 0xfffffffffull);
+		CVMX_READ_CSR(CVMX_DTX_SPEM_ENAX(0));
+
+		/* Read the value */
+		debug = CVMX_READ_CSR(CVMX_DTX_SPEM_DATX(0));
+
+		/* Disable the PEM from driving OCLA signals */
+		CVMX_WRITE_CSR(CVMX_DTX_SPEM_ENAX(0), 0);
+		CVMX_READ_CSR(CVMX_DTX_SPEM_ENAX(0));
+	} else {
+		/* LTSSM state is in debug select 0 */
+		CVMX_WRITE_CSR(CVMX_DTX_PEMX_SELX(0, pcie_port), 0);
+		CVMX_READ_CSR(CVMX_DTX_PEMX_SELX(0, pcie_port));
+		CVMX_WRITE_CSR(CVMX_DTX_PEMX_ENAX(0, pcie_port), 0xfffffffffull);
+		CVMX_READ_CSR(CVMX_DTX_PEMX_ENAX(0, pcie_port));
+
+		/* Read the value */
+		debug = CVMX_READ_CSR(CVMX_DTX_PEMX_DATX(0, pcie_port));
+
+		/* Disable the PEM from driving OCLA signals */
+		CVMX_WRITE_CSR(CVMX_DTX_PEMX_ENAX(0, pcie_port), 0);
+		CVMX_READ_CSR(CVMX_DTX_PEMX_ENAX(0, pcie_port));
+	}
+
+	/* DBGSEL = 0x0, bits[8:3] */
+	return cvmx_bit_extract(debug, 3, 6);
+}
+
+/**
+ * Get the PCIe LTSSM state for the given port
+ *
+ * @param node      Node to query
+ * @param pcie_port PEM to query
+ *
+ * @return LTSSM state
+ */
+static const char *cvmx_pcie_get_ltssm_string(int ltssm)
+{
+	switch (ltssm) {
+	case 0x00:
+		return "DETECT_QUIET";
+	case 0x01:
+		return "DETECT_ACT";
+	case 0x02:
+		return "POLL_ACTIVE";
+	case 0x03:
+		return "POLL_COMPLIANCE";
+	case 0x04:
+		return "POLL_CONFIG";
+	case 0x05:
+		return "PRE_DETECT_QUIET";
+	case 0x06:
+		return "DETECT_WAIT";
+	case 0x07:
+		return "CFG_LINKWD_START";
+	case 0x08:
+		return "CFG_LINKWD_ACEPT";
+	case 0x09:
+		return "CFG_LANENUM_WAIT";
+	case 0x0A:
+		return "CFG_LANENUM_ACEPT";
+	case 0x0B:
+		return "CFG_COMPLETE";
+	case 0x0C:
+		return "CFG_IDLE";
+	case 0x0D:
+		return "RCVRY_LOCK";
+	case 0x0E:
+		return "RCVRY_SPEED";
+	case 0x0F:
+		return "RCVRY_RCVRCFG";
+	case 0x10:
+		return "RCVRY_IDLE";
+	case 0x11:
+		return "L0";
+	case 0x12:
+		return "L0S";
+	case 0x13:
+		return "L123_SEND_EIDLE";
+	case 0x14:
+		return "L1_IDLE";
+	case 0x15:
+		return "L2_IDLE";
+	case 0x16:
+		return "L2_WAKE";
+	case 0x17:
+		return "DISABLED_ENTRY";
+	case 0x18:
+		return "DISABLED_IDLE";
+	case 0x19:
+		return "DISABLED";
+	case 0x1A:
+		return "LPBK_ENTRY";
+	case 0x1B:
+		return "LPBK_ACTIVE";
+	case 0x1C:
+		return "LPBK_EXIT";
+	case 0x1D:
+		return "LPBK_EXIT_TIMEOUT";
+	case 0x1E:
+		return "HOT_RESET_ENTRY";
+	case 0x1F:
+		return "HOT_RESET";
+	case 0x20:
+		return "RCVRY_EQ0";
+	case 0x21:
+		return "RCVRY_EQ1";
+	case 0x22:
+		return "RCVRY_EQ2";
+	case 0x23:
+		return "RCVRY_EQ3";
+	default:
+		return "Unknown";
+	}
+}
+
+/**
+ * During PCIe link initialization we need to make config request to the attached
+ * device to verify its speed and width. These config access happen very early
+ * after the device is taken out of reset, so may fail for some amount of time.
+ * This function automatically retries these config accesses. The normal builtin
+ * hardware retry isn't enough for this very early access.
+ *
+ * @param node      Note to read from
+ * @param pcie_port PCIe port to read from
+ * @param bus       PCIe bus number
+ * @param dev       PCIe device
+ * @param func      PCIe function on the device
+ * @param reg       Register to read
+ *
+ * @return Config register value, or all ones on failure
+ */
+static uint32_t cvmx_pcie_config_read32_retry(int node, int pcie_port, int bus, int dev, int func,
+					      int reg)
+{
+	/*
+	 * Read the PCI config register until we get a valid value. Some cards
+	 * require time after link up to return data. Wait at most 3 seconds
+	 */
+	u64 timeout = 300;
+	u32 val;
+
+	do {
+		/* Read PCI capability pointer */
+		val = __cvmx_pcie_config_read32(node, pcie_port, bus, dev, func, reg, 0);
+
+		/* Check the read succeeded */
+		if (val != 0xffffffff)
+			return val;
+		/* Failed, wait a little and try again */
+		mdelay(10);
+	} while (--timeout);
+
+	debug("N%d.PCIe%d: Config read failed, can't communicate with device\n",
+	      node, pcie_port);
+
+	return -1;
+}
+
+/**
+ * @INTERNAL
+ * Initialize a host mode PCIe gen 2 link. This function takes a PCIe
+ * port from reset to a link up state. Software can then begin
+ * configuring the rest of the link.
+ *
+ * @param node	    node
+ * @param pcie_port PCIe port to initialize
+ *
+ * @return Zero on success
+ */
+static int __cvmx_pcie_rc_initialize_link_gen2(int node, int pcie_port)
+{
+	u64 start_cycle;
+
+	cvmx_pemx_ctl_status_t pem_ctl_status;
+	cvmx_pciercx_cfg032_t pciercx_cfg032;
+	cvmx_pciercx_cfg448_t pciercx_cfg448;
+
+	if (OCTEON_IS_OCTEON3()) {
+		if (CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_PEMX_ON(pcie_port), cvmx_pemx_on_t,
+					       pemoor, ==, 1, 100000)) {
+			printf("%d:PCIe: Port %d PEM not on, skipping\n", node, pcie_port);
+			return -1;
+		}
+	}
+
+	/* Bring up the link */
+	pem_ctl_status.u64 = CVMX_READ_CSR(CVMX_PEMX_CTL_STATUS(pcie_port));
+	pem_ctl_status.s.lnk_enb = 1;
+	CVMX_WRITE_CSR(CVMX_PEMX_CTL_STATUS(pcie_port), pem_ctl_status.u64);
+
+	/* Wait for the link to come up */
+	start_cycle = get_timer(0);
+	do {
+		if (get_timer(start_cycle) > 1000)
+			return -1;
+
+		udelay(1000);
+		pciercx_cfg032.u32 = CVMX_PCIE_CFGX_READ(pcie_port,
+							 CVMX_PCIERCX_CFG032(pcie_port));
+	} while ((pciercx_cfg032.s.dlla == 0) || (pciercx_cfg032.s.lt == 1));
+
+	/* Update the Replay Time Limit.  Empirically, some PCIe devices take a
+	 * little longer to respond than expected under load. As a workaround
+	 * for this we configure the Replay Time Limit to the value expected
+	 * for a 512 byte MPS instead of our actual 256 byte MPS. The numbers
+	 * below are directly from the PCIe spec table 3-4
+	 */
+	pciercx_cfg448.u32 = CVMX_PCIE_CFGX_READ(pcie_port,
+						 CVMX_PCIERCX_CFG448(pcie_port));
+	switch (pciercx_cfg032.s.nlw) {
+	case 1: /* 1 lane */
+		pciercx_cfg448.s.rtl = 1677;
+		break;
+	case 2: /* 2 lanes */
+		pciercx_cfg448.s.rtl = 867;
+		break;
+	case 4: /* 4 lanes */
+		pciercx_cfg448.s.rtl = 462;
+		break;
+	case 8: /* 8 lanes */
+		pciercx_cfg448.s.rtl = 258;
+		break;
+	}
+	CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG448(pcie_port),
+			     pciercx_cfg448.u32);
+
+	return 0;
+}
+
+extern int octeon_pcie_get_qlm_from_fdt(int numa_node, int pcie_port);
+
+static int __cvmx_pcie_check_pcie_port(int node, int pcie_port, enum cvmx_qlm_mode mode)
+{
+	if (mode == CVMX_QLM_MODE_SRIO_1X4 || mode == CVMX_QLM_MODE_SRIO_2X2 ||
+	    mode == CVMX_QLM_MODE_SRIO_4X1) {
+		printf("%d:PCIe: Port %d is SRIO, skipping.\n", node, pcie_port);
+		return -1;
+	} else if (mode == CVMX_QLM_MODE_SGMII) {
+		printf("%d:PCIe: Port %d is SGMII, skipping.\n", node, pcie_port);
+		return -1;
+	} else if (mode == CVMX_QLM_MODE_XAUI || mode == CVMX_QLM_MODE_RXAUI) {
+		printf("%d:PCIe: Port %d is XAUI, skipping.\n", node, pcie_port);
+		return -1;
+	} else if (mode == CVMX_QLM_MODE_ILK) {
+		printf("%d:PCIe: Port %d is ILK, skipping.\n", node, pcie_port);
+		return -1;
+	} else if (mode != CVMX_QLM_MODE_PCIE &&
+		   mode != CVMX_QLM_MODE_PCIE_1X8 &&
+		   mode != CVMX_QLM_MODE_PCIE_1X2 &&
+		   mode != CVMX_QLM_MODE_PCIE_2X1 &&
+		   mode != CVMX_QLM_MODE_PCIE_1X1) {
+		printf("%d:PCIe: Port %d is unknown, skipping.\n",
+		       node, pcie_port);
+		return -1;
+	}
+	return 0;
+}
+
+static int __cvmx_pcie_check_qlm_mode(int node, int pcie_port, int qlm)
+{
+	enum cvmx_qlm_mode mode = CVMX_QLM_MODE_DISABLED;
+
+	if (qlm < 0)
+		return -1;
+
+	/* Make sure this interface is PCIe */
+	if (OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+		if (cvmx_qlm_get_dlm_mode(1, pcie_port) ==
+		    CVMX_QLM_MODE_DISABLED) {
+			printf("PCIe: Port %d not in PCIe mode, skipping\n",
+			       pcie_port);
+			return -1;
+		}
+	} else if (octeon_has_feature(OCTEON_FEATURE_PCIE)) {
+		/*
+		 * Requires reading the MIO_QLMX_CFG register to figure
+		 * out the port type.
+		 */
+		if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
+			qlm = 3 - (pcie_port * 2);
+		} else if (OCTEON_IS_MODEL(OCTEON_CN61XX)) {
+			cvmx_mio_qlmx_cfg_t qlm_cfg;
+
+			qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(1));
+			if (qlm_cfg.s.qlm_cfg == 1)
+				qlm = 1;
+			else
+				qlm = pcie_port;
+		} else if (OCTEON_IS_MODEL(OCTEON_CN66XX) ||
+			   OCTEON_IS_MODEL(OCTEON_CN63XX)) {
+			qlm = pcie_port;
+		}
+
+		/*
+		 * PCIe is allowed only in QLM1, 1 PCIe port in x2 or
+		 * 2 PCIe ports in x1
+		 */
+		else if (OCTEON_IS_MODEL(OCTEON_CNF71XX))
+			qlm = 1;
+
+		mode = cvmx_qlm_get_mode(qlm);
+
+		__cvmx_pcie_check_pcie_port(node, pcie_port, mode);
+	}
+	return 0;
+}
+
+static void __cvmx_pcie_sli_config(int node, int pcie_port)
+{
+	cvmx_pemx_bar_ctl_t pemx_bar_ctl;
+	cvmx_pemx_ctl_status_t pemx_ctl_status;
+	cvmx_sli_ctl_portx_t sli_ctl_portx;
+	cvmx_sli_mem_access_ctl_t sli_mem_access_ctl;
+	cvmx_sli_mem_access_subidx_t mem_access_subid;
+	cvmx_pemx_bar1_indexx_t bar1_index;
+	int i;
+
+	/* Store merge control (SLI_MEM_ACCESS_CTL[TIMER,MAX_WORD]) */
+	sli_mem_access_ctl.u64 = CVMX_READ_CSR(CVMX_PEXP_SLI_MEM_ACCESS_CTL);
+	sli_mem_access_ctl.s.max_word = 0; /* Allow 16 words to combine */
+	sli_mem_access_ctl.s.timer = 127;  /* Wait up to 127 cycles for more data */
+	CVMX_WRITE_CSR(CVMX_PEXP_SLI_MEM_ACCESS_CTL, sli_mem_access_ctl.u64);
+
+	/* Setup Mem access SubDIDs */
+	mem_access_subid.u64 = 0;
+	mem_access_subid.s.port = pcie_port;	/* Port the request is sent to. */
+	mem_access_subid.s.nmerge = 0;		/* Allow merging as it works on CN6XXX. */
+	mem_access_subid.s.esr = _CVMX_PCIE_ES; /* Endian-swap for Reads. */
+	mem_access_subid.s.esw = _CVMX_PCIE_ES; /* Endian-swap for Writes. */
+	mem_access_subid.s.wtype = 0;		/* "No snoop" and "Relaxed ordering" are not set */
+	mem_access_subid.s.rtype = 0;		/* "No snoop" and "Relaxed ordering" are not set */
+	/* PCIe Address Bits <63:34>. */
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+		mem_access_subid.cn68xx.ba = 0;
+	else
+		mem_access_subid.cn63xx.ba = 0;
+
+	/* Setup mem access 12-15 for port 0, 16-19 for port 1, supplying 36
+	 * bits of address space
+	 */
+	for (i = 12 + pcie_port * 4; i < 16 + pcie_port * 4; i++) {
+		CVMX_WRITE_CSR(CVMX_PEXP_SLI_MEM_ACCESS_SUBIDX(i), mem_access_subid.u64);
+		/* Set each SUBID to extend the addressable range */
+		__cvmx_increment_ba(&mem_access_subid);
+	}
+
+	if (OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) ||
+	    OCTEON_IS_MODEL(OCTEON_CN68XX) ||
+	    (OCTEON_IS_OCTEON3() && !OCTEON_IS_MODEL(OCTEON_CN70XX))) {
+		/* Disable the peer to peer forwarding register. This must be
+		 * setup by the OS after it enumerates the bus and assigns
+		 * addresses to the PCIe busses
+		 */
+		for (i = 0; i < 4; i++) {
+			CVMX_WRITE_CSR(CVMX_PEMX_P2P_BARX_START(i, pcie_port), -1);
+			CVMX_WRITE_CSR(CVMX_PEMX_P2P_BARX_END(i, pcie_port), -1);
+		}
+	}
+
+	/* Set Octeon's BAR0 to decode 0-16KB. It overlaps with Bar2 */
+	CVMX_WRITE_CSR(CVMX_PEMX_P2N_BAR0_START(pcie_port), 0);
+
+	/* Set Octeon's BAR2 to decode 0-2^41. Bar0 and Bar1 take precedence
+	 * where they overlap. It also overlaps with the device addresses, so
+	 * make sure the peer to peer forwarding is set right
+	 */
+	CVMX_WRITE_CSR(CVMX_PEMX_P2N_BAR2_START(pcie_port), 0);
+
+	/* Setup BAR2 attributes */
+	/* Relaxed Ordering (NPEI_CTL_PORTn[PTLP_RO,CTLP_RO, WAIT_COM]) */
+	/* - PTLP_RO,CTLP_RO should normally be set (except for debug). */
+	/* - WAIT_COM=0 will likely work for all applications. */
+	/* Load completion relaxed ordering (NPEI_CTL_PORTn[WAITL_COM]) */
+	pemx_bar_ctl.u64 = CVMX_READ_CSR(CVMX_PEMX_BAR_CTL(pcie_port));
+	pemx_bar_ctl.s.bar1_siz = 3; /* 256MB BAR1 */
+	pemx_bar_ctl.s.bar2_enb = 1;
+	pemx_bar_ctl.s.bar2_esx = _CVMX_PCIE_ES;
+	pemx_bar_ctl.s.bar2_cax = 0;
+	CVMX_WRITE_CSR(CVMX_PEMX_BAR_CTL(pcie_port), pemx_bar_ctl.u64);
+	sli_ctl_portx.u64 = CVMX_READ_CSR(CVMX_PEXP_SLI_CTL_PORTX(pcie_port));
+	sli_ctl_portx.s.ptlp_ro = 1;
+	sli_ctl_portx.s.ctlp_ro = 1;
+	sli_ctl_portx.s.wait_com = 0;
+	sli_ctl_portx.s.waitl_com = 0;
+	CVMX_WRITE_CSR(CVMX_PEXP_SLI_CTL_PORTX(pcie_port), sli_ctl_portx.u64);
+
+	/* BAR1 follows BAR2 */
+	CVMX_WRITE_CSR(CVMX_PEMX_P2N_BAR1_START(pcie_port),
+		       CVMX_PCIE_BAR1_RC_BASE);
+
+	bar1_index.u64 = 0;
+	bar1_index.s.addr_idx = (CVMX_PCIE_BAR1_PHYS_BASE >> 22);
+	bar1_index.s.ca = 1;		      /* Not Cached */
+	bar1_index.s.end_swp = _CVMX_PCIE_ES; /* Endian Swap mode */
+	bar1_index.s.addr_v = 1;	      /* Valid entry */
+
+	for (i = 0; i < 16; i++) {
+		CVMX_WRITE_CSR(CVMX_PEMX_BAR1_INDEXX(i, pcie_port),
+			       bar1_index.u64);
+		/* 256MB / 16 >> 22 == 4 */
+		bar1_index.s.addr_idx += (((1ull << 28) / 16ull) >> 22);
+	}
+
+	/* Wait for 200ms */
+	pemx_ctl_status.u64 = CVMX_READ_CSR(CVMX_PEMX_CTL_STATUS(pcie_port));
+	pemx_ctl_status.cn63xx.cfg_rtry = cfg_retries();
+	CVMX_WRITE_CSR(CVMX_PEMX_CTL_STATUS(pcie_port), pemx_ctl_status.u64);
+
+	/*
+	 * Here is the second part of the config retry changes. Wait for 700ms
+	 * after setting up the link before continuing. PCIe says the devices
+	 * may need up to 900ms to come up. 700ms plus 200ms from above gives
+	 * us a total of 900ms
+	 */
+	if (OCTEON_IS_OCTEON2() || OCTEON_IS_MODEL(OCTEON_CN70XX))
+		udelay(PCIE_DEVICE_READY_WAIT_DELAY_MICROSECONDS);
+}
+
+/**
+ * Initialize a PCIe gen 2 port for use in host(RC) mode. It doesn't enumerate
+ * the bus.
+ *
+ * @param pcie_port PCIe port to initialize
+ *
+ * @return Zero on success
+ */
+static int __cvmx_pcie_rc_initialize_gen2(int pcie_port)
+{
+	cvmx_ciu_soft_prst_t ciu_soft_prst;
+	cvmx_mio_rst_ctlx_t mio_rst_ctl;
+	cvmx_pemx_bist_status_t pemx_bist_status;
+	cvmx_pemx_bist_status2_t pemx_bist_status2;
+	cvmx_pciercx_cfg032_t pciercx_cfg032;
+	cvmx_pciercx_cfg515_t pciercx_cfg515;
+	u64 ciu_soft_prst_reg, rst_ctl_reg;
+	int ep_mode;
+	int qlm = 0;
+	int node = (pcie_port >> 4) & 0x3;
+
+	pcie_port &= 0x3;
+
+	if (pcie_port >= CVMX_PCIE_PORTS) {
+		//debug("Invalid PCIe%d port\n", pcie_port);
+		return -1;
+	}
+
+	if (__cvmx_pcie_check_qlm_mode(node, pcie_port, qlm))
+		return -1;
+
+	/* Make sure we aren't trying to setup a target mode interface in host
+	 * mode
+	 */
+	if (OCTEON_IS_OCTEON3()) {
+		ciu_soft_prst_reg = CVMX_RST_SOFT_PRSTX(pcie_port);
+		rst_ctl_reg = CVMX_RST_CTLX(pcie_port);
+	} else {
+		ciu_soft_prst_reg = (pcie_port) ? CVMX_CIU_SOFT_PRST1 : CVMX_CIU_SOFT_PRST;
+		rst_ctl_reg = CVMX_MIO_RST_CTLX(pcie_port);
+	}
+	mio_rst_ctl.u64 = CVMX_READ_CSR(rst_ctl_reg);
+
+	ep_mode = ((OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)) ?
+				 (mio_rst_ctl.s.prtmode != 1) :
+				 (!mio_rst_ctl.s.host_mode));
+
+	if (OCTEON_IS_MODEL(OCTEON_CN70XX) && pcie_port) {
+		cvmx_pemx_cfg_t pemx_cfg;
+
+		pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(0));
+		if ((pemx_cfg.s.md & 3) == 2) {
+			printf("PCIe: Port %d in 1x4 mode.\n", pcie_port);
+			return -1;
+		}
+	}
+
+	if (ep_mode) {
+		printf("%d:PCIe: Port %d in endpoint mode.\n", node, pcie_port);
+		return -1;
+	}
+
+	/* CN63XX Pass 1.0 errata G-14395 requires the QLM De-emphasis be
+	 * programmed
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN63XX_PASS1_0)) {
+		if (pcie_port) {
+			cvmx_ciu_qlm1_t ciu_qlm;
+
+			ciu_qlm.u64 = csr_rd(CVMX_CIU_QLM1);
+			ciu_qlm.s.txbypass = 1;
+			ciu_qlm.s.txdeemph = 5;
+			ciu_qlm.s.txmargin = 0x17;
+			csr_wr(CVMX_CIU_QLM1, ciu_qlm.u64);
+		} else {
+			cvmx_ciu_qlm0_t ciu_qlm;
+
+			ciu_qlm.u64 = csr_rd(CVMX_CIU_QLM0);
+			ciu_qlm.s.txbypass = 1;
+			ciu_qlm.s.txdeemph = 5;
+			ciu_qlm.s.txmargin = 0x17;
+			csr_wr(CVMX_CIU_QLM0, ciu_qlm.u64);
+		}
+	}
+
+	/* Bring the PCIe out of reset */
+	ciu_soft_prst.u64 = CVMX_READ_CSR(ciu_soft_prst_reg);
+	/* After a chip reset the PCIe will also be in reset. If it
+	 * isn't, most likely someone is trying to init it again
+	 * without a proper PCIe reset.
+	 */
+	if (ciu_soft_prst.s.soft_prst == 0) {
+		/* Reset the port */
+		ciu_soft_prst.s.soft_prst = 1;
+		CVMX_WRITE_CSR(ciu_soft_prst_reg, ciu_soft_prst.u64);
+
+		/* Read to make sure write happens */
+		ciu_soft_prst.u64 = CVMX_READ_CSR(ciu_soft_prst_reg);
+
+		/* Keep PERST asserted for 2 ms */
+		udelay(2000);
+	}
+
+	/* Deassert PERST */
+	ciu_soft_prst.u64 = CVMX_READ_CSR(ciu_soft_prst_reg);
+	ciu_soft_prst.s.soft_prst = 0;
+	CVMX_WRITE_CSR(ciu_soft_prst_reg, ciu_soft_prst.u64);
+	ciu_soft_prst.u64 = CVMX_READ_CSR(ciu_soft_prst_reg);
+
+	/* Wait 1ms for PCIe reset to complete */
+	udelay(1000);
+
+	/* Set MPLL multiplier as per Errata 20669. */
+	if (OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+		int qlm = __cvmx_pcie_get_qlm(0, pcie_port);
+		enum cvmx_qlm_mode mode;
+		int old_mult;
+		u64 meas_refclock = cvmx_qlm_measure_clock(qlm);
+
+		if (meas_refclock > 99000000 && meas_refclock < 101000000) {
+			old_mult = 35;
+		} else if (meas_refclock > 124000000 &&
+			   meas_refclock < 126000000) {
+			old_mult = 56;
+		} else if (meas_refclock > 156000000 &&
+			   meas_refclock < 156500000) {
+			old_mult = 45;
+		} else {
+			printf("%s: Invalid reference clock for qlm %d\n",
+			       __func__, qlm);
+			return -1;
+		}
+		mode = cvmx_qlm_get_mode(qlm);
+		__cvmx_qlm_set_mult(qlm, 2500, old_mult);
+		/* Adjust mplls for both dlms when configured as pcie 1x4 */
+		if (mode == CVMX_QLM_MODE_PCIE && pcie_port == 0)
+			__cvmx_qlm_set_mult(qlm + 1, 2500, old_mult);
+	}
+
+	/*
+	 * Check and make sure PCIe came out of reset. If it doesn't the board
+	 * probably hasn't wired the clocks up and the interface should be
+	 * skipped
+	 */
+	if (CVMX_WAIT_FOR_FIELD64_NODE(node, rst_ctl_reg, cvmx_mio_rst_ctlx_t,
+				       rst_done, ==, 1, 10000)) {
+		printf("%d:PCIe: Port %d stuck in reset, skipping.\n", node, pcie_port);
+		return -1;
+	}
+
+	/* Check BIST status */
+	pemx_bist_status.u64 = CVMX_READ_CSR(CVMX_PEMX_BIST_STATUS(pcie_port));
+	if (pemx_bist_status.u64)
+		printf("%d:PCIe: BIST FAILED for port %d (0x%016llx)\n", node, pcie_port,
+		       CAST64(pemx_bist_status.u64));
+	pemx_bist_status2.u64 = CVMX_READ_CSR(CVMX_PEMX_BIST_STATUS2(pcie_port));
+
+	/*
+	 * Errata PCIE-14766 may cause the lower 6 bits to be randomly set on
+	 * CN63XXp1
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN63XX_PASS1_X))
+		pemx_bist_status2.u64 &= ~0x3full;
+
+	if (pemx_bist_status2.u64) {
+		printf("%d:PCIe: BIST2 FAILED for port %d (0x%016llx)\n",
+		       node, pcie_port, CAST64(pemx_bist_status2.u64));
+	}
+
+	/* Initialize the config space CSRs */
+	__cvmx_pcie_rc_initialize_config_space(node, pcie_port);
+
+	/* Enable gen2 speed selection */
+	pciercx_cfg515.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG515(pcie_port));
+	pciercx_cfg515.s.dsc = 1;
+	CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG515(pcie_port), pciercx_cfg515.u32);
+
+	/* Bring the link up */
+	if (__cvmx_pcie_rc_initialize_link_gen2(node, pcie_port)) {
+		/* Some gen1 devices don't handle the gen 2 training correctly.
+		 * Disable gen2 and try again with only gen1
+		 */
+		cvmx_pciercx_cfg031_t pciercx_cfg031;
+
+		pciercx_cfg031.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG031(pcie_port));
+		pciercx_cfg031.s.mls = 1;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG031(pcie_port), pciercx_cfg031.u32);
+		if (__cvmx_pcie_rc_initialize_link_gen2(node, pcie_port)) {
+			printf("PCIe: Link timeout on port %d, probably the slot is empty\n",
+			       pcie_port);
+			return -1;
+		}
+	}
+
+	__cvmx_pcie_sli_config(node, pcie_port);
+
+	/* Display the link status */
+	pciercx_cfg032.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG032(pcie_port));
+	printf("PCIe: Port %d link active, %d lanes, speed gen%d\n", pcie_port,
+	       pciercx_cfg032.s.nlw, pciercx_cfg032.s.ls);
+
+	pcie_link_initialized[node][pcie_port] = true;
+	return 0;
+}
+
+/**
+ * @INTERNAL
+ * Initialize a host mode PCIe gen 2 link. This function takes a PCIe
+ * port from reset to a link up state. Software can then begin
+ * configuring the rest of the link.
+ *
+ * @param node	    node
+ * @param pcie_port PCIe port to initialize
+ *
+ * @return Zero on success
+ */
+static int __cvmx_pcie_rc_initialize_link_gen2_v3(int node, int pcie_port)
+{
+	u8 ltssm_history[LTSSM_HISTORY_SIZE];
+	int ltssm_history_loc;
+	cvmx_pemx_ctl_status_t pem_ctl_status;
+	cvmx_pciercx_cfg006_t pciercx_cfg006;
+	cvmx_pciercx_cfg031_t pciercx_cfg031;
+	cvmx_pciercx_cfg032_t pciercx_cfg032;
+	cvmx_pciercx_cfg068_t pciercx_cfg068;
+	cvmx_pciercx_cfg448_t pciercx_cfg448;
+	cvmx_pciercx_cfg515_t pciercx_cfg515;
+	int max_gen, max_width;
+	u64 hold_time;
+	u64 bounce_allow_time;
+	u64 timeout, good_time, current_time;
+	int neg_gen, neg_width, bus, dev_gen, dev_width;
+	unsigned int cap, cap_next;
+	int ltssm_state, desired_gen;
+	int desired_width;
+	int i, need_speed_change, need_lane_change;
+	int do_retry_speed = 0;
+	int link_up = 0, is_loop_done = 0;
+
+	if (CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_PEMX_ON(pcie_port), cvmx_pemx_on_t, pemoor, ==, 1,
+				       100000)) {
+		printf("N%d:PCIe: Port %d PEM not on, skipping\n", node, pcie_port);
+		return -1;
+	}
+
+	/* Record starting LTSSM state for debug */
+	memset(ltssm_history, -1, sizeof(ltssm_history));
+	ltssm_history[0] = __cvmx_pcie_rc_get_ltssm_state(node, pcie_port);
+	ltssm_history_loc = 0;
+
+	pciercx_cfg031.u32 = CVMX_PCIE_CFGX_READ(pcie_port,
+						 CVMX_PCIERCX_CFG031(pcie_port));
+	/* Max speed of PEM from config (1-3) */
+	max_gen = pciercx_cfg031.s.mls;
+	/* Max lane width of PEM (1-3) */
+	max_width = pciercx_cfg031.s.mlw;
+#ifdef DEBUG_PCIE
+	printf("N%d.PCIe%d: Link supports up to %d lanes, speed gen%d\n",
+	       node, pcie_port, max_width, max_gen);
+#endif
+
+	/* Bring up the link */
+#ifdef DEBUG_PCIE
+	printf("N%d.PCIe%d: Enabling the link\n", node, pcie_port);
+#endif
+	pem_ctl_status.u64 = CVMX_READ_CSR(CVMX_PEMX_CTL_STATUS(pcie_port));
+	pem_ctl_status.s.lnk_enb = 1;
+	CVMX_WRITE_CSR(CVMX_PEMX_CTL_STATUS(pcie_port), pem_ctl_status.u64);
+
+	/*
+	 * Configure SLI after enabling PCIe link. Is required for reading
+	 * PCIe card capabilities.
+	 */
+	__cvmx_pcie_sli_config(node, pcie_port);
+
+	/*
+	 * After the link is enabled  no prints until link up or error,
+	 * Otherwise will miss link state captures
+	 */
+
+retry_speed:
+	/* Clear RC Correctable Error Status Register */
+	CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG068(pcie_port), -1);
+
+	/* Wait for the link to come up and link training to be complete */
+#ifdef DEBUG_PCIE
+	printf("N%d.PCIe%d: Waiting for link\n", node, pcie_port);
+#endif
+
+	/* Timeout of 2 secs */
+	timeout = get_timer(0) + 2000;
+
+	/* Records when the link first went good */
+	good_time = 0;
+
+	do {
+		pciercx_cfg032.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG032(pcie_port));
+		/*
+		 * Errata PEM-31375 PEM RSL access to PCLK registers can
+		 * timeout during speed change. Check for temporary hardware
+		 * timeout, and rety if happens
+		 */
+		if (pciercx_cfg032.u32 == 0xffffffff)
+			continue;
+
+		/* Record LTSSM state for debug */
+		ltssm_state = __cvmx_pcie_rc_get_ltssm_state(node, pcie_port);
+
+		if (ltssm_history[ltssm_history_loc] != ltssm_state) {
+			ltssm_history_loc = (ltssm_history_loc + 1) & (LTSSM_HISTORY_SIZE - 1);
+			ltssm_history[ltssm_history_loc] = ltssm_state;
+		}
+
+		/* Check if the link is up */
+		//		current_time = cvmx_get_cycle();
+		current_time = get_timer(0);
+		link_up = (pciercx_cfg032.s.dlla && !pciercx_cfg032.s.lt);
+
+		if (link_up) {
+			/* Is this the first link up? */
+			if (!good_time) {
+				/* Mark the time when the link transitioned to good */
+				good_time = current_time;
+			} else {
+				/* Check for a link error */
+				pciercx_cfg068.u32 = CVMX_PCIE_CFGX_READ(
+					pcie_port, CVMX_PCIERCX_CFG068(pcie_port));
+				if (pciercx_cfg068.s.res) {
+					/*
+					 * Ignore errors before we've been
+					 * stable for bounce_allow_time
+					 */
+					if (good_time + bounce_allow_time <=
+					    current_time) {
+#ifdef DEBUG_PCIE
+						printf("N%d.PCIe%d: Link errors after link up\n",
+						       node, pcie_port);
+#endif
+						/* Link error, signal a retry */
+						return 1;
+					}
+
+					/*
+					 * Clear RC Correctable Error
+					 * Status Register
+					 */
+					CVMX_PCIE_CFGX_WRITE(pcie_port,
+							     CVMX_PCIERCX_CFG068(pcie_port),
+							     -1);
+#ifdef DEBUG_PCIE
+					printf("N%d.PCIe%d: Ignored error during settling time\n",
+					       node, pcie_port);
+#endif
+				}
+			}
+		} else if (good_time) {
+			if (good_time + bounce_allow_time <= current_time) {
+				/*
+				 * We allow bounces for bounce_allow_time after
+				 * the link is good. Once this time passes any
+				 * bounce requires a retry
+				 */
+#ifdef DEBUG_PCIE
+				printf("N%d.PCIe%d: Link bounce detected\n",
+				       node, pcie_port);
+#endif
+				return 1; /* Link bounce, signal a retry */
+			}
+
+#ifdef DEBUG_PCIE
+			printf("N%d.PCIe%d: Ignored bounce during settling time\n",
+			       node, pcie_port);
+#endif
+		}
+
+		/* Determine if we've hit the timeout */
+		is_loop_done = (current_time >= timeout);
+
+		/*
+		 * Determine if we've had a good link for the required hold
+		 * time
+		 */
+		is_loop_done |= link_up && (good_time + hold_time <=
+					    current_time);
+	} while (!is_loop_done);
+
+	/* Trace the LTSSM state */
+#ifdef DEBUG_PCIE
+	printf("N%d.PCIe%d: LTSSM History\n", node, pcie_port);
+#endif
+	for (i = 0; i < LTSSM_HISTORY_SIZE; i++) {
+		ltssm_history_loc = (ltssm_history_loc + 1) & (LTSSM_HISTORY_SIZE - 1);
+#ifdef DEBUG_PCIE
+		if (ltssm_history[ltssm_history_loc] != 0xff)
+			printf("N%d.PCIe%d: %s\n", node, pcie_port,
+			       cvmx_pcie_get_ltssm_string(ltssm_history[ltssm_history_loc]));
+#endif
+	}
+
+	if (!link_up) {
+		ltssm_state = __cvmx_pcie_rc_get_ltssm_state(node, pcie_port);
+#ifdef DEBUG_PCIE
+		printf("N%d.PCIe%d: Link down, Data link layer %s(DLLA=%d), Link training %s(LT=%d), LTSSM %s\n",
+		       node, pcie_port, pciercx_cfg032.s.dlla ? "active" : "down",
+		       pciercx_cfg032.s.dlla, pciercx_cfg032.s.lt ? "active" : "complete",
+		       pciercx_cfg032.s.lt, cvmx_pcie_get_ltssm_string(ltssm_state));
+#endif
+		return 1; /* Link down, signal a retry */
+	}
+
+	/* Report the negotiated link speed and width */
+	neg_gen = pciercx_cfg032.s.ls;	  /* Current speed of PEM (1-3) */
+	neg_width = pciercx_cfg032.s.nlw; /* Current lane width of PEM (1-8) */
+#ifdef DEBUG_PCIE
+	printf("N%d.PCIe%d: Link negotiated %d lanes, speed gen%d\n", node, pcie_port, neg_width,
+	       neg_gen);
+#endif
+	/* Determine PCIe bus number the directly attached device uses */
+	pciercx_cfg006.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG006(pcie_port));
+	bus = pciercx_cfg006.s.sbnum;
+
+	/* The SLI has to be initialized so we can read the downstream devices     */
+	dev_gen = 1;   /* Device max speed (1-3) */
+	dev_width = 1; /* Device max lane width (1-16) */
+#ifdef DEBUG_PCIE
+	printf("N%d.PCIe%d: Reading Bus %d device max speed and width\n", node, pcie_port, bus);
+#endif
+
+	/*
+	 * Here is the second part of the config retry changes. Wait for 700ms
+	 * after setting up the link before continuing. PCIe says the devices
+	 * may need up to 900ms to come up. 700ms plus 200ms from above gives
+	 * us a total of 900ms
+	 */
+	udelay(PCIE_DEVICE_READY_WAIT_DELAY_MICROSECONDS);
+
+	/* Read PCI capability pointer at offset 0x34 of target */
+	cap = cvmx_pcie_config_read32_retry(node, pcie_port, bus, 0, 0, 0x34);
+
+	/* Check if we were able to read capabilities pointer */
+	if (cap == 0xffffffff)
+		return 1; /* Signal retry needed */
+
+	/* Read device max speed and width */
+	cap_next = cap & 0xff;
+	while (cap_next) {
+		cap = cvmx_pcie_config_read32_retry(node, pcie_port, bus,
+						    0, 0, cap_next);
+		if (cap == 0xffffffff)
+			return 1; /* Signal retry needed */
+
+		/* Is this a PCIe capability (0x10)? */
+		if ((cap & 0xff) == 0x10) {
+#ifdef DEBUG_PCIE
+			printf("N%d.PCIe%d: Found PCIe capability at offset 0x%x\n",
+			       node, pcie_port, cap_next);
+#endif
+			/* Offset 0xc contains the max link info */
+			cap = cvmx_pcie_config_read32_retry(node, pcie_port, bus, 0, 0,
+							    cap_next + 0xc);
+			if (cap == 0xffffffff)
+				return 1;	       /* Signal retry needed */
+			dev_gen = cap & 0xf;	       /* Max speed of PEM from config (1-3) */
+			dev_width = (cap >> 4) & 0x3f; /* Max lane width of PEM (1-16) */
+#ifdef DEBUG_PCIE
+			printf("N%d.PCIe%d: Device supports %d lanes, speed gen%d\n", node,
+			       pcie_port, dev_width, dev_gen);
+#endif
+			break;
+		}
+		/* Move to next capability */
+		cap_next = (cap >> 8) & 0xff;
+	}
+
+	/*
+	 * Desired link speed and width is either limited by the device or our
+	 * PEM configuration. Choose the most restrictive limit
+	 */
+	desired_gen = (dev_gen < max_gen) ? dev_gen : max_gen;
+	desired_width = (dev_width < max_width) ? dev_width : max_width;
+
+	/*
+	 * We need a change if we don't match the desired speed or width.
+	 * Note that we allow better than expected in case the device lied
+	 * about its capabilities
+	 */
+	need_speed_change = (neg_gen < desired_gen);
+	need_lane_change = (neg_width < desired_width);
+
+	if (need_lane_change) {
+		/* We didn't get the maximum number of lanes */
+#ifdef DEBUG_PCIE
+		printf("N%d.PCIe%d: Link width (%d) less that supported (%d)\n",
+		       node, pcie_port, neg_width, desired_width);
+#endif
+		return 2; /* Link wrong width, signal a retry */
+	} else if (need_speed_change) {
+		if (do_retry_speed) {
+#ifdef DEBUG_PCIE
+			printf("N%d.PCIe%d: Link speed (gen%d) less that supported (gen%d)\n", node,
+			       pcie_port, neg_gen, desired_gen);
+#endif
+			return 1; /* Link at width, but speed low. Request a retry */
+		}
+
+		/* We didn't get the maximum speed. Request a speed change */
+#ifdef DEBUG_PCIE
+		printf("N%d.PCIe%d: Link speed (gen%d) less that supported (gen%d), requesting a speed change\n",
+		       node, pcie_port, neg_gen, desired_gen);
+#endif
+		pciercx_cfg515.u32 =
+			CVMX_PCIE_CFGX_READ(pcie_port,
+					    CVMX_PCIERCX_CFG515(pcie_port));
+		pciercx_cfg515.s.dsc = 1;
+		CVMX_PCIE_CFGX_WRITE(pcie_port,
+				     CVMX_PCIERCX_CFG515(pcie_port),
+				     pciercx_cfg515.u32);
+		mdelay(100);
+		do_retry_speed = true;
+		goto retry_speed;
+	} else {
+#ifdef DEBUG_PCIE
+		printf("N%d.PCIe%d: Link at best speed and width\n",
+		       node, pcie_port);
+#endif
+		/* For gen3 links check if we are getting errors over the link */
+		if (neg_gen == 3) {
+			/* Read RC Correctable Error Status Register */
+			pciercx_cfg068.u32 =
+				CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG068(pcie_port));
+			if (pciercx_cfg068.s.res) {
+#ifdef DEBUG_PCIE
+				printf("N%d.PCIe%d: Link reporting error status\n", node,
+				       pcie_port);
+#endif
+				return 1; /* Getting receiver errors, request a retry */
+			}
+		}
+		return 0; /* Link at correct speed and width */
+	}
+
+	/* Update the Replay Time Limit.  Empirically, some PCIe devices take a
+	 * little longer to respond than expected under load. As a workaround
+	 * for this we configure the Replay Time Limit to the value expected
+	 * for a 512 byte MPS instead of our actual 256 byte MPS. The numbers
+	 * below are directly from the PCIe spec table 3-4
+	 */
+	pciercx_cfg448.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG448(pcie_port));
+	switch (pciercx_cfg032.s.nlw) {
+	case 1: /* 1 lane */
+		pciercx_cfg448.s.rtl = 1677;
+		break;
+	case 2: /* 2 lanes */
+		pciercx_cfg448.s.rtl = 867;
+		break;
+	case 4: /* 4 lanes */
+		pciercx_cfg448.s.rtl = 462;
+		break;
+	case 8: /* 8 lanes */
+		pciercx_cfg448.s.rtl = 258;
+		break;
+	}
+	CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG448(pcie_port), pciercx_cfg448.u32);
+
+	return 0;
+}
+
+static int __cvmx_pcie_rc_initialize_gen2_v3(int pcie_port)
+{
+	cvmx_rst_ctlx_t rst_ctl;
+	cvmx_rst_soft_prstx_t rst_soft_prst;
+	cvmx_pciercx_cfg031_t pciercx_cfg031;
+	cvmx_pciercx_cfg032_t pciercx_cfg032;
+	cvmx_pciercx_cfg038_t pciercx_cfg038;
+	cvmx_pciercx_cfg040_t pciercx_cfg040;
+	cvmx_pciercx_cfg515_t pciercx_cfg515;
+	cvmx_pciercx_cfg548_t pciercx_cfg548;
+	cvmx_pemx_bist_status_t pemx_bist_status;
+	u64 rst_soft_prst_reg;
+	int qlm;
+	int node = (pcie_port >> 4) & 0x3;
+	bool requires_pem_reset = 0;
+	enum cvmx_qlm_mode mode = CVMX_QLM_MODE_DISABLED;
+	int retry_count = 0;
+	int result = 0;
+
+	pcie_port &= 0x3;
+
+	/* Assume link down until proven up */
+	pcie_link_initialized[node][pcie_port] = false;
+
+	/* Attempt link initialization up to 3 times */
+	while (retry_count <= MAX_RETRIES) {
+#ifdef DEBUG_PCIE
+		if (retry_count)
+			printf("N%d:PCIE%d: Starting link retry %d\n", node, pcie_port,
+			       retry_count);
+#endif
+		if (pcie_port >= CVMX_PCIE_PORTS) {
+#ifdef DEBUG_PCIE
+			printf("Invalid PCIe%d port\n", pcie_port);
+#endif
+			return -1;
+		}
+
+		qlm = __cvmx_pcie_get_qlm(node, pcie_port);
+
+		if (qlm < 0)
+			return -1;
+
+		mode = cvmx_qlm_get_mode(qlm);
+		if (__cvmx_pcie_check_pcie_port(node, pcie_port, mode))
+			return -1;
+
+		rst_soft_prst_reg = CVMX_RST_SOFT_PRSTX(pcie_port);
+		rst_ctl.u64 = CVMX_READ_CSR(CVMX_RST_CTLX(pcie_port));
+
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+			CVMX_WRITE_CSR(CVMX_DTX_PEMX_SELX(0, pcie_port), 0x17);
+			CVMX_WRITE_CSR(CVMX_DTX_PEMX_SELX(1, pcie_port), 0);
+		}
+
+		if (!rst_ctl.s.host_mode) {
+			printf("N%d:PCIE: Port %d in endpoint mode.\n",
+			       node, pcie_port);
+			return -1;
+		}
+
+		/* Bring the PCIe out of reset */
+		rst_soft_prst.u64 = CVMX_READ_CSR(rst_soft_prst_reg);
+
+		/*
+		 * After a chip reset the PCIe will also be in reset. If it
+		 * isn't, most likely someone is trying to init it again
+		 * without a proper PCIe reset.
+		 */
+		if (rst_soft_prst.s.soft_prst == 0) {
+			/* Disable the MAC controller before resetting */
+			__cvmx_pcie_config_pemon(node, pcie_port, 0);
+
+			/* Reset the port */
+			rst_soft_prst.s.soft_prst = 1;
+			CVMX_WRITE_CSR(rst_soft_prst_reg, rst_soft_prst.u64);
+
+			/* Read to make sure write happens */
+			rst_soft_prst.u64 = CVMX_READ_CSR(rst_soft_prst_reg);
+
+			/* Keep PERST asserted for 2 ms */
+			udelay(2000);
+
+			/* Reset GSER_PHY to put in a clean state */
+			__cvmx_pcie_gser_phy_config(node, pcie_port, qlm);
+			requires_pem_reset = 1;
+
+			/* Enable MAC controller before taking pcie out of reset */
+			__cvmx_pcie_config_pemon(node, pcie_port, 1);
+		}
+
+		/* Deassert PERST */
+		rst_soft_prst.u64 = CVMX_READ_CSR(rst_soft_prst_reg);
+		rst_soft_prst.s.soft_prst = 0;
+		CVMX_WRITE_CSR(rst_soft_prst_reg, rst_soft_prst.u64);
+		rst_soft_prst.u64 = CVMX_READ_CSR(rst_soft_prst_reg);
+
+		/* Check if PLLs are locked after GSER_PHY reset. */
+		if (requires_pem_reset) {
+			cvmx_pemx_cfg_t pemx_cfg;
+
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(pcie_port));
+			if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_QLM_STAT(qlm), cvmx_gserx_qlm_stat_t,
+						  rst_rdy, ==, 1, 10000)) {
+				printf("QLM%d: Timeout waiting for GSERX_QLM_STAT[rst_rdy]\n", qlm);
+				return -1;
+			}
+			if (pemx_cfg.cn78xx.lanes8 &&
+			    (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_QLM_STAT(qlm + 1),
+						   cvmx_gserx_qlm_stat_t, rst_rdy, ==, 1, 10000))) {
+				printf("QLM%d: Timeout waiting for GSERX_QLM_STAT[rst_rdy]\n",
+				       qlm + 1);
+				return -1;
+			}
+		}
+
+		/* Wait 1ms for PCIe reset to complete */
+		udelay(1000);
+
+		/*
+		 * Check and make sure PCIe came out of reset. If it doesn't
+		 * the board probably hasn't wired the clocks up and the
+		 * interface should be skipped
+		 */
+		if (CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_RST_CTLX(pcie_port),
+					       cvmx_rst_ctlx_t,
+					       rst_done, ==, 1, 10000)) {
+			printf("N%d:PCIE: Port %d stuck in reset, skipping.\n", node, pcie_port);
+			return -1;
+		}
+
+		/* Check BIST status */
+		pemx_bist_status.u64 = CVMX_READ_CSR(CVMX_PEMX_BIST_STATUS(pcie_port));
+		if (pemx_bist_status.u64)
+			printf("N%d:PCIE: BIST FAILED for port %d (0x%016llx)\n", node, pcie_port,
+			       CAST64(pemx_bist_status.u64));
+
+			/* Initialize the config space CSRs */
+#ifdef DEBUG_PCIE
+		printf("N%d:PCIE%d Initialize Config Space\n", node, pcie_port);
+#endif
+		__cvmx_pcie_rc_initialize_config_space(node, pcie_port);
+
+		/* Enable gen2 speed selection */
+		pciercx_cfg515.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG515(pcie_port));
+		pciercx_cfg515.s.dsc = 1;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG515(pcie_port), pciercx_cfg515.u32);
+
+		/* Do the link retries on the PCIe interface */
+		if (retry_count == MAX_RETRIES) {
+			/*
+			 * This has to be done AFTER the QLM/PHY interface
+			 * initialized
+			 */
+			pciercx_cfg031.u32 =
+				CVMX_PCIE_CFGX_READ(pcie_port,
+						    CVMX_PCIERCX_CFG031(pcie_port));
+			/*
+			 * Drop speed to gen2 if link bouncing
+			 * Result = -1  PEM in reset
+			 * Result = 0:  link speed and width ok no retry needed
+			 * Result = 1:  link errors or speed change needed
+			 * Result = 2:  lane width error
+			 */
+			if (pciercx_cfg031.s.mls == 3 && result != 2) {
+#ifdef DEBUG_PCIE
+				printf("N%d:PCIE%d: Dropping speed to gen2\n", node, pcie_port);
+#endif
+				pciercx_cfg031.s.mls = 2;
+				CVMX_PCIE_CFGX_WRITE(pcie_port,
+						     CVMX_PCIERCX_CFG031(pcie_port),
+						     pciercx_cfg031.u32);
+
+				/* Set the target link speed */
+				pciercx_cfg040.u32 = CVMX_PCIE_CFGX_READ(
+					pcie_port, CVMX_PCIERCX_CFG040(pcie_port));
+				pciercx_cfg040.s.tls = 2;
+				CVMX_PCIE_CFGX_WRITE(pcie_port,
+						     CVMX_PCIERCX_CFG040(pcie_port),
+						     pciercx_cfg040.u32);
+			}
+		}
+
+		/* Bring the link up */
+		result = __cvmx_pcie_rc_initialize_link_gen2_v3(node, pcie_port);
+		if (result == 0) {
+#ifdef DEBUG_PCIE
+			printf("N%d:PCIE%d: Link does not need a retry\n", node, pcie_port);
+#endif
+			break;
+		} else if (result > 0) {
+			if (retry_count >= MAX_RETRIES) {
+				int link_up;
+#ifdef DEBUG_PCIE
+				printf("N%d:PCIE%d: Link requested a retry, but hit the max retries\n",
+				       node, pcie_port);
+#endif
+				/* If the link is down, report failure */
+				pciercx_cfg032.u32 = CVMX_PCIE_CFGX_READ(
+					pcie_port,
+					CVMX_PCIERCX_CFG032(pcie_port));
+				link_up = (pciercx_cfg032.s.dlla && !pciercx_cfg032.s.lt);
+				if (!link_up)
+					result = -1;
+			}
+#ifdef DEBUG_PCIE
+			else
+				printf("N%d.PCIE%d: Link requested a retry\n", node, pcie_port);
+#endif
+		}
+		if (result < 0) {
+			int ltssm_state = __cvmx_pcie_rc_get_ltssm_state(node, pcie_port);
+
+			printf("N%d:PCIE%d: Link timeout, probably the slot is empty (LTSSM %s)\n",
+			       node, pcie_port, cvmx_pcie_get_ltssm_string(ltssm_state));
+			return -1;
+		}
+		retry_count++;
+	}
+
+	pciercx_cfg032.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG032(pcie_port));
+	/*
+	 * Errata PEM-28816: Link retrain initiated at GEN1 can cause PCIE
+	 * link to hang. For Gen1 links we must disable equalization
+	 */
+	if (pciercx_cfg032.s.ls == 1) {
+#ifdef DEBUG_PCIE
+		printf("N%d:PCIE%d: Disabling equalization for GEN1 Link\n", node, pcie_port);
+#endif
+		pciercx_cfg548.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG548(pcie_port));
+		pciercx_cfg548.s.ed = 1;
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG548(pcie_port), pciercx_cfg548.u32);
+	}
+
+	/* Errata PCIE-29440: Atomic operations to work properly */
+	pciercx_cfg038.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG038(pcie_port));
+	pciercx_cfg038.s.atom_op_eb = 0;
+	pciercx_cfg038.s.atom_op = 1;
+	CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG038(pcie_port), pciercx_cfg038.u32);
+
+	/* Errata PCIE-29566 PEM Link Hangs after going into L1 */
+	pciercx_cfg548.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG548(pcie_port));
+	pciercx_cfg548.s.grizdnc = 0;
+	CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIERCX_CFG548(pcie_port), pciercx_cfg548.u32);
+
+	if (result < 0)
+		return result;
+
+	/* Display the link status */
+	pciercx_cfg032.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIERCX_CFG032(pcie_port));
+	printf("N%d:PCIe: Port %d link active, %d lanes, speed gen%d\n", node, pcie_port,
+	       pciercx_cfg032.s.nlw, pciercx_cfg032.s.ls);
+
+	pcie_link_initialized[node][pcie_port] = true;
+	return 0;
+}
+
+/**
+ * Initialize a PCIe port for use in host(RC) mode. It doesn't enumerate the bus.
+ *
+ * @param pcie_port PCIe port to initialize for a node
+ *
+ * @return Zero on success
+ */
+int cvmx_pcie_rc_initialize(int pcie_port)
+{
+	int result;
+
+	if (OCTEON_IS_OCTEON2() || OCTEON_IS_MODEL(OCTEON_CN70XX))
+		result = __cvmx_pcie_rc_initialize_gen2(pcie_port);
+	else
+		result = __cvmx_pcie_rc_initialize_gen2_v3(pcie_port);
+
+	if (result == 0)
+		cvmx_error_enable_group(CVMX_ERROR_GROUP_PCI, pcie_port);
+	return result;
+}
+
+/**
+ * Shutdown a PCIe port and put it in reset
+ *
+ * @param pcie_port PCIe port to shutdown for a node
+ *
+ * @return Zero on success
+ */
+int cvmx_pcie_rc_shutdown(int pcie_port)
+{
+	u64 ciu_soft_prst_reg;
+	cvmx_ciu_soft_prst_t ciu_soft_prst;
+	int node;
+
+	/* Shutdown only if PEM is in RC mode */
+	if (!cvmx_pcie_is_host_mode(pcie_port))
+		return -1;
+
+	node = (pcie_port >> 4) & 0x3;
+	pcie_port &= 0x3;
+	cvmx_error_disable_group(CVMX_ERROR_GROUP_PCI, pcie_port);
+	/* Wait for all pending operations to complete */
+	if (CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_PEMX_CPL_LUT_VALID(pcie_port),
+				       cvmx_pemx_cpl_lut_valid_t, tag, ==,
+				       0, 2000))
+		debug("PCIe: Port %d shutdown timeout\n", pcie_port);
+
+	if (OCTEON_IS_OCTEON3()) {
+		ciu_soft_prst_reg = CVMX_RST_SOFT_PRSTX(pcie_port);
+	} else {
+		ciu_soft_prst_reg = (pcie_port) ? CVMX_CIU_SOFT_PRST1 :
+			CVMX_CIU_SOFT_PRST;
+	}
+
+	/* Force reset */
+	ciu_soft_prst.u64 = CVMX_READ_CSR(ciu_soft_prst_reg);
+	ciu_soft_prst.s.soft_prst = 1;
+	CVMX_WRITE_CSR(ciu_soft_prst_reg, ciu_soft_prst.u64);
+
+	return 0;
+}
+
+/**
+ * @INTERNAL
+ * Build a PCIe config space request address for a device
+ *
+ * @param node	    node
+ * @param port	    PCIe port (relative to the node) to access
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ *
+ * @return 64bit Octeon IO address
+ */
+static uint64_t __cvmx_pcie_build_config_addr(int node, int port, int bus, int dev, int fn, int reg)
+{
+	cvmx_pcie_address_t pcie_addr;
+	cvmx_pciercx_cfg006_t pciercx_cfg006;
+
+	pciercx_cfg006.u32 = cvmx_pcie_cfgx_read_node(node, port,
+						      CVMX_PCIERCX_CFG006(port));
+	if (bus <= pciercx_cfg006.s.pbnum && dev != 0)
+		return 0;
+
+	pcie_addr.u64 = 0;
+	pcie_addr.config.upper = 2;
+	pcie_addr.config.io = 1;
+	pcie_addr.config.did = 3;
+	pcie_addr.config.subdid = 1;
+	pcie_addr.config.node = node;
+	pcie_addr.config.es = _CVMX_PCIE_ES;
+	pcie_addr.config.port = port;
+	/* Always use config type 0 */
+	if (pciercx_cfg006.s.pbnum == 0)
+		pcie_addr.config.ty = (bus > pciercx_cfg006.s.pbnum + 1);
+	else
+		pcie_addr.config.ty = (bus > pciercx_cfg006.s.pbnum);
+	pcie_addr.config.bus = bus;
+	pcie_addr.config.dev = dev;
+	pcie_addr.config.func = fn;
+	pcie_addr.config.reg = reg;
+	return pcie_addr.u64;
+}
+
+/**
+ * Read 8bits from a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ *
+ * @return Result of the read
+ */
+uint8_t cvmx_pcie_config_read8(int pcie_port, int bus, int dev, int fn, int reg)
+{
+	u64 address;
+	int node = (pcie_port >> 4) & 0x3;
+
+	pcie_port &= 0x3;
+	address = __cvmx_pcie_build_config_addr(node, pcie_port, bus, dev, fn, reg);
+	if (address)
+		return cvmx_read64_uint8(address);
+	else
+		return 0xff;
+}
+
+/**
+ * Read 16bits from a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ *
+ * @return Result of the read
+ */
+uint16_t cvmx_pcie_config_read16(int pcie_port, int bus, int dev, int fn, int reg)
+{
+	u64 address;
+	int node = (pcie_port >> 4) & 0x3;
+
+	pcie_port &= 0x3;
+	address = __cvmx_pcie_build_config_addr(node, pcie_port, bus, dev, fn, reg);
+	if (address)
+		return le16_to_cpu(cvmx_read64_uint16(address));
+	else
+		return 0xffff;
+}
+
+static uint32_t __cvmx_pcie_config_read32(int node, int pcie_port, int bus, int dev, int func,
+					  int reg, int lst)
+{
+	u64 address;
+
+	address = __cvmx_pcie_build_config_addr(node, pcie_port, bus, dev, func, reg);
+	if (lst) {
+		if (address && pcie_link_initialized[node][pcie_port])
+			return le32_to_cpu(cvmx_read64_uint32(address));
+		else
+			return 0xffffffff;
+	} else if (address) {
+		return le32_to_cpu(cvmx_read64_uint32(address));
+	} else {
+		return 0xffffffff;
+	}
+}
+
+/**
+ * Read 32bits from a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ *
+ * @return Result of the read
+ */
+uint32_t cvmx_pcie_config_read32(int pcie_port, int bus, int dev, int fn, int reg)
+{
+	int node = (pcie_port >> 4) & 0x3;
+
+	pcie_port &= 0x3;
+	return __cvmx_pcie_config_read32(node, pcie_port, bus, dev, fn, reg,
+					 pcie_link_initialized[node][pcie_port]);
+}
+
+/**
+ * Write 8bits to a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ * @param val       Value to write
+ */
+void cvmx_pcie_config_write8(int pcie_port, int bus, int dev, int fn, int reg, uint8_t val)
+{
+	u64 address;
+	int node = (pcie_port >> 4) & 0x3;
+
+	pcie_port &= 0x3;
+	address = __cvmx_pcie_build_config_addr(node, pcie_port, bus, dev, fn, reg);
+	if (address)
+		cvmx_write64_uint8(address, val);
+}
+
+/**
+ * Write 16bits to a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ * @param val       Value to write
+ */
+void cvmx_pcie_config_write16(int pcie_port, int bus, int dev, int fn, int reg, uint16_t val)
+{
+	u64 address;
+	int node = (pcie_port >> 4) & 0x3;
+
+	pcie_port &= 0x3;
+	address = __cvmx_pcie_build_config_addr(node, pcie_port, bus, dev, fn, reg);
+	if (address)
+		cvmx_write64_uint16(address, cpu_to_le16(val));
+}
+
+/**
+ * Write 32bits to a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ * @param val       Value to write
+ */
+void cvmx_pcie_config_write32(int pcie_port, int bus, int dev, int fn, int reg, uint32_t val)
+{
+	u64 address;
+	int node = (pcie_port >> 4) & 0x3;
+
+	pcie_port &= 0x3;
+	address = __cvmx_pcie_build_config_addr(node, pcie_port, bus, dev, fn, reg);
+	if (address)
+		cvmx_write64_uint32(address, cpu_to_le32(val));
+}
+
+/**
+ * Read a PCIe config space register indirectly. This is used for
+ * registers of the form PCIEEP_CFG??? and PCIERC?_CFG???.
+ *
+ * @param pcie_port  PCIe port to read from
+ * @param cfg_offset Address to read
+ *
+ * @return Value read
+ */
+uint32_t cvmx_pcie_cfgx_read(int pcie_port, uint32_t cfg_offset)
+{
+	return cvmx_pcie_cfgx_read_node(0, pcie_port, cfg_offset);
+}
+
+uint32_t cvmx_pcie_cfgx_read_node(int node, int pcie_port, uint32_t cfg_offset)
+{
+	cvmx_pemx_cfg_rd_t pemx_cfg_rd;
+
+	pemx_cfg_rd.u64 = 0;
+	pemx_cfg_rd.s.addr = cfg_offset;
+	CVMX_WRITE_CSR(CVMX_PEMX_CFG_RD(pcie_port), pemx_cfg_rd.u64);
+	pemx_cfg_rd.u64 = CVMX_READ_CSR(CVMX_PEMX_CFG_RD(pcie_port));
+
+	return pemx_cfg_rd.s.data;
+}
+
+/**
+ * Write a PCIe config space register indirectly. This is used for
+ * registers of the form PCIEEP_CFG??? and PCIERC?_CFG???.
+ *
+ * @param pcie_port  PCIe port to write to
+ * @param cfg_offset Address to write
+ * @param val        Value to write
+ */
+void cvmx_pcie_cfgx_write(int pcie_port, uint32_t cfg_offset, uint32_t val)
+{
+	cvmx_pcie_cfgx_write_node(0, pcie_port, cfg_offset, val);
+}
+
+void cvmx_pcie_cfgx_write_node(int node, int pcie_port, uint32_t cfg_offset, uint32_t val)
+{
+	cvmx_pemx_cfg_wr_t pemx_cfg_wr;
+
+	pemx_cfg_wr.u64 = 0;
+	pemx_cfg_wr.s.addr = cfg_offset;
+	pemx_cfg_wr.s.data = val;
+	CVMX_WRITE_CSR(CVMX_PEMX_CFG_WR(pcie_port), pemx_cfg_wr.u64);
+}
+
+extern int cvmx_pcie_is_host_mode(int pcie_port);
+
+/**
+ * Initialize a PCIe port for use in target(EP) mode.
+ *
+ * @param pcie_port PCIe port to initialize for a node
+ *
+ * @return Zero on success
+ */
+int cvmx_pcie_ep_initialize(int pcie_port)
+{
+	int node = (pcie_port >> 4) & 0x3;
+
+	if (cvmx_pcie_is_host_mode(pcie_port))
+		return -1;
+
+	pcie_port &= 0x3;
+
+	/* CN63XX Pass 1.0 errata G-14395 requires the QLM De-emphasis be
+	 * programmed
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN63XX_PASS1_0)) {
+		if (pcie_port) {
+			cvmx_ciu_qlm1_t ciu_qlm;
+
+			ciu_qlm.u64 = csr_rd(CVMX_CIU_QLM1);
+			ciu_qlm.s.txbypass = 1;
+			ciu_qlm.s.txdeemph = 5;
+			ciu_qlm.s.txmargin = 0x17;
+			csr_wr(CVMX_CIU_QLM1, ciu_qlm.u64);
+		} else {
+			cvmx_ciu_qlm0_t ciu_qlm;
+
+			ciu_qlm.u64 = csr_rd(CVMX_CIU_QLM0);
+			ciu_qlm.s.txbypass = 1;
+			ciu_qlm.s.txdeemph = 5;
+			ciu_qlm.s.txmargin = 0x17;
+			csr_wr(CVMX_CIU_QLM0, ciu_qlm.u64);
+		}
+	}
+
+	/* Enable bus master and memory */
+	CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIEEPX_CFG001(pcie_port), 0x6);
+
+	/* Max Payload Size (PCIE*_CFG030[MPS]) */
+	/* Max Read Request Size (PCIE*_CFG030[MRRS]) */
+	/* Relaxed-order, no-snoop enables (PCIE*_CFG030[RO_EN,NS_EN] */
+	/* Error Message Enables (PCIE*_CFG030[CE_EN,NFE_EN,FE_EN,UR_EN]) */
+	{
+		cvmx_pcieepx_cfg030_t pcieepx_cfg030;
+
+		pcieepx_cfg030.u32 = CVMX_PCIE_CFGX_READ(pcie_port, CVMX_PCIEEPX_CFG030(pcie_port));
+		pcieepx_cfg030.s.mps = MPS_CN6XXX;
+		pcieepx_cfg030.s.mrrs = MRRS_CN6XXX;
+		pcieepx_cfg030.s.ro_en = 1;  /* Enable relaxed ordering. */
+		pcieepx_cfg030.s.ns_en = 1;  /* Enable no snoop. */
+		pcieepx_cfg030.s.ce_en = 1;  /* Correctable error reporting enable. */
+		pcieepx_cfg030.s.nfe_en = 1; /* Non-fatal error reporting enable. */
+		pcieepx_cfg030.s.fe_en = 1;  /* Fatal error reporting enable. */
+		pcieepx_cfg030.s.ur_en = 1;  /* Unsupported request reporting enable. */
+		CVMX_PCIE_CFGX_WRITE(pcie_port, CVMX_PCIEEPX_CFG030(pcie_port), pcieepx_cfg030.u32);
+	}
+
+	/* Max Payload Size (DPI_SLI_PRTX_CFG[MPS]) must match
+	 * PCIE*_CFG030[MPS]
+	 */
+	/* Max Read Request Size (DPI_SLI_PRTX_CFG[MRRS]) must not
+	 * exceed PCIE*_CFG030[MRRS]
+	 */
+	cvmx_dpi_sli_prtx_cfg_t prt_cfg;
+	cvmx_sli_s2m_portx_ctl_t sli_s2m_portx_ctl;
+
+	prt_cfg.u64 = CVMX_READ_CSR(CVMX_DPI_SLI_PRTX_CFG(pcie_port));
+	prt_cfg.s.mps = MPS_CN6XXX;
+	prt_cfg.s.mrrs = MRRS_CN6XXX;
+	/* Max outstanding load request. */
+	prt_cfg.s.molr = 32;
+	CVMX_WRITE_CSR(CVMX_DPI_SLI_PRTX_CFG(pcie_port), prt_cfg.u64);
+
+	sli_s2m_portx_ctl.u64 = CVMX_READ_CSR(CVMX_PEXP_SLI_S2M_PORTX_CTL(pcie_port));
+	if (!(OCTEON_IS_MODEL(OCTEON_CN78XX) || OCTEON_IS_MODEL(OCTEON_CN73XX) ||
+	      OCTEON_IS_MODEL(OCTEON_CNF75XX)))
+		sli_s2m_portx_ctl.cn61xx.mrrs = MRRS_CN6XXX;
+	CVMX_WRITE_CSR(CVMX_PEXP_SLI_S2M_PORTX_CTL(pcie_port), sli_s2m_portx_ctl.u64);
+
+	/* Setup Mem access SubDID 12 to access Host memory */
+	cvmx_sli_mem_access_subidx_t mem_access_subid;
+
+	mem_access_subid.u64 = 0;
+	mem_access_subid.s.port = pcie_port; /* Port the request is sent to. */
+	mem_access_subid.s.nmerge = 0;	     /* Merging is allowed in this window. */
+	mem_access_subid.s.esr = 0;	     /* Endian-swap for Reads. */
+	mem_access_subid.s.esw = 0;	     /* Endian-swap for Writes. */
+	mem_access_subid.s.wtype = 0;	     /* "No snoop" and "Relaxed ordering" are not set */
+	mem_access_subid.s.rtype = 0;	     /* "No snoop" and "Relaxed ordering" are not set */
+	/* PCIe Address Bits <63:34>. */
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+		mem_access_subid.cn68xx.ba = 0;
+	else
+		mem_access_subid.cn63xx.ba = 0;
+	CVMX_WRITE_CSR(CVMX_PEXP_SLI_MEM_ACCESS_SUBIDX(12 + pcie_port * 4), mem_access_subid.u64);
+
+	return 0;
+}
+
+/**
+ * Wait for posted PCIe read/writes to reach the other side of
+ * the internal PCIe switch. This will insure that core
+ * read/writes are posted before anything after this function
+ * is called. This may be necessary when writing to memory that
+ * will later be read using the DMA/PKT engines.
+ *
+ * @param pcie_port PCIe port to wait for
+ */
+void cvmx_pcie_wait_for_pending(int pcie_port)
+{
+	cvmx_sli_data_out_cnt_t sli_data_out_cnt;
+	int a;
+	int b;
+	int c;
+
+	sli_data_out_cnt.u64 = csr_rd(CVMX_PEXP_SLI_DATA_OUT_CNT);
+	if (pcie_port) {
+		if (!sli_data_out_cnt.s.p1_fcnt)
+			return;
+		a = sli_data_out_cnt.s.p1_ucnt;
+		b = (a + sli_data_out_cnt.s.p1_fcnt - 1) & 0xffff;
+	} else {
+		if (!sli_data_out_cnt.s.p0_fcnt)
+			return;
+		a = sli_data_out_cnt.s.p0_ucnt;
+		b = (a + sli_data_out_cnt.s.p0_fcnt - 1) & 0xffff;
+	}
+
+	while (1) {
+		sli_data_out_cnt.u64 = csr_rd(CVMX_PEXP_SLI_DATA_OUT_CNT);
+		c = (pcie_port) ? sli_data_out_cnt.s.p1_ucnt :
+			sli_data_out_cnt.s.p0_ucnt;
+		if (a <= b) {
+			if (c < a || c > b)
+				return;
+		} else {
+			if (c > b && c < a)
+				return;
+		}
+	}
+}
+
+/**
+ * Returns if a PCIe port is in host or target mode.
+ *
+ * @param pcie_port PCIe port number (PEM number)
+ *
+ * @return 0 if PCIe port is in target mode, !0 if in host mode.
+ */
+int cvmx_pcie_is_host_mode(int pcie_port)
+{
+	int node = (pcie_port >> 4) & 0x3;
+	cvmx_mio_rst_ctlx_t mio_rst_ctl;
+
+	pcie_port &= 0x3;
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX) || OCTEON_IS_MODEL(OCTEON_CN73XX)) {
+		cvmx_pemx_strap_t strap;
+
+		strap.u64 = CVMX_READ_CSR(CVMX_PEMX_STRAP(pcie_port));
+		return (strap.cn78xx.pimode == 3);
+	} else if (OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+		cvmx_rst_ctlx_t rst_ctl;
+
+		rst_ctl.u64 = csr_rd(CVMX_RST_CTLX(pcie_port));
+		return !!rst_ctl.s.host_mode;
+	}
+
+	mio_rst_ctl.u64 = csr_rd(CVMX_MIO_RST_CTLX(pcie_port));
+	if (OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX))
+		return mio_rst_ctl.s.prtmode != 0;
+	else
+		return !!mio_rst_ctl.s.host_mode;
+}
diff --git a/arch/mips/mach-octeon/cvmx-qlm.c b/arch/mips/mach-octeon/cvmx-qlm.c
new file mode 100644
index 0000000..970e34a
--- /dev/null
+++ b/arch/mips/mach-octeon/cvmx-qlm.c
@@ -0,0 +1,2350 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper utilities for qlm.
+ */
+
+#include <log.h>
+#include <time.h>
+#include <asm/global_data.h>
+#include <linux/delay.h>
+
+#include <mach/cvmx-regs.h>
+#include <mach/octeon-model.h>
+#include <mach/cvmx-fuse.h>
+#include <mach/octeon-feature.h>
+#include <mach/cvmx-qlm.h>
+#include <mach/octeon_qlm.h>
+#include <mach/cvmx-pcie.h>
+#include <mach/cvmx-helper.h>
+#include <mach/cvmx-helper-util.h>
+#include <mach/cvmx-bgxx-defs.h>
+#include <mach/cvmx-ciu-defs.h>
+#include <mach/cvmx-gmxx-defs.h>
+#include <mach/cvmx-gserx-defs.h>
+#include <mach/cvmx-mio-defs.h>
+#include <mach/cvmx-pciercx-defs.h>
+#include <mach/cvmx-pemx-defs.h>
+#include <mach/cvmx-pexp-defs.h>
+#include <mach/cvmx-rst-defs.h>
+#include <mach/cvmx-sata-defs.h>
+#include <mach/cvmx-sli-defs.h>
+#include <mach/cvmx-sriomaintx-defs.h>
+#include <mach/cvmx-sriox-defs.h>
+
+#include <mach/cvmx-helper.h>
+#include <mach/cvmx-helper-jtag.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Their is a copy of this in bootloader qlm configuration, make sure
+ * to update both the places till i figure out
+ */
+#define R_25G_REFCLK100		 0x0
+#define R_5G_REFCLK100		 0x1
+#define R_8G_REFCLK100		 0x2
+#define R_125G_REFCLK15625_KX	 0x3
+#define R_3125G_REFCLK15625_XAUI 0x4
+#define R_103125G_REFCLK15625_KR 0x5
+#define R_125G_REFCLK15625_SGMII 0x6
+#define R_5G_REFCLK15625_QSGMII	 0x7
+#define R_625G_REFCLK15625_RXAUI 0x8
+#define R_25G_REFCLK125		 0x9
+#define R_5G_REFCLK125		 0xa
+#define R_8G_REFCLK125		 0xb
+
+static const int REF_100MHZ = 100000000;
+static const int REF_125MHZ = 125000000;
+static const int REF_156MHZ = 156250000;
+
+static qlm_jtag_uint32_t *__cvmx_qlm_jtag_xor_ref;
+
+/**
+ * Return the number of QLMs supported by the chip
+ *
+ * @return  Number of QLMs
+ */
+int cvmx_qlm_get_num(void)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+		return 5;
+	else if (OCTEON_IS_MODEL(OCTEON_CN66XX))
+		return 3;
+	else if (OCTEON_IS_MODEL(OCTEON_CN63XX))
+		return 3;
+	else if (OCTEON_IS_MODEL(OCTEON_CN61XX))
+		return 3;
+	else if (OCTEON_IS_MODEL(OCTEON_CNF71XX))
+		return 2;
+	else if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return 8;
+	else if (OCTEON_IS_MODEL(OCTEON_CN73XX))
+		return 7;
+	else if (OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		return 9;
+	return 0;
+}
+
+/**
+ * Return the qlm number based on the interface
+ *
+ * @param xiface  interface to look up
+ *
+ * @return the qlm number based on the xiface
+ */
+int cvmx_qlm_interface(int xiface)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (OCTEON_IS_MODEL(OCTEON_CN61XX)) {
+		return (xi.interface == 0) ? 2 : 0;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX)) {
+		return 2 - xi.interface;
+	} else if (OCTEON_IS_MODEL(OCTEON_CNF71XX)) {
+		if (xi.interface == 0)
+			return 0;
+
+		debug("Warning: %s: Invalid interface %d\n",
+		      __func__, xi.interface);
+	} else if (octeon_has_feature(OCTEON_FEATURE_BGX)) {
+		debug("Warning: not supported\n");
+		return -1;
+	}
+
+	/* Must be cn68XX */
+	switch (xi.interface) {
+	case 1:
+		return 0;
+	default:
+		return xi.interface;
+	}
+
+	return -1;
+}
+
+/**
+ * Return the qlm number based for a port in the interface
+ *
+ * @param xiface  interface to look up
+ * @param index  index in an interface
+ *
+ * @return the qlm number based on the xiface
+ */
+int cvmx_qlm_lmac(int xiface, int index)
+{
+	struct cvmx_xiface xi = cvmx_helper_xiface_to_node_interface(xiface);
+
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+		cvmx_bgxx_cmr_global_config_t gconfig;
+		cvmx_gserx_phy_ctl_t phy_ctl;
+		cvmx_gserx_cfg_t gserx_cfg;
+		int qlm;
+
+		if (xi.interface < 6) {
+			if (xi.interface < 2) {
+				gconfig.u64 =
+					csr_rd_node(xi.node,
+						    CVMX_BGXX_CMR_GLOBAL_CONFIG(xi.interface));
+				if (gconfig.s.pmux_sds_sel)
+					qlm = xi.interface + 2; /* QLM 2 or 3 */
+				else
+					qlm = xi.interface; /* QLM 0 or 1 */
+			} else {
+				qlm = xi.interface + 2; /* QLM 4-7 */
+			}
+
+			/* make sure the QLM is powered up and out of reset */
+			phy_ctl.u64 = csr_rd_node(xi.node, CVMX_GSERX_PHY_CTL(qlm));
+			if (phy_ctl.s.phy_pd || phy_ctl.s.phy_reset)
+				return -1;
+			gserx_cfg.u64 = csr_rd_node(xi.node, CVMX_GSERX_CFG(qlm));
+			if (gserx_cfg.s.bgx)
+				return qlm;
+			else
+				return -1;
+		} else if (xi.interface <= 7) { /* ILK */
+			int qlm;
+
+			for (qlm = 4; qlm < 8; qlm++) {
+				/* Make sure the QLM is powered and out of reset */
+				phy_ctl.u64 = csr_rd_node(xi.node, CVMX_GSERX_PHY_CTL(qlm));
+				if (phy_ctl.s.phy_pd || phy_ctl.s.phy_reset)
+					continue;
+				/* Make sure the QLM is in ILK mode */
+				gserx_cfg.u64 = csr_rd_node(xi.node, CVMX_GSERX_CFG(qlm));
+				if (gserx_cfg.s.ila)
+					return qlm;
+			}
+		}
+		return -1;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN73XX)) {
+		cvmx_gserx_phy_ctl_t phy_ctl;
+		cvmx_gserx_cfg_t gserx_cfg;
+		int qlm;
+
+		/* (interface)0->QLM2, 1->QLM3, 2->DLM5/3->DLM6 */
+		if (xi.interface < 2) {
+			qlm = xi.interface + 2; /* (0,1)->ret(2,3) */
+
+			phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(qlm));
+			if (phy_ctl.s.phy_pd || phy_ctl.s.phy_reset)
+				return -1;
+
+			gserx_cfg.u64 = csr_rd(CVMX_GSERX_CFG(qlm));
+			if (gserx_cfg.s.bgx)
+				return qlm;
+			else
+				return -1;
+		} else if (xi.interface == 2) {
+			cvmx_gserx_cfg_t g1, g2;
+
+			g1.u64 = csr_rd(CVMX_GSERX_CFG(5));
+			g2.u64 = csr_rd(CVMX_GSERX_CFG(6));
+			/* Check if both QLM5 & QLM6 are BGX2 */
+			if (g2.s.bgx) {
+				if (g1.s.bgx) {
+					cvmx_gserx_phy_ctl_t phy_ctl1;
+
+					phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(5));
+					phy_ctl1.u64 = csr_rd(CVMX_GSERX_PHY_CTL(6));
+					if ((phy_ctl.s.phy_pd || phy_ctl.s.phy_reset) &&
+					    (phy_ctl1.s.phy_pd || phy_ctl1.s.phy_reset))
+						return -1;
+					if (index >= 2)
+						return 6;
+					return 5;
+				} else { /* QLM6 is BGX2 */
+					phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(6));
+					if (phy_ctl.s.phy_pd || phy_ctl.s.phy_reset)
+						return -1;
+					return 6;
+				}
+			} else if (g1.s.bgx) {
+				phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(5));
+				if (phy_ctl.s.phy_pd || phy_ctl.s.phy_reset)
+					return -1;
+				return 5;
+			}
+		}
+		return -1;
+	} else if (OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+		cvmx_gserx_phy_ctl_t phy_ctl;
+		cvmx_gserx_cfg_t gserx_cfg;
+		int qlm;
+
+		if (xi.interface == 0) {
+			cvmx_gserx_cfg_t g1, g2;
+
+			g1.u64 = csr_rd(CVMX_GSERX_CFG(4));
+			g2.u64 = csr_rd(CVMX_GSERX_CFG(5));
+			/* Check if both QLM4 & QLM5 are BGX0 */
+			if (g2.s.bgx) {
+				if (g1.s.bgx) {
+					cvmx_gserx_phy_ctl_t phy_ctl1;
+
+					phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(4));
+					phy_ctl1.u64 = csr_rd(CVMX_GSERX_PHY_CTL(5));
+					if ((phy_ctl.s.phy_pd || phy_ctl.s.phy_reset) &&
+					    (phy_ctl1.s.phy_pd || phy_ctl1.s.phy_reset))
+						return -1;
+					if (index >= 2)
+						return 5;
+					return 4;
+				}
+
+				/* QLM5 is BGX0 */
+				phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(5));
+				if (phy_ctl.s.phy_pd || phy_ctl.s.phy_reset)
+					return -1;
+				return 5;
+			} else if (g1.s.bgx) {
+				phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(4));
+				if (phy_ctl.s.phy_pd || phy_ctl.s.phy_reset)
+					return -1;
+				return 4;
+			}
+		} else if (xi.interface < 2) {
+			qlm = (xi.interface == 1) ? 2 : 3;
+			gserx_cfg.u64 = csr_rd(CVMX_GSERX_CFG(qlm));
+			if (gserx_cfg.s.srio)
+				return qlm;
+		}
+		return -1;
+	}
+	return -1;
+}
+
+/**
+ * Return if only DLM5/DLM6/DLM5+DLM6 is used by BGX
+ *
+ * @param BGX  BGX to search for.
+ *
+ * @return muxes used 0 = DLM5+DLM6, 1 = DLM5, 2 = DLM6.
+ */
+int cvmx_qlm_mux_interface(int bgx)
+{
+	int mux = 0;
+	cvmx_gserx_cfg_t gser1, gser2;
+	int qlm1, qlm2;
+
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX) && bgx != 2)
+		return -1;
+	else if (OCTEON_IS_MODEL(OCTEON_CNF75XX) && bgx != 0)
+		return -1;
+
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX)) {
+		qlm1 = 5;
+		qlm2 = 6;
+	} else if (OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+		qlm1 = 4;
+		qlm2 = 5;
+	} else {
+		return -1;
+	}
+
+	gser1.u64 = csr_rd(CVMX_GSERX_CFG(qlm1));
+	gser2.u64 = csr_rd(CVMX_GSERX_CFG(qlm2));
+
+	if (gser1.s.bgx && gser2.s.bgx)
+		mux = 0;
+	else if (gser1.s.bgx)
+		mux = 1; // BGX2 is using DLM5 only
+	else if (gser2.s.bgx)
+		mux = 2; // BGX2 is using DLM6 only
+
+	return mux;
+}
+
+/**
+ * Return number of lanes for a given qlm
+ *
+ * @param qlm    QLM to examine
+ *
+ * @return  Number of lanes
+ */
+int cvmx_qlm_get_lanes(int qlm)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN61XX) && qlm == 1)
+		return 2;
+	else if (OCTEON_IS_MODEL(OCTEON_CNF71XX))
+		return 2;
+	else if (OCTEON_IS_MODEL(OCTEON_CN73XX))
+		return (qlm < 4) ? 4 /*QLM0,1,2,3*/ : 2 /*DLM4,5,6*/;
+	else if (OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		return (qlm == 2 || qlm == 3) ? 4 /*QLM2,3*/ : 2 /*DLM0,1,4,5*/;
+	return 4;
+}
+
+/**
+ * Get the QLM JTAG fields based on Octeon model on the supported chips.
+ *
+ * @return  qlm_jtag_field_t structure
+ */
+const __cvmx_qlm_jtag_field_t *cvmx_qlm_jtag_get_field(void)
+{
+	/* Figure out which JTAG chain description we're using */
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
+		return __cvmx_qlm_jtag_field_cn68xx;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN61XX) ||
+		   OCTEON_IS_MODEL(OCTEON_CNF71XX)) {
+		return __cvmx_qlm_jtag_field_cn66xx;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN63XX)) {
+		return __cvmx_qlm_jtag_field_cn63xx;
+	}
+
+	return NULL;
+}
+
+/**
+ * Get the QLM JTAG length by going through qlm_jtag_field for each
+ * Octeon model that is supported
+ *
+ * @return return the length.
+ */
+int cvmx_qlm_jtag_get_length(void)
+{
+	const __cvmx_qlm_jtag_field_t *qlm_ptr = cvmx_qlm_jtag_get_field();
+	int length = 0;
+
+	/* Figure out how many bits are in the JTAG chain */
+	while (qlm_ptr && qlm_ptr->name) {
+		if (qlm_ptr->stop_bit > length)
+			length = qlm_ptr->stop_bit + 1;
+		qlm_ptr++;
+	}
+	return length;
+}
+
+/**
+ * Initialize the QLM layer
+ */
+void cvmx_qlm_init(void)
+{
+	if (OCTEON_IS_OCTEON3())
+		return;
+
+	/* ToDo: No support for non-Octeon 3 yet */
+	printf("Please add support for unsupported Octeon SoC\n");
+}
+
+/**
+ * Lookup the bit information for a JTAG field name
+ *
+ * @param name   Name to lookup
+ *
+ * @return Field info, or NULL on failure
+ */
+static const __cvmx_qlm_jtag_field_t *__cvmx_qlm_lookup_field(const char *name)
+{
+	const __cvmx_qlm_jtag_field_t *ptr = cvmx_qlm_jtag_get_field();
+
+	while (ptr->name) {
+		if (strcmp(name, ptr->name) == 0)
+			return ptr;
+		ptr++;
+	}
+
+	debug("%s: Illegal field name %s\n", __func__, name);
+	return NULL;
+}
+
+/**
+ * Get a field in a QLM JTAG chain
+ *
+ * @param qlm    QLM to get
+ * @param lane   Lane in QLM to get
+ * @param name   String name of field
+ *
+ * @return JTAG field value
+ */
+uint64_t cvmx_qlm_jtag_get(int qlm, int lane, const char *name)
+{
+	const __cvmx_qlm_jtag_field_t *field = __cvmx_qlm_lookup_field(name);
+	int qlm_jtag_length = cvmx_qlm_jtag_get_length();
+	int num_lanes = cvmx_qlm_get_lanes(qlm);
+
+	if (!field)
+		return 0;
+
+	/* Capture the current settings */
+	cvmx_helper_qlm_jtag_capture(qlm);
+	/*
+	 * Shift past lanes we don't care about. CN6XXX/7XXX shifts lane 0 first,
+	 * CN3XXX/5XXX shifts lane 3 first
+	 */
+	/* Shift to the start of the field */
+	cvmx_helper_qlm_jtag_shift_zeros(qlm,
+					 qlm_jtag_length * (num_lanes - 1 - lane));
+	cvmx_helper_qlm_jtag_shift_zeros(qlm, field->start_bit);
+	/* Shift out the value and return it */
+	return cvmx_helper_qlm_jtag_shift(qlm, field->stop_bit - field->start_bit + 1, 0);
+}
+
+/**
+ * Set a field in a QLM JTAG chain
+ *
+ * @param qlm    QLM to set
+ * @param lane   Lane in QLM to set, or -1 for all lanes
+ * @param name   String name of field
+ * @param value  Value of the field
+ */
+void cvmx_qlm_jtag_set(int qlm, int lane, const char *name, uint64_t value)
+{
+	int i, l;
+	u32 shift_values[CVMX_QLM_JTAG_UINT32];
+	int num_lanes = cvmx_qlm_get_lanes(qlm);
+	const __cvmx_qlm_jtag_field_t *field = __cvmx_qlm_lookup_field(name);
+	int qlm_jtag_length = cvmx_qlm_jtag_get_length();
+	int total_length = qlm_jtag_length * num_lanes;
+	int bits = 0;
+
+	if (!field)
+		return;
+
+	/* Get the current state */
+	cvmx_helper_qlm_jtag_capture(qlm);
+	for (i = 0; i < CVMX_QLM_JTAG_UINT32; i++)
+		shift_values[i] = cvmx_helper_qlm_jtag_shift(qlm, 32, 0);
+
+	/* Put new data in our local array */
+	for (l = 0; l < num_lanes; l++) {
+		u64 new_value = value;
+		int bits;
+		int adj_lanes;
+
+		if (l != lane && lane != -1)
+			continue;
+
+		adj_lanes = (num_lanes - 1 - l) * qlm_jtag_length;
+
+		for (bits = field->start_bit + adj_lanes; bits <= field->stop_bit + adj_lanes;
+		     bits++) {
+			if (new_value & 1)
+				shift_values[bits / 32] |= 1 << (bits & 31);
+			else
+				shift_values[bits / 32] &= ~(1 << (bits & 31));
+			new_value >>= 1;
+		}
+	}
+
+	/* Shift out data and xor with reference */
+	while (bits < total_length) {
+		u32 shift = shift_values[bits / 32] ^ __cvmx_qlm_jtag_xor_ref[qlm][bits / 32];
+		int width = total_length - bits;
+
+		if (width > 32)
+			width = 32;
+		cvmx_helper_qlm_jtag_shift(qlm, width, shift);
+		bits += 32;
+	}
+
+	/* Update the new data */
+	cvmx_helper_qlm_jtag_update(qlm);
+
+	/*
+	 * Always give the QLM 1ms to settle after every update. This may not
+	 * always be needed, but some of the options make significant
+	 * electrical changes
+	 */
+	udelay(1000);
+}
+
+/**
+ * Errata G-16094: QLM Gen2 Equalizer Default Setting Change.
+ * CN68XX pass 1.x and CN66XX pass 1.x QLM tweak. This function tweaks the
+ * JTAG setting for a QLMs to run better at 5 and 6.25Ghz.
+ */
+void __cvmx_qlm_speed_tweak(void)
+{
+	cvmx_mio_qlmx_cfg_t qlm_cfg;
+	int num_qlms = cvmx_qlm_get_num();
+	int qlm;
+
+	/* Workaround for Errata (G-16467) */
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX_PASS2_X)) {
+		for (qlm = 0; qlm < num_qlms; qlm++) {
+			int ir50dac;
+
+			/*
+			 * This workaround only applies to QLMs running at
+			 * 6.25Ghz
+			 */
+			if (cvmx_qlm_get_gbaud_mhz(qlm) == 6250) {
+#ifdef CVMX_QLM_DUMP_STATE
+				debug("%s:%d: QLM%d: Applying workaround for Errata G-16467\n",
+				      __func__, __LINE__, qlm);
+				cvmx_qlm_display_registers(qlm);
+				debug("\n");
+#endif
+				cvmx_qlm_jtag_set(qlm, -1, "cfg_cdr_trunc", 0);
+				/* Hold the QLM in reset */
+				cvmx_qlm_jtag_set(qlm, -1, "cfg_rst_n_set", 0);
+				cvmx_qlm_jtag_set(qlm, -1, "cfg_rst_n_clr", 1);
+				/* Forcfe TX to be idle */
+				cvmx_qlm_jtag_set(qlm, -1, "cfg_tx_idle_clr", 0);
+				cvmx_qlm_jtag_set(qlm, -1, "cfg_tx_idle_set", 1);
+				if (OCTEON_IS_MODEL(OCTEON_CN68XX_PASS2_0)) {
+					ir50dac = cvmx_qlm_jtag_get(qlm, 0, "ir50dac");
+					while (++ir50dac <= 31)
+						cvmx_qlm_jtag_set(qlm, -1, "ir50dac", ir50dac);
+				}
+				cvmx_qlm_jtag_set(qlm, -1, "div4_byp", 0);
+				cvmx_qlm_jtag_set(qlm, -1, "clkf_byp", 16);
+				cvmx_qlm_jtag_set(qlm, -1, "serdes_pll_byp", 1);
+				cvmx_qlm_jtag_set(qlm, -1, "spdsel_byp", 1);
+#ifdef CVMX_QLM_DUMP_STATE
+				debug("%s:%d: QLM%d: Done applying workaround for Errata G-16467\n",
+				      __func__, __LINE__, qlm);
+				cvmx_qlm_display_registers(qlm);
+				debug("\n\n");
+#endif
+				/*
+				 * The QLM will be taken out of reset later
+				 * when ILK/XAUI are initialized.
+				 */
+			}
+		}
+	} else if (OCTEON_IS_MODEL(OCTEON_CN68XX_PASS1_X) ||
+		   OCTEON_IS_MODEL(OCTEON_CN66XX_PASS1_X)) {
+		/* Loop through the QLMs */
+		for (qlm = 0; qlm < num_qlms; qlm++) {
+			/* Read the QLM speed */
+			qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(qlm));
+
+			/* If the QLM is at 6.25Ghz or 5Ghz then program JTAG */
+			if (qlm_cfg.s.qlm_spd == 5 || qlm_cfg.s.qlm_spd == 12 ||
+			    qlm_cfg.s.qlm_spd == 0 || qlm_cfg.s.qlm_spd == 6 ||
+			    qlm_cfg.s.qlm_spd == 11) {
+				cvmx_qlm_jtag_set(qlm, -1, "rx_cap_gen2", 0x1);
+				cvmx_qlm_jtag_set(qlm, -1, "rx_eq_gen2", 0x8);
+			}
+		}
+	}
+}
+
+/**
+ * Errata G-16174: QLM Gen2 PCIe IDLE DAC change.
+ * CN68XX pass 1.x, CN66XX pass 1.x and CN63XX pass 1.0-2.2 QLM tweak.
+ * This function tweaks the JTAG setting for a QLMs for PCIe to run better.
+ */
+void __cvmx_qlm_pcie_idle_dac_tweak(void)
+{
+	int num_qlms = 0;
+	int qlm;
+
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX_PASS1_X))
+		num_qlms = 5;
+	else if (OCTEON_IS_MODEL(OCTEON_CN66XX_PASS1_X))
+		num_qlms = 3;
+	else if (OCTEON_IS_MODEL(OCTEON_CN63XX))
+		num_qlms = 3;
+	else
+		return;
+
+	/* Loop through the QLMs */
+	for (qlm = 0; qlm < num_qlms; qlm++)
+		cvmx_qlm_jtag_set(qlm, -1, "idle_dac", 0x2);
+}
+
+void __cvmx_qlm_pcie_cfg_rxd_set_tweak(int qlm, int lane)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN6XXX) || OCTEON_IS_MODEL(OCTEON_CNF71XX))
+		cvmx_qlm_jtag_set(qlm, lane, "cfg_rxd_set", 0x1);
+}
+
+/**
+ * Get the speed (Gbaud) of the QLM in Mhz for a given node.
+ *
+ * @param node   node of the QLM
+ * @param qlm    QLM to examine
+ *
+ * @return Speed in Mhz
+ */
+int cvmx_qlm_get_gbaud_mhz_node(int node, int qlm)
+{
+	cvmx_gserx_lane_mode_t lane_mode;
+	cvmx_gserx_cfg_t cfg;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_MULTINODE))
+		return 0;
+
+	if (qlm >= 8)
+		return -1; /* FIXME for OCI */
+	/* Check if QLM is configured */
+	cfg.u64 = csr_rd_node(node, CVMX_GSERX_CFG(qlm));
+	if (cfg.u64 == 0)
+		return -1;
+	if (cfg.s.pcie) {
+		int pem = 0;
+		cvmx_pemx_cfg_t pemx_cfg;
+
+		switch (qlm) {
+		case 0: /* Either PEM0 x4 of PEM0 x8 */
+			pem = 0;
+			break;
+		case 1: /* Either PEM0 x4 of PEM1 x4 */
+			pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(0));
+			if (pemx_cfg.cn78xx.lanes8)
+				pem = 0;
+			else
+				pem = 1;
+			break;
+		case 2: /* Either PEM2 x4 of PEM2 x8 */
+			pem = 2;
+			break;
+		case 3: /* Either PEM2 x8 of PEM3 x4 or x8 */
+			/* Can be last 4 lanes of PEM2 */
+			pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(2));
+			if (pemx_cfg.cn78xx.lanes8) {
+				pem = 2;
+			} else {
+				pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(3));
+				if (pemx_cfg.cn78xx.lanes8)
+					pem = 3;
+				else
+					pem = 2;
+			}
+			break;
+		case 4: /* Either PEM3 x8 of PEM3 x4 */
+			pem = 3;
+			break;
+		default:
+			debug("QLM%d: Should be in PCIe mode\n", qlm);
+			break;
+		}
+		pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(pem));
+		switch (pemx_cfg.s.md) {
+		case 0: /* Gen1 */
+			return 2500;
+		case 1: /* Gen2 */
+			return 5000;
+		case 2: /* Gen3 */
+			return 8000;
+		default:
+			return 0;
+		}
+	} else {
+		lane_mode.u64 = csr_rd_node(node, CVMX_GSERX_LANE_MODE(qlm));
+		switch (lane_mode.s.lmode) {
+		case R_25G_REFCLK100:
+			return 2500;
+		case R_5G_REFCLK100:
+			return 5000;
+		case R_8G_REFCLK100:
+			return 8000;
+		case R_125G_REFCLK15625_KX:
+			return 1250;
+		case R_3125G_REFCLK15625_XAUI:
+			return 3125;
+		case R_103125G_REFCLK15625_KR:
+			return 10312;
+		case R_125G_REFCLK15625_SGMII:
+			return 1250;
+		case R_5G_REFCLK15625_QSGMII:
+			return 5000;
+		case R_625G_REFCLK15625_RXAUI:
+			return 6250;
+		case R_25G_REFCLK125:
+			return 2500;
+		case R_5G_REFCLK125:
+			return 5000;
+		case R_8G_REFCLK125:
+			return 8000;
+		default:
+			return 0;
+		}
+	}
+}
+
+/**
+ * Get the speed (Gbaud) of the QLM in Mhz.
+ *
+ * @param qlm    QLM to examine
+ *
+ * @return Speed in Mhz
+ */
+int cvmx_qlm_get_gbaud_mhz(int qlm)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN63XX)) {
+		if (qlm == 2) {
+			cvmx_gmxx_inf_mode_t inf_mode;
+
+			inf_mode.u64 = csr_rd(CVMX_GMXX_INF_MODE(0));
+			switch (inf_mode.s.speed) {
+			case 0:
+				return 5000; /* 5     Gbaud */
+			case 1:
+				return 2500; /* 2.5   Gbaud */
+			case 2:
+				return 2500; /* 2.5   Gbaud */
+			case 3:
+				return 1250; /* 1.25  Gbaud */
+			case 4:
+				return 1250; /* 1.25  Gbaud */
+			case 5:
+				return 6250; /* 6.25  Gbaud */
+			case 6:
+				return 5000; /* 5     Gbaud */
+			case 7:
+				return 2500; /* 2.5   Gbaud */
+			case 8:
+				return 3125; /* 3.125 Gbaud */
+			case 9:
+				return 2500; /* 2.5   Gbaud */
+			case 10:
+				return 1250; /* 1.25  Gbaud */
+			case 11:
+				return 5000; /* 5     Gbaud */
+			case 12:
+				return 6250; /* 6.25  Gbaud */
+			case 13:
+				return 3750; /* 3.75  Gbaud */
+			case 14:
+				return 3125; /* 3.125 Gbaud */
+			default:
+				return 0; /* Disabled */
+			}
+		} else {
+			cvmx_sriox_status_reg_t status_reg;
+
+			status_reg.u64 = csr_rd(CVMX_SRIOX_STATUS_REG(qlm));
+			if (status_reg.s.srio) {
+				cvmx_sriomaintx_port_0_ctl2_t sriomaintx_port_0_ctl2;
+
+				sriomaintx_port_0_ctl2.u32 =
+					csr_rd(CVMX_SRIOMAINTX_PORT_0_CTL2(qlm));
+				switch (sriomaintx_port_0_ctl2.s.sel_baud) {
+				case 1:
+					return 1250; /* 1.25  Gbaud */
+				case 2:
+					return 2500; /* 2.5   Gbaud */
+				case 3:
+					return 3125; /* 3.125 Gbaud */
+				case 4:
+					return 5000; /* 5     Gbaud */
+				case 5:
+					return 6250; /* 6.250 Gbaud */
+				default:
+					return 0; /* Disabled */
+				}
+			} else {
+				cvmx_pciercx_cfg032_t pciercx_cfg032;
+
+				pciercx_cfg032.u32 = csr_rd(CVMX_PCIERCX_CFG032(qlm));
+				switch (pciercx_cfg032.s.ls) {
+				case 1:
+					return 2500;
+				case 2:
+					return 5000;
+				case 4:
+					return 8000;
+				default: {
+					cvmx_mio_rst_boot_t mio_rst_boot;
+
+					mio_rst_boot.u64 = csr_rd(CVMX_MIO_RST_BOOT);
+					if (qlm == 0 && mio_rst_boot.s.qlm0_spd == 0xf)
+						return 0;
+
+					if (qlm == 1 && mio_rst_boot.s.qlm1_spd == 0xf)
+						return 0;
+
+					/* Best guess I can make */
+					return 5000;
+				}
+				}
+			}
+		}
+	} else if (OCTEON_IS_OCTEON2()) {
+		cvmx_mio_qlmx_cfg_t qlm_cfg;
+
+		qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(qlm));
+		switch (qlm_cfg.s.qlm_spd) {
+		case 0:
+			return 5000; /* 5     Gbaud */
+		case 1:
+			return 2500; /* 2.5   Gbaud */
+		case 2:
+			return 2500; /* 2.5   Gbaud */
+		case 3:
+			return 1250; /* 1.25  Gbaud */
+		case 4:
+			return 1250; /* 1.25  Gbaud */
+		case 5:
+			return 6250; /* 6.25  Gbaud */
+		case 6:
+			return 5000; /* 5     Gbaud */
+		case 7:
+			return 2500; /* 2.5   Gbaud */
+		case 8:
+			return 3125; /* 3.125 Gbaud */
+		case 9:
+			return 2500; /* 2.5   Gbaud */
+		case 10:
+			return 1250; /* 1.25  Gbaud */
+		case 11:
+			return 5000; /* 5     Gbaud */
+		case 12:
+			return 6250; /* 6.25  Gbaud */
+		case 13:
+			return 3750; /* 3.75  Gbaud */
+		case 14:
+			return 3125; /* 3.125 Gbaud */
+		default:
+			return 0; /* Disabled */
+		}
+	} else if (OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+		cvmx_gserx_dlmx_mpll_multiplier_t mpll_multiplier;
+		u64 meas_refclock;
+		u64 freq;
+
+		/* Measure the reference clock */
+		meas_refclock = cvmx_qlm_measure_clock(qlm);
+		/* Multiply to get the final frequency */
+		mpll_multiplier.u64 = csr_rd(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0));
+		freq = meas_refclock * mpll_multiplier.s.mpll_multiplier;
+		freq = (freq + 500000) / 1000000;
+
+		return freq;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+		return cvmx_qlm_get_gbaud_mhz_node(cvmx_get_node_num(), qlm);
+	} else if (OCTEON_IS_MODEL(OCTEON_CN73XX) || OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+		cvmx_gserx_lane_mode_t lane_mode;
+
+		lane_mode.u64 = csr_rd(CVMX_GSERX_LANE_MODE(qlm));
+		switch (lane_mode.s.lmode) {
+		case R_25G_REFCLK100:
+			return 2500;
+		case R_5G_REFCLK100:
+			return 5000;
+		case R_8G_REFCLK100:
+			return 8000;
+		case R_125G_REFCLK15625_KX:
+			return 1250;
+		case R_3125G_REFCLK15625_XAUI:
+			return 3125;
+		case R_103125G_REFCLK15625_KR:
+			return 10312;
+		case R_125G_REFCLK15625_SGMII:
+			return 1250;
+		case R_5G_REFCLK15625_QSGMII:
+			return 5000;
+		case R_625G_REFCLK15625_RXAUI:
+			return 6250;
+		case R_25G_REFCLK125:
+			return 2500;
+		case R_5G_REFCLK125:
+			return 5000;
+		case R_8G_REFCLK125:
+			return 8000;
+		default:
+			return 0;
+		}
+	}
+	return 0;
+}
+
+static enum cvmx_qlm_mode __cvmx_qlm_get_mode_cn70xx(int qlm)
+{
+	switch (qlm) {
+	case 0: /* DLM0/DLM1 - SGMII/QSGMII/RXAUI */
+	{
+		union cvmx_gmxx_inf_mode inf_mode0, inf_mode1;
+
+		inf_mode0.u64 = csr_rd(CVMX_GMXX_INF_MODE(0));
+		inf_mode1.u64 = csr_rd(CVMX_GMXX_INF_MODE(1));
+
+		/* SGMII0 SGMII1 */
+		switch (inf_mode0.s.mode) {
+		case CVMX_GMX_INF_MODE_SGMII:
+			switch (inf_mode1.s.mode) {
+			case CVMX_GMX_INF_MODE_SGMII:
+				return CVMX_QLM_MODE_SGMII_SGMII;
+			case CVMX_GMX_INF_MODE_QSGMII:
+				return CVMX_QLM_MODE_SGMII_QSGMII;
+			default:
+				return CVMX_QLM_MODE_SGMII_DISABLED;
+			}
+		case CVMX_GMX_INF_MODE_QSGMII:
+			switch (inf_mode1.s.mode) {
+			case CVMX_GMX_INF_MODE_SGMII:
+				return CVMX_QLM_MODE_QSGMII_SGMII;
+			case CVMX_GMX_INF_MODE_QSGMII:
+				return CVMX_QLM_MODE_QSGMII_QSGMII;
+			default:
+				return CVMX_QLM_MODE_QSGMII_DISABLED;
+			}
+		case CVMX_GMX_INF_MODE_RXAUI:
+			return CVMX_QLM_MODE_RXAUI_1X2;
+		default:
+			switch (inf_mode1.s.mode) {
+			case CVMX_GMX_INF_MODE_SGMII:
+				return CVMX_QLM_MODE_DISABLED_SGMII;
+			case CVMX_GMX_INF_MODE_QSGMII:
+				return CVMX_QLM_MODE_DISABLED_QSGMII;
+			default:
+				return CVMX_QLM_MODE_DISABLED;
+			}
+		}
+	}
+	case 1: /* Sata / pem0 */
+	{
+		union cvmx_gserx_sata_cfg sata_cfg;
+		union cvmx_pemx_cfg pem0_cfg;
+
+		sata_cfg.u64 = csr_rd(CVMX_GSERX_SATA_CFG(0));
+		pem0_cfg.u64 = csr_rd(CVMX_PEMX_CFG(0));
+
+		switch (pem0_cfg.cn70xx.md) {
+		case CVMX_PEM_MD_GEN2_2LANE:
+		case CVMX_PEM_MD_GEN1_2LANE:
+			return CVMX_QLM_MODE_PCIE_1X2;
+		case CVMX_PEM_MD_GEN2_1LANE:
+		case CVMX_PEM_MD_GEN1_1LANE:
+			if (sata_cfg.s.sata_en)
+				/* Both PEM0 and PEM1 */
+				return CVMX_QLM_MODE_PCIE_2X1;
+
+			/* Only PEM0 */
+			return CVMX_QLM_MODE_PCIE_1X1;
+		case CVMX_PEM_MD_GEN2_4LANE:
+		case CVMX_PEM_MD_GEN1_4LANE:
+			return CVMX_QLM_MODE_PCIE;
+		default:
+			return CVMX_QLM_MODE_DISABLED;
+		}
+	}
+	case 2: {
+		union cvmx_gserx_sata_cfg sata_cfg;
+		union cvmx_pemx_cfg pem0_cfg, pem1_cfg, pem2_cfg;
+
+		sata_cfg.u64 = csr_rd(CVMX_GSERX_SATA_CFG(0));
+		pem0_cfg.u64 = csr_rd(CVMX_PEMX_CFG(0));
+		pem1_cfg.u64 = csr_rd(CVMX_PEMX_CFG(1));
+		pem2_cfg.u64 = csr_rd(CVMX_PEMX_CFG(2));
+
+		if (sata_cfg.s.sata_en)
+			return CVMX_QLM_MODE_SATA_2X1;
+		if (pem0_cfg.cn70xx.md == CVMX_PEM_MD_GEN2_4LANE ||
+		    pem0_cfg.cn70xx.md == CVMX_PEM_MD_GEN1_4LANE)
+			return CVMX_QLM_MODE_PCIE;
+		if (pem1_cfg.cn70xx.md == CVMX_PEM_MD_GEN2_2LANE ||
+		    pem1_cfg.cn70xx.md == CVMX_PEM_MD_GEN1_2LANE) {
+			return CVMX_QLM_MODE_PCIE_1X2;
+		}
+		if (pem1_cfg.cn70xx.md == CVMX_PEM_MD_GEN2_1LANE ||
+		    pem1_cfg.cn70xx.md == CVMX_PEM_MD_GEN1_1LANE) {
+			if (pem2_cfg.cn70xx.md == CVMX_PEM_MD_GEN2_1LANE ||
+			    pem2_cfg.cn70xx.md == CVMX_PEM_MD_GEN1_1LANE) {
+				return CVMX_QLM_MODE_PCIE_2X1;
+			} else {
+				return CVMX_QLM_MODE_PCIE_1X1;
+			}
+		}
+		if (pem2_cfg.cn70xx.md == CVMX_PEM_MD_GEN2_1LANE ||
+		    pem2_cfg.cn70xx.md == CVMX_PEM_MD_GEN1_1LANE)
+			return CVMX_QLM_MODE_PCIE_2X1;
+		return CVMX_QLM_MODE_DISABLED;
+	}
+	default:
+		return CVMX_QLM_MODE_DISABLED;
+	}
+
+	return CVMX_QLM_MODE_DISABLED;
+}
+
+/*
+ * Get the DLM mode for the interface based on the interface type.
+ *
+ * @param interface_type   0 - SGMII/QSGMII/RXAUI interface
+ *                         1 - PCIe
+ *                         2 - SATA
+ * @param interface        interface to use
+ * @return  the qlm mode the interface is
+ */
+enum cvmx_qlm_mode cvmx_qlm_get_dlm_mode(int interface_type, int interface)
+{
+	switch (interface_type) {
+	case 0: /* SGMII/QSGMII/RXAUI */
+	{
+		enum cvmx_qlm_mode qlm_mode = __cvmx_qlm_get_mode_cn70xx(0);
+
+		switch (interface) {
+		case 0:
+			switch (qlm_mode) {
+			case CVMX_QLM_MODE_SGMII_SGMII:
+			case CVMX_QLM_MODE_SGMII_DISABLED:
+			case CVMX_QLM_MODE_SGMII_QSGMII:
+				return CVMX_QLM_MODE_SGMII;
+			case CVMX_QLM_MODE_QSGMII_QSGMII:
+			case CVMX_QLM_MODE_QSGMII_DISABLED:
+			case CVMX_QLM_MODE_QSGMII_SGMII:
+				return CVMX_QLM_MODE_QSGMII;
+			case CVMX_QLM_MODE_RXAUI_1X2:
+				return CVMX_QLM_MODE_RXAUI;
+			default:
+				return CVMX_QLM_MODE_DISABLED;
+			}
+		case 1:
+			switch (qlm_mode) {
+			case CVMX_QLM_MODE_SGMII_SGMII:
+			case CVMX_QLM_MODE_DISABLED_SGMII:
+			case CVMX_QLM_MODE_QSGMII_SGMII:
+				return CVMX_QLM_MODE_SGMII;
+			case CVMX_QLM_MODE_QSGMII_QSGMII:
+			case CVMX_QLM_MODE_DISABLED_QSGMII:
+			case CVMX_QLM_MODE_SGMII_QSGMII:
+				return CVMX_QLM_MODE_QSGMII;
+			default:
+				return CVMX_QLM_MODE_DISABLED;
+			}
+		default:
+			return qlm_mode;
+		}
+	}
+	case 1: /* PCIe */
+	{
+		enum cvmx_qlm_mode qlm_mode1 = __cvmx_qlm_get_mode_cn70xx(1);
+		enum cvmx_qlm_mode qlm_mode2 = __cvmx_qlm_get_mode_cn70xx(2);
+
+		switch (interface) {
+		case 0: /* PCIe0 can be DLM1 with 1, 2 or 4 lanes */
+			return qlm_mode1;
+		case 1:
+			/*
+			 * PCIe1 can be in DLM1 1 lane(1), DLM2 1 lane(0)
+			 * or 2 lanes(0-1)
+			 */
+			if (qlm_mode1 == CVMX_QLM_MODE_PCIE_2X1)
+				return CVMX_QLM_MODE_PCIE_2X1;
+			else if (qlm_mode2 == CVMX_QLM_MODE_PCIE_1X2 ||
+				 qlm_mode2 == CVMX_QLM_MODE_PCIE_2X1)
+				return qlm_mode2;
+			else
+				return CVMX_QLM_MODE_DISABLED;
+		case 2: /* PCIe2 can be DLM2 1 lanes(1) */
+			if (qlm_mode2 == CVMX_QLM_MODE_PCIE_2X1)
+				return qlm_mode2;
+			else
+				return CVMX_QLM_MODE_DISABLED;
+		default:
+			return CVMX_QLM_MODE_DISABLED;
+		}
+	}
+	case 2: /* SATA */
+	{
+		enum cvmx_qlm_mode qlm_mode = __cvmx_qlm_get_mode_cn70xx(2);
+
+		if (qlm_mode == CVMX_QLM_MODE_SATA_2X1)
+			return CVMX_QLM_MODE_SATA_2X1;
+		else
+			return CVMX_QLM_MODE_DISABLED;
+	}
+	default:
+		return CVMX_QLM_MODE_DISABLED;
+	}
+}
+
+static enum cvmx_qlm_mode __cvmx_qlm_get_mode_cn6xxx(int qlm)
+{
+	cvmx_mio_qlmx_cfg_t qlmx_cfg;
+
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
+		qlmx_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(qlm));
+		/* QLM is disabled when QLM SPD is 15. */
+		if (qlmx_cfg.s.qlm_spd == 15)
+			return CVMX_QLM_MODE_DISABLED;
+
+		switch (qlmx_cfg.s.qlm_cfg) {
+		case 0: /* PCIE */
+			return CVMX_QLM_MODE_PCIE;
+		case 1: /* ILK */
+			return CVMX_QLM_MODE_ILK;
+		case 2: /* SGMII */
+			return CVMX_QLM_MODE_SGMII;
+		case 3: /* XAUI */
+			return CVMX_QLM_MODE_XAUI;
+		case 7: /* RXAUI */
+			return CVMX_QLM_MODE_RXAUI;
+		default:
+			return CVMX_QLM_MODE_DISABLED;
+		}
+	} else if (OCTEON_IS_MODEL(OCTEON_CN66XX)) {
+		qlmx_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(qlm));
+		/* QLM is disabled when QLM SPD is 15. */
+		if (qlmx_cfg.s.qlm_spd == 15)
+			return CVMX_QLM_MODE_DISABLED;
+
+		switch (qlmx_cfg.s.qlm_cfg) {
+		case 0x9: /* SGMII */
+			return CVMX_QLM_MODE_SGMII;
+		case 0xb: /* XAUI */
+			return CVMX_QLM_MODE_XAUI;
+		case 0x0: /* PCIE gen2 */
+		case 0x8: /* PCIE gen2 (alias) */
+		case 0x2: /* PCIE gen1 */
+		case 0xa: /* PCIE gen1 (alias) */
+			return CVMX_QLM_MODE_PCIE;
+		case 0x1: /* SRIO 1x4 short */
+		case 0x3: /* SRIO 1x4 long */
+			return CVMX_QLM_MODE_SRIO_1X4;
+		case 0x4: /* SRIO 2x2 short */
+		case 0x6: /* SRIO 2x2 long */
+			return CVMX_QLM_MODE_SRIO_2X2;
+		case 0x5: /* SRIO 4x1 short */
+		case 0x7: /* SRIO 4x1 long */
+			if (!OCTEON_IS_MODEL(OCTEON_CN66XX_PASS1_0))
+				return CVMX_QLM_MODE_SRIO_4X1;
+			fallthrough;
+		default:
+			return CVMX_QLM_MODE_DISABLED;
+		}
+	} else if (OCTEON_IS_MODEL(OCTEON_CN63XX)) {
+		cvmx_sriox_status_reg_t status_reg;
+		/* For now skip qlm2 */
+		if (qlm == 2) {
+			cvmx_gmxx_inf_mode_t inf_mode;
+
+			inf_mode.u64 = csr_rd(CVMX_GMXX_INF_MODE(0));
+			if (inf_mode.s.speed == 15)
+				return CVMX_QLM_MODE_DISABLED;
+			else if (inf_mode.s.mode == 0)
+				return CVMX_QLM_MODE_SGMII;
+			else
+				return CVMX_QLM_MODE_XAUI;
+		}
+		status_reg.u64 = csr_rd(CVMX_SRIOX_STATUS_REG(qlm));
+		if (status_reg.s.srio)
+			return CVMX_QLM_MODE_SRIO_1X4;
+		else
+			return CVMX_QLM_MODE_PCIE;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN61XX)) {
+		qlmx_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(qlm));
+		/* QLM is disabled when QLM SPD is 15. */
+		if (qlmx_cfg.s.qlm_spd == 15)
+			return CVMX_QLM_MODE_DISABLED;
+
+		switch (qlm) {
+		case 0:
+			switch (qlmx_cfg.s.qlm_cfg) {
+			case 0: /* PCIe 1x4 gen2 / gen1 */
+				return CVMX_QLM_MODE_PCIE;
+			case 2: /* SGMII */
+				return CVMX_QLM_MODE_SGMII;
+			case 3: /* XAUI */
+				return CVMX_QLM_MODE_XAUI;
+			default:
+				return CVMX_QLM_MODE_DISABLED;
+			}
+			break;
+		case 1:
+			switch (qlmx_cfg.s.qlm_cfg) {
+			case 0: /* PCIe 1x2 gen2 / gen1 */
+				return CVMX_QLM_MODE_PCIE_1X2;
+			case 1: /* PCIe 2x1 gen2 / gen1 */
+				return CVMX_QLM_MODE_PCIE_2X1;
+			default:
+				return CVMX_QLM_MODE_DISABLED;
+			}
+			break;
+		case 2:
+			switch (qlmx_cfg.s.qlm_cfg) {
+			case 2: /* SGMII */
+				return CVMX_QLM_MODE_SGMII;
+			case 3: /* XAUI */
+				return CVMX_QLM_MODE_XAUI;
+			default:
+				return CVMX_QLM_MODE_DISABLED;
+			}
+			break;
+		}
+	} else if (OCTEON_IS_MODEL(OCTEON_CNF71XX)) {
+		qlmx_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(qlm));
+		/* QLM is disabled when QLM SPD is 15. */
+		if (qlmx_cfg.s.qlm_spd == 15)
+			return CVMX_QLM_MODE_DISABLED;
+
+		switch (qlm) {
+		case 0:
+			if (qlmx_cfg.s.qlm_cfg == 2) /* SGMII */
+				return CVMX_QLM_MODE_SGMII;
+			break;
+		case 1:
+			switch (qlmx_cfg.s.qlm_cfg) {
+			case 0: /* PCIe 1x2 gen2 / gen1 */
+				return CVMX_QLM_MODE_PCIE_1X2;
+			case 1: /* PCIe 2x1 gen2 / gen1 */
+				return CVMX_QLM_MODE_PCIE_2X1;
+			default:
+				return CVMX_QLM_MODE_DISABLED;
+			}
+			break;
+		}
+	}
+	return CVMX_QLM_MODE_DISABLED;
+}
+
+/**
+ * @INTERNAL
+ * Decrement the MPLL Multiplier for the DLM as per Errata G-20669
+ *
+ * @param qlm            DLM to configure
+ * @param baud_mhz       Speed of the DLM configured at
+ * @param old_multiplier MPLL_MULTIPLIER value to decrement
+ */
+void __cvmx_qlm_set_mult(int qlm, int baud_mhz, int old_multiplier)
+{
+	cvmx_gserx_dlmx_mpll_multiplier_t mpll_multiplier;
+	cvmx_gserx_dlmx_ref_clkdiv2_t clkdiv;
+	u64 meas_refclock, mult;
+
+	if (!OCTEON_IS_MODEL(OCTEON_CN70XX))
+		return;
+
+	if (qlm == -1)
+		return;
+
+	meas_refclock = cvmx_qlm_measure_clock(qlm);
+	if (meas_refclock == 0) {
+		printf("DLM%d: Reference clock not running\n", qlm);
+		return;
+	}
+
+	/*
+	 * The baud rate multiplier needs to be adjusted on the CN70XX if
+	 * the reference clock is > 100MHz.
+	 */
+	if (qlm == 0) {
+		clkdiv.u64 = csr_rd(CVMX_GSERX_DLMX_REF_CLKDIV2(qlm, 0));
+		if (clkdiv.s.ref_clkdiv2)
+			baud_mhz *= 2;
+	}
+	mult = (uint64_t)baud_mhz * 1000000 + (meas_refclock / 2);
+	mult /= meas_refclock;
+
+	/*
+	 * 6. Decrease MPLL_MULTIPLIER by one continually until it reaches
+	 * the desired long-term setting, ensuring that each MPLL_MULTIPLIER
+	 * value is constant for at least 1 msec before changing to the next
+	 * value. The desired long-term setting is as indicated in HRM tables
+	 * 21-1, 21-2, and 21-3. This is not required with the HRM
+	 * sequence.
+	 */
+	do {
+		mpll_multiplier.u64 = csr_rd(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0));
+		mpll_multiplier.s.mpll_multiplier = --old_multiplier;
+		csr_wr(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0), mpll_multiplier.u64);
+		/* Wait for 1 ms */
+		udelay(1000);
+	} while (old_multiplier > (int)mult);
+}
+
+enum cvmx_qlm_mode cvmx_qlm_get_mode_cn78xx(int node, int qlm)
+{
+	cvmx_gserx_cfg_t gserx_cfg;
+	int qlm_mode[2][9] = { { -1, -1, -1, -1, -1, -1, -1, -1 },
+			       { -1, -1, -1, -1, -1, -1, -1, -1 } };
+
+	if (qlm >= 8)
+		return CVMX_QLM_MODE_OCI;
+
+	if (qlm_mode[node][qlm] != -1)
+		return qlm_mode[node][qlm];
+
+	gserx_cfg.u64 = csr_rd_node(node, CVMX_GSERX_CFG(qlm));
+	if (gserx_cfg.s.pcie) {
+		switch (qlm) {
+		case 0: /* Either PEM0 x4 or PEM0 x8 */
+		case 1: /* Either PEM0 x8 or PEM1 x4 */
+		{
+			cvmx_pemx_cfg_t pemx_cfg;
+
+			pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(0));
+			if (pemx_cfg.cn78xx.lanes8) {
+				/* PEM0 x8 */
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_PCIE_1X8;
+			} else {
+				/* PEM0 x4 */
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_PCIE;
+			}
+			break;
+		}
+		case 2: /* Either PEM2 x4 or PEM2 x8 */
+		{
+			cvmx_pemx_cfg_t pemx_cfg;
+
+			pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(2));
+			if (pemx_cfg.cn78xx.lanes8) {
+				/* PEM2 x8 */
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_PCIE_1X8;
+			} else {
+				/* PEM2 x4 */
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_PCIE;
+			}
+			break;
+		}
+		case 3: /* Either PEM2 x8 or PEM3 x4 or PEM3 x8 */
+		{
+			cvmx_pemx_cfg_t pemx_cfg;
+
+			pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(2));
+			if (pemx_cfg.cn78xx.lanes8) {
+				/* PEM2 x8 */
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_PCIE_1X8;
+			}
+
+			/* Can be first 4 lanes of PEM3 */
+			pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(3));
+			if (pemx_cfg.cn78xx.lanes8) {
+				/* PEM3 x8 */
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_PCIE_1X8;
+			} else {
+				/* PEM2 x4 */
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_PCIE;
+			}
+			break;
+		}
+		case 4: /* Either PEM3 x8 or PEM3 x4 */
+		{
+			cvmx_pemx_cfg_t pemx_cfg;
+
+			pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(3));
+			if (pemx_cfg.cn78xx.lanes8) {
+				/* PEM3 x8 */
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_PCIE_1X8;
+			} else {
+				/* PEM3 x4 */
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_PCIE;
+			}
+			break;
+		}
+		default:
+			qlm_mode[node][qlm] = CVMX_QLM_MODE_DISABLED;
+			break;
+		}
+	} else if (gserx_cfg.s.ila) {
+		qlm_mode[node][qlm] = CVMX_QLM_MODE_ILK;
+	} else if (gserx_cfg.s.bgx) {
+		cvmx_bgxx_cmrx_config_t cmr_config;
+		cvmx_bgxx_spux_br_pmd_control_t pmd_control;
+		int bgx = (qlm < 2) ? qlm : qlm - 2;
+
+		cmr_config.u64 = csr_rd_node(node, CVMX_BGXX_CMRX_CONFIG(0, bgx));
+		pmd_control.u64 = csr_rd_node(node, CVMX_BGXX_SPUX_BR_PMD_CONTROL(0, bgx));
+
+		switch (cmr_config.s.lmac_type) {
+		case 0:
+			qlm_mode[node][qlm] = CVMX_QLM_MODE_SGMII;
+			break;
+		case 1:
+			qlm_mode[node][qlm] = CVMX_QLM_MODE_XAUI;
+			break;
+		case 2:
+			qlm_mode[node][qlm] = CVMX_QLM_MODE_RXAUI;
+			break;
+		case 3:
+			/*
+			 * Use training to determine if we're in 10GBASE-KR
+			 * or XFI
+			 */
+			if (pmd_control.s.train_en)
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_10G_KR;
+			else
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_XFI;
+			break;
+		case 4:
+			/*
+			 * Use training to determine if we're in 40GBASE-KR
+			 * or XLAUI
+			 */
+			if (pmd_control.s.train_en)
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_40G_KR4;
+			else
+				qlm_mode[node][qlm] = CVMX_QLM_MODE_XLAUI;
+			break;
+		default:
+			qlm_mode[node][qlm] = CVMX_QLM_MODE_DISABLED;
+			break;
+		}
+	} else {
+		qlm_mode[node][qlm] = CVMX_QLM_MODE_DISABLED;
+	}
+
+	return qlm_mode[node][qlm];
+}
+
+enum cvmx_qlm_mode __cvmx_qlm_get_mode_cn73xx(int qlm)
+{
+	cvmx_gserx_cfg_t gserx_cfg;
+	int qlm_mode[7] = { -1, -1, -1, -1, -1, -1, -1 };
+
+	if (qlm_mode[qlm] != -1)
+		return qlm_mode[qlm];
+
+	if (qlm > 6) {
+		debug("Invalid QLM(%d) passed\n", qlm);
+		return -1;
+	}
+
+	gserx_cfg.u64 = csr_rd(CVMX_GSERX_CFG(qlm));
+	if (gserx_cfg.s.pcie) {
+		cvmx_pemx_cfg_t pemx_cfg;
+
+		switch (qlm) {
+		case 0: /* Either PEM0 x4 or PEM0 x8 */
+		case 1: /* Either PEM0 x8 or PEM1 x4 */
+		{
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(0));
+			if (pemx_cfg.cn78xx.lanes8) {
+				/* PEM0 x8 */
+				qlm_mode[qlm] = CVMX_QLM_MODE_PCIE_1X8;
+			} else {
+				/* PEM0/PEM1 x4 */
+				qlm_mode[qlm] = CVMX_QLM_MODE_PCIE;
+			}
+			break;
+		}
+		case 2: /* Either PEM2 x4 or PEM2 x8 */
+		{
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(2));
+			if (pemx_cfg.cn78xx.lanes8) {
+				/* PEM2 x8 */
+				qlm_mode[qlm] = CVMX_QLM_MODE_PCIE_1X8;
+			} else {
+				/* PEM2 x4 */
+				qlm_mode[qlm] = CVMX_QLM_MODE_PCIE;
+			}
+			break;
+		}
+		case 5:
+		case 6:						/* PEM3 x2 */
+			qlm_mode[qlm] = CVMX_QLM_MODE_PCIE_1X2; /* PEM3 x2 */
+			break;
+		case 3: /* Either PEM2 x8 or PEM3 x4 */
+		{
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(2));
+			if (pemx_cfg.cn78xx.lanes8) {
+				/* PEM2 x8 */
+				qlm_mode[qlm] = CVMX_QLM_MODE_PCIE_1X8;
+			} else {
+				/* PEM3 x4 */
+				qlm_mode[qlm] = CVMX_QLM_MODE_PCIE;
+			}
+			break;
+		}
+		default:
+			qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			break;
+		}
+	} else if (gserx_cfg.s.bgx) {
+		cvmx_bgxx_cmrx_config_t cmr_config;
+		cvmx_bgxx_cmr_rx_lmacs_t bgx_cmr_rx_lmacs;
+		cvmx_bgxx_spux_br_pmd_control_t pmd_control;
+		int bgx = 0;
+		int start = 0, end = 4, index;
+		int lane_mask = 0, train_mask = 0;
+		int mux = 0; // 0:BGX2 (DLM5/DLM6), 1:BGX2(DLM5), 2:BGX2(DLM6)
+
+		if (qlm < 4) {
+			bgx = qlm - 2;
+		} else if (qlm == 5 || qlm == 6) {
+			bgx = 2;
+			mux = cvmx_qlm_mux_interface(bgx);
+			if (mux == 0) {
+				start = 0;
+				end = 4;
+			} else if (mux == 1) {
+				start = 0;
+				end = 2;
+			} else if (mux == 2) {
+				start = 2;
+				end = 4;
+			} else {
+				qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+				return qlm_mode[qlm];
+			}
+		}
+
+		for (index = start; index < end; index++) {
+			cmr_config.u64 = csr_rd(CVMX_BGXX_CMRX_CONFIG(index, bgx));
+			pmd_control.u64 = csr_rd(CVMX_BGXX_SPUX_BR_PMD_CONTROL(index, bgx));
+			lane_mask |= (cmr_config.s.lmac_type << (index * 4));
+			train_mask |= (pmd_control.s.train_en << (index * 4));
+		}
+
+		/* Need to include DLM5 lmacs when only DLM6 DLM is used */
+		if (mux == 2)
+			bgx_cmr_rx_lmacs.u64 = csr_rd(CVMX_BGXX_CMR_RX_LMACS(2));
+		switch (lane_mask) {
+		case 0:
+			if (mux == 1) {
+				qlm_mode[qlm] = CVMX_QLM_MODE_SGMII_2X1;
+			} else if (mux == 2) {
+				qlm_mode[qlm] = CVMX_QLM_MODE_SGMII_2X1;
+				bgx_cmr_rx_lmacs.s.lmacs = 4;
+			}
+			qlm_mode[qlm] = CVMX_QLM_MODE_SGMII;
+			break;
+		case 0x1:
+			qlm_mode[qlm] = CVMX_QLM_MODE_XAUI;
+			break;
+		case 0x2:
+			if (mux == 1) {
+				// NONE+RXAUI
+				qlm_mode[qlm] = CVMX_QLM_MODE_RXAUI_1X2;
+			} else if (mux == 0) {
+				// RXAUI+SGMII
+				qlm_mode[qlm] = CVMX_QLM_MODE_MIXED;
+			} else {
+				qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			}
+			break;
+		case 0x202:
+			if (mux == 2) {
+				// RXAUI+RXAUI
+				qlm_mode[qlm] = CVMX_QLM_MODE_RXAUI_1X2;
+				bgx_cmr_rx_lmacs.s.lmacs = 4;
+			} else if (mux == 1) {
+				// RXAUI+RXAUI
+				qlm_mode[qlm] = CVMX_QLM_MODE_RXAUI_1X2;
+			} else if (mux == 0) {
+				qlm_mode[qlm] = CVMX_QLM_MODE_RXAUI;
+			} else {
+				qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			}
+			break;
+		case 0x22:
+			qlm_mode[qlm] = CVMX_QLM_MODE_RXAUI;
+			break;
+		case 0x3333:
+			/*
+			 * Use training to determine if we're in 10GBASE-KR
+			 * or XFI
+			 */
+			if (train_mask)
+				qlm_mode[qlm] = CVMX_QLM_MODE_10G_KR;
+			else
+				qlm_mode[qlm] = CVMX_QLM_MODE_XFI;
+			break;
+		case 0x4:
+			/*
+			 * Use training to determine if we're in 40GBASE-KR
+			 * or XLAUI
+			 */
+			if (train_mask)
+				qlm_mode[qlm] = CVMX_QLM_MODE_40G_KR4;
+			else
+				qlm_mode[qlm] = CVMX_QLM_MODE_XLAUI;
+			break;
+		case 0x0005:
+			qlm_mode[qlm] = CVMX_QLM_MODE_RGMII_SGMII;
+			break;
+		case 0x3335:
+			if (train_mask)
+				qlm_mode[qlm] = CVMX_QLM_MODE_RGMII_10G_KR;
+			else
+				qlm_mode[qlm] = CVMX_QLM_MODE_RGMII_XFI;
+			break;
+		case 0x45:
+			if (train_mask)
+				qlm_mode[qlm] = CVMX_QLM_MODE_RGMII_40G_KR4;
+			else
+				qlm_mode[qlm] = CVMX_QLM_MODE_RGMII_XLAUI;
+			break;
+		case 0x225:
+			qlm_mode[qlm] = CVMX_QLM_MODE_RGMII_RXAUI;
+			break;
+		case 0x15:
+			qlm_mode[qlm] = CVMX_QLM_MODE_RGMII_XAUI;
+			break;
+
+		case 0x200:
+			if (mux == 2) {
+				qlm_mode[qlm] = CVMX_QLM_MODE_RXAUI_1X2;
+				bgx_cmr_rx_lmacs.s.lmacs = 4;
+			} else
+		case 0x205:
+		case 0x233:
+		case 0x3302:
+		case 0x3305:
+			if (mux == 0)
+				qlm_mode[qlm] = CVMX_QLM_MODE_MIXED;
+			else
+				qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			break;
+		case 0x3300:
+			if (mux == 0) {
+				qlm_mode[qlm] = CVMX_QLM_MODE_MIXED;
+			} else if (mux == 2) {
+				if (train_mask)
+					qlm_mode[qlm] = CVMX_QLM_MODE_10G_KR_1X2;
+				else
+					qlm_mode[qlm] = CVMX_QLM_MODE_XFI_1X2;
+				bgx_cmr_rx_lmacs.s.lmacs = 4;
+			} else {
+				qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			}
+			break;
+		case 0x33:
+			if (mux == 1 || mux == 2) {
+				if (train_mask)
+					qlm_mode[qlm] = CVMX_QLM_MODE_10G_KR_1X2;
+				else
+					qlm_mode[qlm] = CVMX_QLM_MODE_XFI_1X2;
+				if (mux == 2)
+					bgx_cmr_rx_lmacs.s.lmacs = 4;
+			} else {
+				qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			}
+			break;
+		case 0x0035:
+			if (mux == 0)
+				qlm_mode[qlm] = CVMX_QLM_MODE_MIXED;
+			else if (train_mask)
+				qlm_mode[qlm] = CVMX_QLM_MODE_RGMII_10G_KR_1X1;
+			else
+				qlm_mode[qlm] = CVMX_QLM_MODE_RGMII_XFI_1X1;
+			break;
+		case 0x235:
+			if (mux == 0)
+				qlm_mode[qlm] = CVMX_QLM_MODE_MIXED;
+			else
+				qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			break;
+		default:
+			qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			break;
+		}
+		if (mux == 2) {
+			csr_wr(CVMX_BGXX_CMR_RX_LMACS(2), bgx_cmr_rx_lmacs.u64);
+			csr_wr(CVMX_BGXX_CMR_TX_LMACS(2), bgx_cmr_rx_lmacs.u64);
+		}
+	} else if (gserx_cfg.s.sata) {
+		qlm_mode[qlm] = CVMX_QLM_MODE_SATA_2X1;
+	} else {
+		qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+	}
+
+	return qlm_mode[qlm];
+}
+
+enum cvmx_qlm_mode __cvmx_qlm_get_mode_cnf75xx(int qlm)
+{
+	cvmx_gserx_cfg_t gserx_cfg;
+	int qlm_mode[9] = { -1, -1, -1, -1, -1, -1, -1 };
+
+	if (qlm_mode[qlm] != -1)
+		return qlm_mode[qlm];
+
+	if (qlm > 9) {
+		debug("Invalid QLM(%d) passed\n", qlm);
+		return -1;
+	}
+
+	if ((qlm == 2 || qlm == 3) && (OCTEON_IS_MODEL(OCTEON_CNF75XX))) {
+		cvmx_sriox_status_reg_t status_reg;
+		int port = (qlm == 2) ? 0 : 1;
+
+		status_reg.u64 = csr_rd(CVMX_SRIOX_STATUS_REG(port));
+		/* FIXME add different width */
+		if (status_reg.s.srio)
+			qlm_mode[qlm] = CVMX_QLM_MODE_SRIO_1X4;
+		else
+			qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+		return qlm_mode[qlm];
+	}
+
+	gserx_cfg.u64 = csr_rd(CVMX_GSERX_CFG(qlm));
+	if (gserx_cfg.s.pcie) {
+		switch (qlm) {
+		case 0: /* Either PEM0 x2 or PEM0 x4 */
+		case 1: /* Either PEM1 x2 or PEM0 x4 */
+		{
+			/* FIXME later */
+			qlm_mode[qlm] = CVMX_QLM_MODE_PCIE;
+			break;
+		}
+		default:
+			qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			break;
+		}
+	} else if (gserx_cfg.s.bgx) {
+		cvmx_bgxx_cmrx_config_t cmr_config;
+		cvmx_bgxx_spux_br_pmd_control_t pmd_control;
+		int bgx = 0;
+		int start = 0, end = 4, index;
+		int lane_mask = 0, train_mask = 0;
+		int mux = 0; // 0:BGX0 (DLM4/DLM5), 1:BGX0(DLM4), 2:BGX0(DLM5)
+		cvmx_gserx_cfg_t gser1, gser2;
+
+		gser1.u64 = csr_rd(CVMX_GSERX_CFG(4));
+		gser2.u64 = csr_rd(CVMX_GSERX_CFG(5));
+		if (gser1.s.bgx && gser2.s.bgx) {
+			start = 0;
+			end = 4;
+		} else if (gser1.s.bgx) {
+			start = 0;
+			end = 2;
+			mux = 1;
+		} else if (gser2.s.bgx) {
+			start = 2;
+			end = 4;
+			mux = 2;
+		} else {
+			qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			return qlm_mode[qlm];
+		}
+
+		for (index = start; index < end; index++) {
+			cmr_config.u64 = csr_rd(CVMX_BGXX_CMRX_CONFIG(index, bgx));
+			pmd_control.u64 = csr_rd(CVMX_BGXX_SPUX_BR_PMD_CONTROL(index, bgx));
+			lane_mask |= (cmr_config.s.lmac_type << (index * 4));
+			train_mask |= (pmd_control.s.train_en << (index * 4));
+		}
+
+		switch (lane_mask) {
+		case 0:
+			if (mux == 1 || mux == 2)
+				qlm_mode[qlm] = CVMX_QLM_MODE_SGMII_2X1;
+			else
+				qlm_mode[qlm] = CVMX_QLM_MODE_SGMII;
+			break;
+		case 0x3300:
+			if (mux == 0)
+				qlm_mode[qlm] = CVMX_QLM_MODE_MIXED;
+			else if (mux == 2)
+				if (train_mask)
+					qlm_mode[qlm] = CVMX_QLM_MODE_10G_KR_1X2;
+				else
+					qlm_mode[qlm] = CVMX_QLM_MODE_XFI_1X2;
+			else
+				qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			break;
+		default:
+			qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+			break;
+		}
+	} else {
+		qlm_mode[qlm] = CVMX_QLM_MODE_DISABLED;
+	}
+
+	return qlm_mode[qlm];
+}
+
+/*
+ * Read QLM and return mode.
+ */
+enum cvmx_qlm_mode cvmx_qlm_get_mode(int qlm)
+{
+	if (OCTEON_IS_OCTEON2())
+		return __cvmx_qlm_get_mode_cn6xxx(qlm);
+	else if (OCTEON_IS_MODEL(OCTEON_CN70XX))
+		return __cvmx_qlm_get_mode_cn70xx(qlm);
+	else if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return cvmx_qlm_get_mode_cn78xx(cvmx_get_node_num(), qlm);
+	else if (OCTEON_IS_MODEL(OCTEON_CN73XX))
+		return __cvmx_qlm_get_mode_cn73xx(qlm);
+	else if (OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		return __cvmx_qlm_get_mode_cnf75xx(qlm);
+
+	return CVMX_QLM_MODE_DISABLED;
+}
+
+int cvmx_qlm_measure_clock_cn7xxx(int node, int qlm)
+{
+	cvmx_gserx_cfg_t cfg;
+	cvmx_gserx_refclk_sel_t refclk_sel;
+	cvmx_gserx_lane_mode_t lane_mode;
+
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX)) {
+		if (node != 0 || qlm >= 7)
+			return -1;
+	} else if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+		if (qlm >= 8 || node > 1)
+			return -1; /* FIXME for OCI */
+	} else {
+		debug("%s: Unsupported OCTEON model\n", __func__);
+		return -1;
+	}
+
+	cfg.u64 = csr_rd_node(node, CVMX_GSERX_CFG(qlm));
+
+	if (cfg.s.pcie) {
+		refclk_sel.u64 = csr_rd_node(node, CVMX_GSERX_REFCLK_SEL(qlm));
+		if (refclk_sel.s.pcie_refclk125)
+			return REF_125MHZ; /* Ref 125 Mhz */
+		else
+			return REF_100MHZ; /* Ref 100Mhz */
+	}
+
+	lane_mode.u64 = csr_rd_node(node, CVMX_GSERX_LANE_MODE(qlm));
+	switch (lane_mode.s.lmode) {
+	case R_25G_REFCLK100:
+		return REF_100MHZ;
+	case R_5G_REFCLK100:
+		return REF_100MHZ;
+	case R_8G_REFCLK100:
+		return REF_100MHZ;
+	case R_125G_REFCLK15625_KX:
+		return REF_156MHZ;
+	case R_3125G_REFCLK15625_XAUI:
+		return REF_156MHZ;
+	case R_103125G_REFCLK15625_KR:
+		return REF_156MHZ;
+	case R_125G_REFCLK15625_SGMII:
+		return REF_156MHZ;
+	case R_5G_REFCLK15625_QSGMII:
+		return REF_156MHZ;
+	case R_625G_REFCLK15625_RXAUI:
+		return REF_156MHZ;
+	case R_25G_REFCLK125:
+		return REF_125MHZ;
+	case R_5G_REFCLK125:
+		return REF_125MHZ;
+	case R_8G_REFCLK125:
+		return REF_125MHZ;
+	default:
+		return 0;
+	}
+}
+
+/**
+ * Measure the reference clock of a QLM on a multi-node setup
+ *
+ * @param node   node to measure
+ * @param qlm    QLM to measure
+ *
+ * @return Clock rate in Hz
+ */
+int cvmx_qlm_measure_clock_node(int node, int qlm)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_MULTINODE))
+		return cvmx_qlm_measure_clock_cn7xxx(node, qlm);
+	else
+		return cvmx_qlm_measure_clock(qlm);
+}
+
+/**
+ * Measure the reference clock of a QLM
+ *
+ * @param qlm    QLM to measure
+ *
+ * @return Clock rate in Hz
+ */
+int cvmx_qlm_measure_clock(int qlm)
+{
+	cvmx_mio_ptp_clock_cfg_t ptp_clock;
+	u64 count;
+	u64 start_cycle, stop_cycle;
+	int evcnt_offset = 0x10;
+	int incr_count = 1;
+	int ref_clock[16] = { 0 };
+
+	if (ref_clock[qlm])
+		return ref_clock[qlm];
+
+	if (OCTEON_IS_OCTEON3() && !OCTEON_IS_MODEL(OCTEON_CN70XX))
+		return cvmx_qlm_measure_clock_cn7xxx(cvmx_get_node_num(), qlm);
+
+	if (OCTEON_IS_MODEL(OCTEON_CN70XX) && qlm == 0) {
+		cvmx_gserx_dlmx_ref_clkdiv2_t ref_clkdiv2;
+
+		ref_clkdiv2.u64 = csr_rd(CVMX_GSERX_DLMX_REF_CLKDIV2(qlm, 0));
+		if (ref_clkdiv2.s.ref_clkdiv2)
+			incr_count = 2;
+	}
+
+	/* Fix reference clock for OCI QLMs */
+
+	/* Disable the PTP event counter while we configure it */
+	ptp_clock.u64 = csr_rd(CVMX_MIO_PTP_CLOCK_CFG); /* For CN63XXp1 errata */
+	ptp_clock.s.evcnt_en = 0;
+	csr_wr(CVMX_MIO_PTP_CLOCK_CFG, ptp_clock.u64);
+
+	/* Count on rising edge, Choose which QLM to count */
+	ptp_clock.u64 = csr_rd(CVMX_MIO_PTP_CLOCK_CFG); /* For CN63XXp1 errata */
+	ptp_clock.s.evcnt_edge = 0;
+	ptp_clock.s.evcnt_in = evcnt_offset + qlm;
+	csr_wr(CVMX_MIO_PTP_CLOCK_CFG, ptp_clock.u64);
+
+	/* Clear MIO_PTP_EVT_CNT */
+	csr_rd(CVMX_MIO_PTP_EVT_CNT); /* For CN63XXp1 errata */
+	count = csr_rd(CVMX_MIO_PTP_EVT_CNT);
+	csr_wr(CVMX_MIO_PTP_EVT_CNT, -count);
+
+	/* Set MIO_PTP_EVT_CNT to 1 billion */
+	csr_wr(CVMX_MIO_PTP_EVT_CNT, 1000000000);
+
+	/* Enable the PTP event counter */
+	ptp_clock.u64 = csr_rd(CVMX_MIO_PTP_CLOCK_CFG); /* For CN63XXp1 errata */
+	ptp_clock.s.evcnt_en = 1;
+	csr_wr(CVMX_MIO_PTP_CLOCK_CFG, ptp_clock.u64);
+
+	start_cycle = get_ticks();
+	/* Wait for 50ms */
+	mdelay(50);
+
+	/* Read the counter */
+	csr_rd(CVMX_MIO_PTP_EVT_CNT); /* For CN63XXp1 errata */
+	count = csr_rd(CVMX_MIO_PTP_EVT_CNT);
+	stop_cycle = get_ticks();
+
+	/* Disable the PTP event counter */
+	ptp_clock.u64 = csr_rd(CVMX_MIO_PTP_CLOCK_CFG); /* For CN63XXp1 errata */
+	ptp_clock.s.evcnt_en = 0;
+	csr_wr(CVMX_MIO_PTP_CLOCK_CFG, ptp_clock.u64);
+
+	/* Clock counted down, so reverse it */
+	count = 1000000000 - count;
+	count *= incr_count;
+
+	/* Return the rate */
+	ref_clock[qlm] = count * gd->cpu_clk / (stop_cycle - start_cycle);
+
+	return ref_clock[qlm];
+}
+
+/*
+ * Perform RX equalization on a QLM
+ *
+ * @param node	Node the QLM is on
+ * @param qlm	QLM to perform RX equalization on
+ * @param lane	Lane to use, or -1 for all lanes
+ *
+ * @return Zero on success, negative if any lane failed RX equalization
+ */
+int __cvmx_qlm_rx_equalization(int node, int qlm, int lane)
+{
+	cvmx_gserx_phy_ctl_t phy_ctl;
+	cvmx_gserx_br_rxx_ctl_t rxx_ctl;
+	cvmx_gserx_br_rxx_eer_t rxx_eer;
+	cvmx_gserx_rx_eie_detsts_t eie_detsts;
+	int fail, gbaud, l, lane_mask;
+	enum cvmx_qlm_mode mode;
+	int max_lanes = cvmx_qlm_get_lanes(qlm);
+	cvmx_gserx_lane_mode_t lmode;
+	cvmx_gserx_lane_px_mode_1_t pmode_1;
+	int pending = 0;
+	u64 timeout;
+
+	/* Don't touch QLMs if it is reset or powered down */
+	phy_ctl.u64 = csr_rd_node(node, CVMX_GSERX_PHY_CTL(qlm));
+	if (phy_ctl.s.phy_pd || phy_ctl.s.phy_reset)
+		return -1;
+
+	/*
+	 * Check whether GSER PRBS pattern matcher is enabled on any of the
+	 * applicable lanes. Can't complete RX Equalization while pattern
+	 * matcher is enabled because it causes errors
+	 */
+	for (l = 0; l < max_lanes; l++) {
+		cvmx_gserx_lanex_lbert_cfg_t lbert_cfg;
+
+		if (lane != -1 && lane != l)
+			continue;
+
+		lbert_cfg.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_LBERT_CFG(l, qlm));
+		if (lbert_cfg.s.lbert_pm_en == 1)
+			return -1;
+	}
+
+	/* Get Lane Mode */
+	lmode.u64 = csr_rd_node(node, CVMX_GSERX_LANE_MODE(qlm));
+
+	/*
+	 * Check to see if in VMA manual mode is set. If in VMA manual mode
+	 * don't complete rx equalization
+	 */
+	pmode_1.u64 = csr_rd_node(node, CVMX_GSERX_LANE_PX_MODE_1(lmode.s.lmode, qlm));
+	if (pmode_1.s.vma_mm == 1) {
+#ifdef DEBUG_QLM
+		debug("N%d:QLM%d: VMA Manual (manual DFE) selected. Not completing Rx equalization\n",
+		      node, qlm);
+#endif
+		return 0;
+	}
+
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX)) {
+		gbaud = cvmx_qlm_get_gbaud_mhz_node(node, qlm);
+		mode = cvmx_qlm_get_mode_cn78xx(node, qlm);
+	} else {
+		gbaud = cvmx_qlm_get_gbaud_mhz(qlm);
+		mode = cvmx_qlm_get_mode(qlm);
+	}
+
+	/* Apply RX Equalization for speed >= 8G */
+	if (qlm < 8) {
+		if (gbaud < 6250)
+			return 0;
+	}
+
+	/* Don't run on PCIe Links */
+	if (mode == CVMX_QLM_MODE_PCIE || mode == CVMX_QLM_MODE_PCIE_1X8 ||
+	    mode == CVMX_QLM_MODE_PCIE_1X2 || mode == CVMX_QLM_MODE_PCIE_2X1)
+		return -1;
+
+	fail = 0;
+
+	/*
+	 * Before completing Rx equalization wait for
+	 * GSERx_RX_EIE_DETSTS[CDRLOCK] to be set.
+	 * This ensures the rx data is valid
+	 */
+	if (lane == -1) {
+		/*
+		 * check all 4 Lanes (cdrlock = 1111/b) for CDR Lock with
+		 * lane == -1
+		 */
+		if (CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_GSERX_RX_EIE_DETSTS(qlm),
+					       cvmx_gserx_rx_eie_detsts_t, cdrlock, ==,
+					       (1 << max_lanes) - 1, 500)) {
+#ifdef DEBUG_QLM
+			eie_detsts.u64 = csr_rd_node(node, CVMX_GSERX_RX_EIE_DETSTS(qlm));
+			debug("ERROR: %d:QLM%d: CDR Lock not detected for all 4 lanes. CDR_LOCK(0x%x)\n",
+			      node, qlm, eie_detsts.s.cdrlock);
+#endif
+			return -1;
+		}
+	} else {
+		if (CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_GSERX_RX_EIE_DETSTS(qlm),
+					       cvmx_gserx_rx_eie_detsts_t, cdrlock, &, (1 << lane),
+					       500)) {
+#ifdef DEBUG_QLM
+			eie_detsts.u64 = csr_rd_node(node, CVMX_GSERX_RX_EIE_DETSTS(qlm));
+			debug("ERROR: %d:QLM%d: CDR Lock not detected for Lane%d CDR_LOCK(0x%x)\n",
+			      node, qlm, lane, eie_detsts.s.cdrlock);
+#endif
+			return -1;
+		}
+	}
+
+	/*
+	 * Errata (GSER-20075) GSER(0..13)_BR_RX3_EER[RXT_ERR] is
+	 * GSER(0..13)_BR_RX2_EER[RXT_ERR]. Since lanes 2-3 trigger at the
+	 * same time, we need to setup lane 3 before we loop through the lanes
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X) && (lane == -1 || lane == 3)) {
+		/* Enable software control */
+		rxx_ctl.u64 = csr_rd_node(node, CVMX_GSERX_BR_RXX_CTL(3, qlm));
+		rxx_ctl.s.rxt_swm = 1;
+		csr_wr_node(node, CVMX_GSERX_BR_RXX_CTL(3, qlm), rxx_ctl.u64);
+
+		/* Clear the completion flag */
+		rxx_eer.u64 = csr_rd_node(node, CVMX_GSERX_BR_RXX_EER(3, qlm));
+		rxx_eer.s.rxt_esv = 0;
+		csr_wr_node(node, CVMX_GSERX_BR_RXX_EER(3, qlm), rxx_eer.u64);
+		/* Initiate a new request on lane 2 */
+		if (lane == 3) {
+			rxx_eer.u64 = csr_rd_node(node, CVMX_GSERX_BR_RXX_EER(2, qlm));
+			rxx_eer.s.rxt_eer = 1;
+			csr_wr_node(node, CVMX_GSERX_BR_RXX_EER(2, qlm), rxx_eer.u64);
+		}
+	}
+
+	for (l = 0; l < max_lanes; l++) {
+		if (lane != -1 && lane != l)
+			continue;
+
+		/*
+		 * Skip lane 3 on 78p1.x due to Errata (GSER-20075).
+		 * Handled above
+		 */
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X) && l == 3) {
+			/*
+			 * Need to add lane 3 to pending list for 78xx
+			 * pass 1.x
+			 */
+			pending |= 1 << 3;
+			continue;
+		}
+		/* Enable software control */
+		rxx_ctl.u64 = csr_rd_node(node, CVMX_GSERX_BR_RXX_CTL(l, qlm));
+		rxx_ctl.s.rxt_swm = 1;
+		csr_wr_node(node, CVMX_GSERX_BR_RXX_CTL(l, qlm), rxx_ctl.u64);
+
+		/* Clear the completion flag and initiate a new request */
+		rxx_eer.u64 = csr_rd_node(node, CVMX_GSERX_BR_RXX_EER(l, qlm));
+		rxx_eer.s.rxt_esv = 0;
+		rxx_eer.s.rxt_eer = 1;
+		csr_wr_node(node, CVMX_GSERX_BR_RXX_EER(l, qlm), rxx_eer.u64);
+		pending |= 1 << l;
+	}
+
+	/*
+	 * Wait for 250ms, approx 10x times measured value, as XFI/XLAUI
+	 * can take 21-23ms, other interfaces can take 2-3ms.
+	 */
+	timeout = get_timer(0);
+
+	lane_mask = 0;
+	while (pending) {
+		/* Wait for RX equalization to complete */
+		for (l = 0; l < max_lanes; l++) {
+			lane_mask = 1 << l;
+			/* Only check lanes that are pending */
+			if (!(pending & lane_mask))
+				continue;
+
+			/*
+			 * Read the registers for checking Electrical Idle/CDR
+			 * lock and the status of the RX equalization
+			 */
+			eie_detsts.u64 = csr_rd_node(node, CVMX_GSERX_RX_EIE_DETSTS(qlm));
+			rxx_eer.u64 = csr_rd_node(node, CVMX_GSERX_BR_RXX_EER(l, qlm));
+
+			/*
+			 * Mark failure if lane entered Electrical Idle or lost
+			 * CDR Lock. The bit for the lane will have cleared in
+			 * either EIESTS or CDRLOCK
+			 */
+			if (!(eie_detsts.s.eiests & eie_detsts.s.cdrlock & lane_mask)) {
+				fail |= lane_mask;
+				pending &= ~lane_mask;
+			} else if (rxx_eer.s.rxt_esv) {
+				pending &= ~lane_mask;
+			}
+		}
+
+		/* Breakout of the loop on timeout */
+		if (get_timer(timeout) > 250)
+			break;
+	}
+
+	lane_mask = 0;
+	/* Cleanup and report status */
+	for (l = 0; l < max_lanes; l++) {
+		if (lane != -1 && lane != l)
+			continue;
+
+		lane_mask = 1 << l;
+		rxx_eer.u64 = csr_rd_node(node, CVMX_GSERX_BR_RXX_EER(l, qlm));
+		/* Switch back to hardware control */
+		rxx_ctl.u64 = csr_rd_node(node, CVMX_GSERX_BR_RXX_CTL(l, qlm));
+		rxx_ctl.s.rxt_swm = 0;
+		csr_wr_node(node, CVMX_GSERX_BR_RXX_CTL(l, qlm), rxx_ctl.u64);
+
+		/* Report status */
+		if (fail & lane_mask) {
+#ifdef DEBUG_QLM
+			debug("%d:QLM%d: Lane%d RX equalization lost CDR Lock or entered Electrical Idle\n",
+			      node, qlm, l);
+#endif
+		} else if ((pending & lane_mask) || !rxx_eer.s.rxt_esv) {
+#ifdef DEBUG_QLM
+			debug("%d:QLM%d: Lane %d RX equalization timeout\n", node, qlm, l);
+#endif
+			fail |= 1 << l;
+		} else {
+#ifdef DEBUG_QLM
+			char *dir_label[4] = { "Hold", "Inc", "Dec", "Hold" };
+#ifdef DEBUG_QLM_RX
+			cvmx_gserx_lanex_rx_aeq_out_0_t rx_aeq_out_0;
+			cvmx_gserx_lanex_rx_aeq_out_1_t rx_aeq_out_1;
+			cvmx_gserx_lanex_rx_aeq_out_2_t rx_aeq_out_2;
+			cvmx_gserx_lanex_rx_vma_status_0_t rx_vma_status_0;
+#endif
+			debug("%d:QLM%d: Lane%d: RX equalization completed.\n", node, qlm, l);
+			debug("    Tx Direction Hints TXPRE: %s, TXMAIN: %s, TXPOST: %s, Figure of Merit: %d\n",
+			      dir_label[(rxx_eer.s.rxt_esm) & 0x3],
+			      dir_label[((rxx_eer.s.rxt_esm) >> 2) & 0x3],
+			      dir_label[((rxx_eer.s.rxt_esm) >> 4) & 0x3], rxx_eer.s.rxt_esm >> 6);
+
+#ifdef DEBUG_QLM_RX
+			rx_aeq_out_0.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_AEQ_OUT_0(l, qlm));
+			rx_aeq_out_1.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_AEQ_OUT_1(l, qlm));
+			rx_aeq_out_2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_AEQ_OUT_2(l, qlm));
+			rx_vma_status_0.u64 =
+				csr_rd_node(node, CVMX_GSERX_LANEX_RX_VMA_STATUS_0(l, qlm));
+			debug("    DFE Tap1:%lu, Tap2:%ld, Tap3:%ld, Tap4:%ld, Tap5:%ld\n",
+			      (unsigned int long)cvmx_bit_extract(rx_aeq_out_1.u64, 0, 5),
+			      (unsigned int long)cvmx_bit_extract_smag(rx_aeq_out_1.u64, 5, 9),
+			      (unsigned int long)cvmx_bit_extract_smag(rx_aeq_out_1.u64, 10, 14),
+			      (unsigned int long)cvmx_bit_extract_smag(rx_aeq_out_0.u64, 0, 4),
+			      (unsigned int long)cvmx_bit_extract_smag(rx_aeq_out_0.u64, 5, 9));
+			debug("    Pre-CTLE Gain:%lu, Post-CTLE Gain:%lu, CTLE Peak:%lu, CTLE Pole:%lu\n",
+			      (unsigned int long)cvmx_bit_extract(rx_aeq_out_2.u64, 4, 4),
+			      (unsigned int long)cvmx_bit_extract(rx_aeq_out_2.u64, 0, 4),
+			      (unsigned int long)cvmx_bit_extract(rx_vma_status_0.u64, 2, 4),
+			      (unsigned int long)cvmx_bit_extract(rx_vma_status_0.u64, 0, 2));
+#endif
+#endif
+		}
+	}
+
+	return (fail) ? -1 : 0;
+}
+
+/**
+ * Errata GSER-27882 -GSER 10GBASE-KR Transmit Equalizer
+ * Training may not update PHY Tx Taps. This function is not static
+ * so we can share it with BGX KR
+ *
+ * @param node	Node to apply errata workaround
+ * @param qlm	QLM to apply errata workaround
+ * @param lane	Lane to apply the errata
+ */
+int cvmx_qlm_gser_errata_27882(int node, int qlm, int lane)
+{
+	cvmx_gserx_lanex_pcs_ctlifc_0_t clifc0;
+	cvmx_gserx_lanex_pcs_ctlifc_2_t clifc2;
+
+	if (!(OCTEON_IS_MODEL(OCTEON_CN73XX_PASS1_0) || OCTEON_IS_MODEL(OCTEON_CN73XX_PASS1_1) ||
+	      OCTEON_IS_MODEL(OCTEON_CN73XX_PASS1_2) || OCTEON_IS_MODEL(OCTEON_CNF75XX_PASS1_0) ||
+	      OCTEON_IS_MODEL(OCTEON_CN78XX)))
+		return 0;
+
+	if (CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_GSERX_RX_EIE_DETSTS(qlm),
+				       cvmx_gserx_rx_eie_detsts_t, cdrlock, &,
+				       (1 << lane), 200))
+		return -1;
+
+	clifc0.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_0(lane, qlm));
+	clifc0.s.cfg_tx_coeff_req_ovrrd_val = 1;
+	csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_0(lane, qlm), clifc0.u64);
+	clifc2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm));
+	clifc2.s.cfg_tx_coeff_req_ovrrd_en = 1;
+	csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm), clifc2.u64);
+	clifc2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm));
+	clifc2.s.ctlifc_ovrrd_req = 1;
+	csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm), clifc2.u64);
+	clifc2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm));
+	clifc2.s.cfg_tx_coeff_req_ovrrd_en = 0;
+	csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm), clifc2.u64);
+	clifc2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm));
+	clifc2.s.ctlifc_ovrrd_req = 1;
+	csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm), clifc2.u64);
+	return 0;
+}
+
+/**
+ * Updates the RX EQ Default Settings Update (CTLE Bias) to support longer
+ * SERDES channels
+ *
+ * @INTERNAL
+ *
+ * @param node	Node number to configure
+ * @param qlm	QLM number to configure
+ */
+void cvmx_qlm_gser_errata_25992(int node, int qlm)
+{
+	int lane;
+	int num_lanes = cvmx_qlm_get_lanes(qlm);
+
+	if (!(OCTEON_IS_MODEL(OCTEON_CN73XX_PASS1_0) || OCTEON_IS_MODEL(OCTEON_CN73XX_PASS1_1) ||
+	      OCTEON_IS_MODEL(OCTEON_CN73XX_PASS1_2) || OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X)))
+		return;
+
+	for (lane = 0; lane < num_lanes; lane++) {
+		cvmx_gserx_lanex_rx_ctle_ctrl_t rx_ctle_ctrl;
+		cvmx_gserx_lanex_rx_cfg_4_t rx_cfg_4;
+
+		rx_ctle_ctrl.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_CTLE_CTRL(lane, qlm));
+		rx_ctle_ctrl.s.pcs_sds_rx_ctle_bias_ctrl = 3;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_CTLE_CTRL(lane, qlm), rx_ctle_ctrl.u64);
+
+		rx_cfg_4.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_CFG_4(lane, qlm));
+		rx_cfg_4.s.cfg_rx_errdet_ctrl = 0xcd6f;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_CFG_4(lane, qlm), rx_cfg_4.u64);
+	}
+}
+
+void cvmx_qlm_display_registers(int qlm)
+{
+	int num_lanes = cvmx_qlm_get_lanes(qlm);
+	int lane;
+	const __cvmx_qlm_jtag_field_t *ptr = cvmx_qlm_jtag_get_field();
+
+	debug("%29s", "Field[<stop bit>:<start bit>]");
+	for (lane = 0; lane < num_lanes; lane++)
+		debug("\t      Lane %d", lane);
+	debug("\n");
+
+	while (ptr && ptr->name) {
+		debug("%20s[%3d:%3d]", ptr->name, ptr->stop_bit, ptr->start_bit);
+		for (lane = 0; lane < num_lanes; lane++) {
+			u64 val;
+			int tx_byp = 0;
+
+			/*
+			 * Make sure serdes_tx_byp is set for displaying
+			 * TX amplitude and TX demphasis field values.
+			 */
+			if (strncmp(ptr->name, "biasdrv_", 8) == 0 ||
+			    strncmp(ptr->name, "tcoeff_", 7) == 0) {
+				tx_byp = cvmx_qlm_jtag_get(qlm, lane, "serdes_tx_byp");
+				if (tx_byp == 0) {
+					debug("\t \t");
+					continue;
+				}
+			}
+			val = cvmx_qlm_jtag_get(qlm, lane, ptr->name);
+			debug("\t%4llu (0x%04llx)", (unsigned long long)val,
+			      (unsigned long long)val);
+		}
+		debug("\n");
+		ptr++;
+	}
+}
+
+/* ToDo: CVMX_DUMP_GSER removed for now (unused!) */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-address.h b/arch/mips/mach-octeon/include/mach/cvmx-address.h
new file mode 100644
index 0000000..984f574
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-address.h
@@ -0,0 +1,209 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Typedefs and defines for working with Octeon physical addresses.
+ */
+
+#ifndef __CVMX_ADDRESS_H__
+#define __CVMX_ADDRESS_H__
+
+typedef enum {
+	CVMX_MIPS_SPACE_XKSEG = 3LL,
+	CVMX_MIPS_SPACE_XKPHYS = 2LL,
+	CVMX_MIPS_SPACE_XSSEG = 1LL,
+	CVMX_MIPS_SPACE_XUSEG = 0LL
+} cvmx_mips_space_t;
+
+typedef enum {
+	CVMX_MIPS_XKSEG_SPACE_KSEG0 = 0LL,
+	CVMX_MIPS_XKSEG_SPACE_KSEG1 = 1LL,
+	CVMX_MIPS_XKSEG_SPACE_SSEG = 2LL,
+	CVMX_MIPS_XKSEG_SPACE_KSEG3 = 3LL
+} cvmx_mips_xkseg_space_t;
+
+/* decodes <14:13> of a kseg3 window address */
+typedef enum {
+	CVMX_ADD_WIN_SCR = 0L,
+	CVMX_ADD_WIN_DMA = 1L,
+	CVMX_ADD_WIN_UNUSED = 2L,
+	CVMX_ADD_WIN_UNUSED2 = 3L
+} cvmx_add_win_dec_t;
+
+/* decode within DMA space */
+typedef enum {
+	CVMX_ADD_WIN_DMA_ADD = 0L,
+	CVMX_ADD_WIN_DMA_SENDMEM = 1L,
+	/* store data must be normal DRAM memory space address in this case */
+	CVMX_ADD_WIN_DMA_SENDDMA = 2L,
+	/* see CVMX_ADD_WIN_DMA_SEND_DEC for data contents */
+	CVMX_ADD_WIN_DMA_SENDIO = 3L,
+	/* store data must be normal IO space address in this case */
+	CVMX_ADD_WIN_DMA_SENDSINGLE = 4L,
+	/* no write buffer data needed/used */
+} cvmx_add_win_dma_dec_t;
+
+/**
+ *   Physical Address Decode
+ *
+ * Octeon-I HW never interprets this X (<39:36> reserved
+ * for future expansion), software should set to 0.
+ *
+ *  - 0x0 XXX0 0000 0000 to      DRAM         Cached
+ *  - 0x0 XXX0 0FFF FFFF
+ *
+ *  - 0x0 XXX0 1000 0000 to      Boot Bus     Uncached  (Converted to 0x1 00X0 1000 0000
+ *  - 0x0 XXX0 1FFF FFFF         + EJTAG                           to 0x1 00X0 1FFF FFFF)
+ *
+ *  - 0x0 XXX0 2000 0000 to      DRAM         Cached
+ *  - 0x0 XXXF FFFF FFFF
+ *
+ *  - 0x1 00X0 0000 0000 to      Boot Bus     Uncached
+ *  - 0x1 00XF FFFF FFFF
+ *
+ *  - 0x1 01X0 0000 0000 to      Other NCB    Uncached
+ *  - 0x1 FFXF FFFF FFFF         devices
+ *
+ * Decode of all Octeon addresses
+ */
+typedef union {
+	u64 u64;
+	struct {
+		cvmx_mips_space_t R : 2;
+		u64 offset : 62;
+	} sva;
+
+	struct {
+		u64 zeroes : 33;
+		u64 offset : 31;
+	} suseg;
+
+	struct {
+		u64 ones : 33;
+		cvmx_mips_xkseg_space_t sp : 2;
+		u64 offset : 29;
+	} sxkseg;
+
+	struct {
+		cvmx_mips_space_t R : 2;
+		u64 cca : 3;
+		u64 mbz : 10;
+		u64 pa : 49;
+	} sxkphys;
+
+	struct {
+		u64 mbz : 15;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 unaddr : 4;
+		u64 offset : 36;
+	} sphys;
+
+	struct {
+		u64 zeroes : 24;
+		u64 unaddr : 4;
+		u64 offset : 36;
+	} smem;
+
+	struct {
+		u64 mem_region : 2;
+		u64 mbz : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 unaddr : 4;
+		u64 offset : 36;
+	} sio;
+
+	struct {
+		u64 ones : 49;
+		cvmx_add_win_dec_t csrdec : 2;
+		u64 addr : 13;
+	} sscr;
+
+	/* there should only be stores to IOBDMA space, no loads */
+	struct {
+		u64 ones : 49;
+		cvmx_add_win_dec_t csrdec : 2;
+		u64 unused2 : 3;
+		cvmx_add_win_dma_dec_t type : 3;
+		u64 addr : 7;
+	} sdma;
+
+	struct {
+		u64 didspace : 24;
+		u64 unused : 40;
+	} sfilldidspace;
+} cvmx_addr_t;
+
+/* These macros for used by 32 bit applications */
+
+#define CVMX_MIPS32_SPACE_KSEG0	     1l
+#define CVMX_ADD_SEG32(segment, add) (((s32)segment << 31) | (s32)(add))
+
+/*
+ * Currently all IOs are performed using XKPHYS addressing. Linux uses the
+ * CvmMemCtl register to enable XKPHYS addressing to IO space from user mode.
+ * Future OSes may need to change the upper bits of IO addresses. The
+ * following define controls the upper two bits for all IO addresses generated
+ * by the simple executive library
+ */
+#define CVMX_IO_SEG CVMX_MIPS_SPACE_XKPHYS
+
+/* These macros simplify the process of creating common IO addresses */
+#define CVMX_ADD_SEG(segment, add) ((((u64)segment) << 62) | (add))
+
+#define CVMX_ADD_IO_SEG(add) (add)
+
+#define CVMX_ADDR_DIDSPACE(did)	   (((CVMX_IO_SEG) << 22) | ((1ULL) << 8) | (did))
+#define CVMX_ADDR_DID(did)	   (CVMX_ADDR_DIDSPACE(did) << 40)
+#define CVMX_FULL_DID(did, subdid) (((did) << 3) | (subdid))
+
+/* from include/ncb_rsl_id.v */
+#define CVMX_OCT_DID_MIS  0ULL /* misc stuff */
+#define CVMX_OCT_DID_GMX0 1ULL
+#define CVMX_OCT_DID_GMX1 2ULL
+#define CVMX_OCT_DID_PCI  3ULL
+#define CVMX_OCT_DID_KEY  4ULL
+#define CVMX_OCT_DID_FPA  5ULL
+#define CVMX_OCT_DID_DFA  6ULL
+#define CVMX_OCT_DID_ZIP  7ULL
+#define CVMX_OCT_DID_RNG  8ULL
+#define CVMX_OCT_DID_IPD  9ULL
+#define CVMX_OCT_DID_PKT  10ULL
+#define CVMX_OCT_DID_TIM  11ULL
+#define CVMX_OCT_DID_TAG  12ULL
+/* the rest are not on the IO bus */
+#define CVMX_OCT_DID_L2C  16ULL
+#define CVMX_OCT_DID_LMC  17ULL
+#define CVMX_OCT_DID_SPX0 18ULL
+#define CVMX_OCT_DID_SPX1 19ULL
+#define CVMX_OCT_DID_PIP  20ULL
+#define CVMX_OCT_DID_ASX0 22ULL
+#define CVMX_OCT_DID_ASX1 23ULL
+#define CVMX_OCT_DID_IOB  30ULL
+
+#define CVMX_OCT_DID_PKT_SEND	 CVMX_FULL_DID(CVMX_OCT_DID_PKT, 2ULL)
+#define CVMX_OCT_DID_TAG_SWTAG	 CVMX_FULL_DID(CVMX_OCT_DID_TAG, 0ULL)
+#define CVMX_OCT_DID_TAG_TAG1	 CVMX_FULL_DID(CVMX_OCT_DID_TAG, 1ULL)
+#define CVMX_OCT_DID_TAG_TAG2	 CVMX_FULL_DID(CVMX_OCT_DID_TAG, 2ULL)
+#define CVMX_OCT_DID_TAG_TAG3	 CVMX_FULL_DID(CVMX_OCT_DID_TAG, 3ULL)
+#define CVMX_OCT_DID_TAG_NULL_RD CVMX_FULL_DID(CVMX_OCT_DID_TAG, 4ULL)
+#define CVMX_OCT_DID_TAG_TAG5	 CVMX_FULL_DID(CVMX_OCT_DID_TAG, 5ULL)
+#define CVMX_OCT_DID_TAG_CSR	 CVMX_FULL_DID(CVMX_OCT_DID_TAG, 7ULL)
+#define CVMX_OCT_DID_FAU_FAI	 CVMX_FULL_DID(CVMX_OCT_DID_IOB, 0ULL)
+#define CVMX_OCT_DID_TIM_CSR	 CVMX_FULL_DID(CVMX_OCT_DID_TIM, 0ULL)
+#define CVMX_OCT_DID_KEY_RW	 CVMX_FULL_DID(CVMX_OCT_DID_KEY, 0ULL)
+#define CVMX_OCT_DID_PCI_6	 CVMX_FULL_DID(CVMX_OCT_DID_PCI, 6ULL)
+#define CVMX_OCT_DID_MIS_BOO	 CVMX_FULL_DID(CVMX_OCT_DID_MIS, 0ULL)
+#define CVMX_OCT_DID_PCI_RML	 CVMX_FULL_DID(CVMX_OCT_DID_PCI, 0ULL)
+#define CVMX_OCT_DID_IPD_CSR	 CVMX_FULL_DID(CVMX_OCT_DID_IPD, 7ULL)
+#define CVMX_OCT_DID_DFA_CSR	 CVMX_FULL_DID(CVMX_OCT_DID_DFA, 7ULL)
+#define CVMX_OCT_DID_MIS_CSR	 CVMX_FULL_DID(CVMX_OCT_DID_MIS, 7ULL)
+#define CVMX_OCT_DID_ZIP_CSR	 CVMX_FULL_DID(CVMX_OCT_DID_ZIP, 0ULL)
+
+/* Cast to unsigned long long, mainly for use in printfs. */
+#define CAST_ULL(v) ((unsigned long long)(v))
+
+#define UNMAPPED_PTR(x) ((1ULL << 63) | (x))
+
+#endif /* __CVMX_ADDRESS_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-agl-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-agl-defs.h
new file mode 100644
index 0000000..bbf1f59
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-agl-defs.h
@@ -0,0 +1,3135 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon agl.
+ *
+ */
+
+#ifndef __CVMX_AGL_DEFS_H__
+#define __CVMX_AGL_DEFS_H__
+
+#define CVMX_AGL_GMX_BAD_REG			    (0x00011800E0000518ull)
+#define CVMX_AGL_GMX_BIST			    (0x00011800E0000400ull)
+#define CVMX_AGL_GMX_DRV_CTL			    (0x00011800E00007F0ull)
+#define CVMX_AGL_GMX_INF_MODE			    (0x00011800E00007F8ull)
+#define CVMX_AGL_GMX_PRTX_CFG(offset)		    (0x00011800E0000010ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_ADR_CAM0(offset)	    (0x00011800E0000180ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_ADR_CAM1(offset)	    (0x00011800E0000188ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_ADR_CAM2(offset)	    (0x00011800E0000190ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_ADR_CAM3(offset)	    (0x00011800E0000198ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_ADR_CAM4(offset)	    (0x00011800E00001A0ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_ADR_CAM5(offset)	    (0x00011800E00001A8ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_ADR_CAM_EN(offset)	    (0x00011800E0000108ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_ADR_CTL(offset)	    (0x00011800E0000100ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_DECISION(offset)	    (0x00011800E0000040ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_FRM_CHK(offset)	    (0x00011800E0000020ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_FRM_CTL(offset)	    (0x00011800E0000018ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_FRM_MAX(offset)	    (0x00011800E0000030ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_FRM_MIN(offset)	    (0x00011800E0000028ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_IFG(offset)		    (0x00011800E0000058ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_INT_EN(offset)		    (0x00011800E0000008ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_INT_REG(offset)	    (0x00011800E0000000ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_JABBER(offset)		    (0x00011800E0000038ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_PAUSE_DROP_TIME(offset)    (0x00011800E0000068ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_RX_INBND(offset)	    (0x00011800E0000060ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_STATS_CTL(offset)	    (0x00011800E0000050ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_STATS_OCTS(offset)	    (0x00011800E0000088ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_STATS_OCTS_CTL(offset)	    (0x00011800E0000098ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_STATS_OCTS_DMAC(offset)    (0x00011800E00000A8ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_STATS_OCTS_DRP(offset)	    (0x00011800E00000B8ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_STATS_PKTS(offset)	    (0x00011800E0000080ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_STATS_PKTS_BAD(offset)	    (0x00011800E00000C0ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_STATS_PKTS_CTL(offset)	    (0x00011800E0000090ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_STATS_PKTS_DMAC(offset)    (0x00011800E00000A0ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_STATS_PKTS_DRP(offset)	    (0x00011800E00000B0ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RXX_UDD_SKP(offset)	    (0x00011800E0000048ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_RX_BP_DROPX(offset)	    (0x00011800E0000420ull + ((offset) & 1) * 8)
+#define CVMX_AGL_GMX_RX_BP_OFFX(offset)		    (0x00011800E0000460ull + ((offset) & 1) * 8)
+#define CVMX_AGL_GMX_RX_BP_ONX(offset)		    (0x00011800E0000440ull + ((offset) & 1) * 8)
+#define CVMX_AGL_GMX_RX_PRT_INFO		    (0x00011800E00004E8ull)
+#define CVMX_AGL_GMX_RX_TX_STATUS		    (0x00011800E00007E8ull)
+#define CVMX_AGL_GMX_SMACX(offset)		    (0x00011800E0000230ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_STAT_BP			    (0x00011800E0000520ull)
+#define CVMX_AGL_GMX_TXX_APPEND(offset)		    (0x00011800E0000218ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_CLK(offset)		    (0x00011800E0000208ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_CTL(offset)		    (0x00011800E0000270ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_MIN_PKT(offset)	    (0x00011800E0000240ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_PAUSE_PKT_INTERVAL(offset) (0x00011800E0000248ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_PAUSE_PKT_TIME(offset)	    (0x00011800E0000238ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_PAUSE_TOGO(offset)	    (0x00011800E0000258ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_PAUSE_ZERO(offset)	    (0x00011800E0000260ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_SOFT_PAUSE(offset)	    (0x00011800E0000250ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STAT0(offset)		    (0x00011800E0000280ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STAT1(offset)		    (0x00011800E0000288ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STAT2(offset)		    (0x00011800E0000290ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STAT3(offset)		    (0x00011800E0000298ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STAT4(offset)		    (0x00011800E00002A0ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STAT5(offset)		    (0x00011800E00002A8ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STAT6(offset)		    (0x00011800E00002B0ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STAT7(offset)		    (0x00011800E00002B8ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STAT8(offset)		    (0x00011800E00002C0ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STAT9(offset)		    (0x00011800E00002C8ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_STATS_CTL(offset)	    (0x00011800E0000268ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TXX_THRESH(offset)		    (0x00011800E0000210ull + ((offset) & 1) * 2048)
+#define CVMX_AGL_GMX_TX_BP			    (0x00011800E00004D0ull)
+#define CVMX_AGL_GMX_TX_COL_ATTEMPT		    (0x00011800E0000498ull)
+#define CVMX_AGL_GMX_TX_IFG			    (0x00011800E0000488ull)
+#define CVMX_AGL_GMX_TX_INT_EN			    (0x00011800E0000508ull)
+#define CVMX_AGL_GMX_TX_INT_REG			    (0x00011800E0000500ull)
+#define CVMX_AGL_GMX_TX_JAM			    (0x00011800E0000490ull)
+#define CVMX_AGL_GMX_TX_LFSR			    (0x00011800E00004F8ull)
+#define CVMX_AGL_GMX_TX_OVR_BP			    (0x00011800E00004C8ull)
+#define CVMX_AGL_GMX_TX_PAUSE_PKT_DMAC		    (0x00011800E00004A0ull)
+#define CVMX_AGL_GMX_TX_PAUSE_PKT_TYPE		    (0x00011800E00004A8ull)
+#define CVMX_AGL_GMX_WOL_CTL			    (0x00011800E0000780ull)
+#define CVMX_AGL_PRTX_CTL(offset)		    (0x00011800E0002000ull + ((offset) & 1) * 8)
+
+/**
+ * cvmx_agl_gmx_bad_reg
+ *
+ * AGL_GMX_BAD_REG = A collection of things that have gone very, very wrong
+ *
+ *
+ * Notes:
+ * OUT_OVR[0], LOSTSTAT[0], OVRFLW, TXPOP, TXPSH    will be reset when MIX0_CTL[RESET] is set to 1.
+ * OUT_OVR[1], LOSTSTAT[1], OVRFLW1, TXPOP1, TXPSH1 will be reset when MIX1_CTL[RESET] is set to 1.
+ * STATOVR will be reset when both MIX0/1_CTL[RESET] are set to 1.
+ */
+union cvmx_agl_gmx_bad_reg {
+	u64 u64;
+	struct cvmx_agl_gmx_bad_reg_s {
+		u64 reserved_38_63 : 26;
+		u64 txpsh1 : 1;
+		u64 txpop1 : 1;
+		u64 ovrflw1 : 1;
+		u64 txpsh : 1;
+		u64 txpop : 1;
+		u64 ovrflw : 1;
+		u64 reserved_27_31 : 5;
+		u64 statovr : 1;
+		u64 reserved_24_25 : 2;
+		u64 loststat : 2;
+		u64 reserved_4_21 : 18;
+		u64 out_ovr : 2;
+		u64 reserved_0_1 : 2;
+	} s;
+	struct cvmx_agl_gmx_bad_reg_cn52xx {
+		u64 reserved_38_63 : 26;
+		u64 txpsh1 : 1;
+		u64 txpop1 : 1;
+		u64 ovrflw1 : 1;
+		u64 txpsh : 1;
+		u64 txpop : 1;
+		u64 ovrflw : 1;
+		u64 reserved_27_31 : 5;
+		u64 statovr : 1;
+		u64 reserved_23_25 : 3;
+		u64 loststat : 1;
+		u64 reserved_4_21 : 18;
+		u64 out_ovr : 2;
+		u64 reserved_0_1 : 2;
+	} cn52xx;
+	struct cvmx_agl_gmx_bad_reg_cn52xx cn52xxp1;
+	struct cvmx_agl_gmx_bad_reg_cn56xx {
+		u64 reserved_35_63 : 29;
+		u64 txpsh : 1;
+		u64 txpop : 1;
+		u64 ovrflw : 1;
+		u64 reserved_27_31 : 5;
+		u64 statovr : 1;
+		u64 reserved_23_25 : 3;
+		u64 loststat : 1;
+		u64 reserved_3_21 : 19;
+		u64 out_ovr : 1;
+		u64 reserved_0_1 : 2;
+	} cn56xx;
+	struct cvmx_agl_gmx_bad_reg_cn56xx cn56xxp1;
+	struct cvmx_agl_gmx_bad_reg_s cn61xx;
+	struct cvmx_agl_gmx_bad_reg_s cn63xx;
+	struct cvmx_agl_gmx_bad_reg_s cn63xxp1;
+	struct cvmx_agl_gmx_bad_reg_s cn66xx;
+	struct cvmx_agl_gmx_bad_reg_s cn68xx;
+	struct cvmx_agl_gmx_bad_reg_s cn68xxp1;
+	struct cvmx_agl_gmx_bad_reg_cn56xx cn70xx;
+	struct cvmx_agl_gmx_bad_reg_cn56xx cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_bad_reg cvmx_agl_gmx_bad_reg_t;
+
+/**
+ * cvmx_agl_gmx_bist
+ *
+ * AGL_GMX_BIST = GMX BIST Results
+ *
+ *
+ * Notes:
+ * Not reset when MIX*_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_bist {
+	u64 u64;
+	struct cvmx_agl_gmx_bist_s {
+		u64 reserved_25_63 : 39;
+		u64 status : 25;
+	} s;
+	struct cvmx_agl_gmx_bist_cn52xx {
+		u64 reserved_10_63 : 54;
+		u64 status : 10;
+	} cn52xx;
+	struct cvmx_agl_gmx_bist_cn52xx cn52xxp1;
+	struct cvmx_agl_gmx_bist_cn52xx cn56xx;
+	struct cvmx_agl_gmx_bist_cn52xx cn56xxp1;
+	struct cvmx_agl_gmx_bist_s cn61xx;
+	struct cvmx_agl_gmx_bist_s cn63xx;
+	struct cvmx_agl_gmx_bist_s cn63xxp1;
+	struct cvmx_agl_gmx_bist_s cn66xx;
+	struct cvmx_agl_gmx_bist_s cn68xx;
+	struct cvmx_agl_gmx_bist_s cn68xxp1;
+	struct cvmx_agl_gmx_bist_s cn70xx;
+	struct cvmx_agl_gmx_bist_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_bist cvmx_agl_gmx_bist_t;
+
+/**
+ * cvmx_agl_gmx_drv_ctl
+ *
+ * AGL_GMX_DRV_CTL = GMX Drive Control
+ *
+ *
+ * Notes:
+ * NCTL, PCTL, BYP_EN    will be reset when MIX0_CTL[RESET] is set to 1.
+ * NCTL1, PCTL1, BYP_EN1 will be reset when MIX1_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_drv_ctl {
+	u64 u64;
+	struct cvmx_agl_gmx_drv_ctl_s {
+		u64 reserved_49_63 : 15;
+		u64 byp_en1 : 1;
+		u64 reserved_45_47 : 3;
+		u64 pctl1 : 5;
+		u64 reserved_37_39 : 3;
+		u64 nctl1 : 5;
+		u64 reserved_17_31 : 15;
+		u64 byp_en : 1;
+		u64 reserved_13_15 : 3;
+		u64 pctl : 5;
+		u64 reserved_5_7 : 3;
+		u64 nctl : 5;
+	} s;
+	struct cvmx_agl_gmx_drv_ctl_s cn52xx;
+	struct cvmx_agl_gmx_drv_ctl_s cn52xxp1;
+	struct cvmx_agl_gmx_drv_ctl_cn56xx {
+		u64 reserved_17_63 : 47;
+		u64 byp_en : 1;
+		u64 reserved_13_15 : 3;
+		u64 pctl : 5;
+		u64 reserved_5_7 : 3;
+		u64 nctl : 5;
+	} cn56xx;
+	struct cvmx_agl_gmx_drv_ctl_cn56xx cn56xxp1;
+};
+
+typedef union cvmx_agl_gmx_drv_ctl cvmx_agl_gmx_drv_ctl_t;
+
+/**
+ * cvmx_agl_gmx_inf_mode
+ *
+ * AGL_GMX_INF_MODE = Interface Mode
+ *
+ *
+ * Notes:
+ * Not reset when MIX*_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_inf_mode {
+	u64 u64;
+	struct cvmx_agl_gmx_inf_mode_s {
+		u64 reserved_2_63 : 62;
+		u64 en : 1;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_agl_gmx_inf_mode_s cn52xx;
+	struct cvmx_agl_gmx_inf_mode_s cn52xxp1;
+	struct cvmx_agl_gmx_inf_mode_s cn56xx;
+	struct cvmx_agl_gmx_inf_mode_s cn56xxp1;
+};
+
+typedef union cvmx_agl_gmx_inf_mode cvmx_agl_gmx_inf_mode_t;
+
+/**
+ * cvmx_agl_gmx_prt#_cfg
+ *
+ * AGL_GMX_PRT_CFG = Port description
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_prtx_cfg {
+	u64 u64;
+	struct cvmx_agl_gmx_prtx_cfg_s {
+		u64 reserved_14_63 : 50;
+		u64 tx_idle : 1;
+		u64 rx_idle : 1;
+		u64 reserved_9_11 : 3;
+		u64 speed_msb : 1;
+		u64 reserved_7_7 : 1;
+		u64 burst : 1;
+		u64 tx_en : 1;
+		u64 rx_en : 1;
+		u64 slottime : 1;
+		u64 duplex : 1;
+		u64 speed : 1;
+		u64 en : 1;
+	} s;
+	struct cvmx_agl_gmx_prtx_cfg_cn52xx {
+		u64 reserved_6_63 : 58;
+		u64 tx_en : 1;
+		u64 rx_en : 1;
+		u64 slottime : 1;
+		u64 duplex : 1;
+		u64 speed : 1;
+		u64 en : 1;
+	} cn52xx;
+	struct cvmx_agl_gmx_prtx_cfg_cn52xx cn52xxp1;
+	struct cvmx_agl_gmx_prtx_cfg_cn52xx cn56xx;
+	struct cvmx_agl_gmx_prtx_cfg_cn52xx cn56xxp1;
+	struct cvmx_agl_gmx_prtx_cfg_s cn61xx;
+	struct cvmx_agl_gmx_prtx_cfg_s cn63xx;
+	struct cvmx_agl_gmx_prtx_cfg_s cn63xxp1;
+	struct cvmx_agl_gmx_prtx_cfg_s cn66xx;
+	struct cvmx_agl_gmx_prtx_cfg_s cn68xx;
+	struct cvmx_agl_gmx_prtx_cfg_s cn68xxp1;
+	struct cvmx_agl_gmx_prtx_cfg_s cn70xx;
+	struct cvmx_agl_gmx_prtx_cfg_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_prtx_cfg cvmx_agl_gmx_prtx_cfg_t;
+
+/**
+ * cvmx_agl_gmx_rx#_adr_cam0
+ *
+ * AGL_GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_agl_gmx_rxx_adr_cam0 {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn52xx;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn56xx;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn61xx;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn63xx;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn66xx;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn68xx;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn70xx;
+	struct cvmx_agl_gmx_rxx_adr_cam0_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_adr_cam0 cvmx_agl_gmx_rxx_adr_cam0_t;
+
+/**
+ * cvmx_agl_gmx_rx#_adr_cam1
+ *
+ * AGL_GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_agl_gmx_rxx_adr_cam1 {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn52xx;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn56xx;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn61xx;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn63xx;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn66xx;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn68xx;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn70xx;
+	struct cvmx_agl_gmx_rxx_adr_cam1_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_adr_cam1 cvmx_agl_gmx_rxx_adr_cam1_t;
+
+/**
+ * cvmx_agl_gmx_rx#_adr_cam2
+ *
+ * AGL_GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_agl_gmx_rxx_adr_cam2 {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn52xx;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn56xx;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn61xx;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn63xx;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn66xx;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn68xx;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn70xx;
+	struct cvmx_agl_gmx_rxx_adr_cam2_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_adr_cam2 cvmx_agl_gmx_rxx_adr_cam2_t;
+
+/**
+ * cvmx_agl_gmx_rx#_adr_cam3
+ *
+ * AGL_GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_agl_gmx_rxx_adr_cam3 {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn52xx;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn56xx;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn61xx;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn63xx;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn66xx;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn68xx;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn70xx;
+	struct cvmx_agl_gmx_rxx_adr_cam3_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_adr_cam3 cvmx_agl_gmx_rxx_adr_cam3_t;
+
+/**
+ * cvmx_agl_gmx_rx#_adr_cam4
+ *
+ * AGL_GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_agl_gmx_rxx_adr_cam4 {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn52xx;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn56xx;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn61xx;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn63xx;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn66xx;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn68xx;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn70xx;
+	struct cvmx_agl_gmx_rxx_adr_cam4_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_adr_cam4 cvmx_agl_gmx_rxx_adr_cam4_t;
+
+/**
+ * cvmx_agl_gmx_rx#_adr_cam5
+ *
+ * AGL_GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_agl_gmx_rxx_adr_cam5 {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn52xx;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn56xx;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn61xx;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn63xx;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn66xx;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn68xx;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn70xx;
+	struct cvmx_agl_gmx_rxx_adr_cam5_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_adr_cam5 cvmx_agl_gmx_rxx_adr_cam5_t;
+
+/**
+ * cvmx_agl_gmx_rx#_adr_cam_en
+ *
+ * AGL_GMX_RX_ADR_CAM_EN = Address Filtering Control Enable
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_rxx_adr_cam_en {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s {
+		u64 reserved_8_63 : 56;
+		u64 en : 8;
+	} s;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn52xx;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn56xx;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn61xx;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn63xx;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn66xx;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn68xx;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn70xx;
+	struct cvmx_agl_gmx_rxx_adr_cam_en_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_adr_cam_en cvmx_agl_gmx_rxx_adr_cam_en_t;
+
+/**
+ * cvmx_agl_gmx_rx#_adr_ctl
+ *
+ * AGL_GMX_RX_ADR_CTL = Address Filtering Control
+ *
+ *
+ * Notes:
+ * * ALGORITHM
+ *   Here is some pseudo code that represents the address filter behavior.
+ *
+ *      @verbatim
+ *      bool dmac_addr_filter(uint8 prt, uint48 dmac) [
+ *        ASSERT(prt >= 0 && prt <= 3);
+ *        if (is_bcst(dmac))                               // broadcast accept
+ *          return (AGL_GMX_RX[prt]_ADR_CTL[BCST] ? ACCEPT : REJECT);
+ *        if (is_mcst(dmac) & AGL_GMX_RX[prt]_ADR_CTL[MCST] == 1)   // multicast reject
+ *          return REJECT;
+ *        if (is_mcst(dmac) & AGL_GMX_RX[prt]_ADR_CTL[MCST] == 2)   // multicast accept
+ *          return ACCEPT;
+ *
+ *        cam_hit = 0;
+ *
+ *        for (i=0; i<8; i++) [
+ *          if (AGL_GMX_RX[prt]_ADR_CAM_EN[EN<i>] == 0)
+ *            continue;
+ *          uint48 unswizzled_mac_adr = 0x0;
+ *          for (j=5; j>=0; j--) [
+ *             unswizzled_mac_adr = (unswizzled_mac_adr << 8) | AGL_GMX_RX[prt]_ADR_CAM[j][ADR<i*8+7:i*8>];
+ *          ]
+ *          if (unswizzled_mac_adr == dmac) [
+ *            cam_hit = 1;
+ *            break;
+ *          ]
+ *        ]
+ *
+ *        if (cam_hit)
+ *          return (AGL_GMX_RX[prt]_ADR_CTL[CAM_MODE] ? ACCEPT : REJECT);
+ *        else
+ *          return (AGL_GMX_RX[prt]_ADR_CTL[CAM_MODE] ? REJECT : ACCEPT);
+ *      ]
+ *      @endverbatim
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_adr_ctl {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s {
+		u64 reserved_4_63 : 60;
+		u64 cam_mode : 1;
+		u64 mcst : 2;
+		u64 bcst : 1;
+	} s;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn52xx;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn56xx;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn61xx;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn63xx;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn66xx;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn68xx;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn70xx;
+	struct cvmx_agl_gmx_rxx_adr_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_adr_ctl cvmx_agl_gmx_rxx_adr_ctl_t;
+
+/**
+ * cvmx_agl_gmx_rx#_decision
+ *
+ * AGL_GMX_RX_DECISION = The byte count to decide when to accept or filter a packet
+ *
+ *
+ * Notes:
+ * As each byte in a packet is received by GMX, the L2 byte count is compared
+ * against the AGL_GMX_RX_DECISION[CNT].  The L2 byte count is the number of bytes
+ * from the beginning of the L2 header (DMAC).  In normal operation, the L2
+ * header begins after the PREAMBLE+SFD (AGL_GMX_RX_FRM_CTL[PRE_CHK]=1) and any
+ * optional UDD skip data (AGL_GMX_RX_UDD_SKP[LEN]).
+ *
+ * When AGL_GMX_RX_FRM_CTL[PRE_CHK] is clear, PREAMBLE+SFD are prepended to the
+ * packet and would require UDD skip length to account for them.
+ *
+ *                                                 L2 Size
+ * Port Mode             <=AGL_GMX_RX_DECISION bytes (default=24)  >AGL_GMX_RX_DECISION bytes (default=24)
+ *
+ * MII/Full Duplex       accept packet                             apply filters
+ *                       no filtering is applied                   accept packet based on DMAC and PAUSE packet filters
+ *
+ * MII/Half Duplex       drop packet                               apply filters
+ *                       packet is unconditionally dropped         accept packet based on DMAC
+ *
+ * where l2_size = MAX(0, total_packet_size - AGL_GMX_RX_UDD_SKP[LEN] - ((AGL_GMX_RX_FRM_CTL[PRE_CHK]==1)*8)
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_decision {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_decision_s {
+		u64 reserved_5_63 : 59;
+		u64 cnt : 5;
+	} s;
+	struct cvmx_agl_gmx_rxx_decision_s cn52xx;
+	struct cvmx_agl_gmx_rxx_decision_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_decision_s cn56xx;
+	struct cvmx_agl_gmx_rxx_decision_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_decision_s cn61xx;
+	struct cvmx_agl_gmx_rxx_decision_s cn63xx;
+	struct cvmx_agl_gmx_rxx_decision_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_decision_s cn66xx;
+	struct cvmx_agl_gmx_rxx_decision_s cn68xx;
+	struct cvmx_agl_gmx_rxx_decision_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_decision_s cn70xx;
+	struct cvmx_agl_gmx_rxx_decision_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_decision cvmx_agl_gmx_rxx_decision_t;
+
+/**
+ * cvmx_agl_gmx_rx#_frm_chk
+ *
+ * AGL_GMX_RX_FRM_CHK = Which frame errors will set the ERR bit of the frame
+ *
+ *
+ * Notes:
+ * If AGL_GMX_RX_UDD_SKP[LEN] != 0, then LENERR will be forced to zero in HW.
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_frm_chk {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_frm_chk_s {
+		u64 reserved_10_63 : 54;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} s;
+	struct cvmx_agl_gmx_rxx_frm_chk_cn52xx {
+		u64 reserved_9_63 : 55;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 reserved_1_1 : 1;
+		u64 minerr : 1;
+	} cn52xx;
+	struct cvmx_agl_gmx_rxx_frm_chk_cn52xx cn52xxp1;
+	struct cvmx_agl_gmx_rxx_frm_chk_cn52xx cn56xx;
+	struct cvmx_agl_gmx_rxx_frm_chk_cn52xx cn56xxp1;
+	struct cvmx_agl_gmx_rxx_frm_chk_s cn61xx;
+	struct cvmx_agl_gmx_rxx_frm_chk_s cn63xx;
+	struct cvmx_agl_gmx_rxx_frm_chk_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_frm_chk_s cn66xx;
+	struct cvmx_agl_gmx_rxx_frm_chk_s cn68xx;
+	struct cvmx_agl_gmx_rxx_frm_chk_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_frm_chk_s cn70xx;
+	struct cvmx_agl_gmx_rxx_frm_chk_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_frm_chk cvmx_agl_gmx_rxx_frm_chk_t;
+
+/**
+ * cvmx_agl_gmx_rx#_frm_ctl
+ *
+ * AGL_GMX_RX_FRM_CTL = Frame Control
+ *
+ *
+ * Notes:
+ * * PRE_STRP
+ *   When PRE_CHK is set (indicating that the PREAMBLE will be sent), PRE_STRP
+ *   determines if the PREAMBLE+SFD bytes are thrown away or sent to the Octane
+ *   core as part of the packet.
+ *
+ *   In either mode, the PREAMBLE+SFD bytes are not counted toward the packet
+ *   size when checking against the MIN and MAX bounds.  Furthermore, the bytes
+ *   are skipped when locating the start of the L2 header for DMAC and Control
+ *   frame recognition.
+ *
+ * * CTL_BCK/CTL_DRP
+ *   These bits control how the HW handles incoming PAUSE packets.  Here are
+ *   the most common modes of operation:
+ *     CTL_BCK=1,CTL_DRP=1   - HW does it all
+ *     CTL_BCK=0,CTL_DRP=0   - SW sees all pause frames
+ *     CTL_BCK=0,CTL_DRP=1   - all pause frames are completely ignored
+ *
+ *   These control bits should be set to CTL_BCK=0,CTL_DRP=0 in halfdup mode.
+ *   Since PAUSE packets only apply to fulldup operation, any PAUSE packet
+ *   would constitute an exception which should be handled by the processing
+ *   cores.  PAUSE packets should not be forwarded.
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_frm_ctl {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_frm_ctl_s {
+		u64 reserved_13_63 : 51;
+		u64 ptp_mode : 1;
+		u64 reserved_11_11 : 1;
+		u64 null_dis : 1;
+		u64 pre_align : 1;
+		u64 pad_len : 1;
+		u64 vlan_len : 1;
+		u64 pre_free : 1;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} s;
+	struct cvmx_agl_gmx_rxx_frm_ctl_cn52xx {
+		u64 reserved_10_63 : 54;
+		u64 pre_align : 1;
+		u64 pad_len : 1;
+		u64 vlan_len : 1;
+		u64 pre_free : 1;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} cn52xx;
+	struct cvmx_agl_gmx_rxx_frm_ctl_cn52xx cn52xxp1;
+	struct cvmx_agl_gmx_rxx_frm_ctl_cn52xx cn56xx;
+	struct cvmx_agl_gmx_rxx_frm_ctl_cn52xx cn56xxp1;
+	struct cvmx_agl_gmx_rxx_frm_ctl_s cn61xx;
+	struct cvmx_agl_gmx_rxx_frm_ctl_s cn63xx;
+	struct cvmx_agl_gmx_rxx_frm_ctl_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_frm_ctl_s cn66xx;
+	struct cvmx_agl_gmx_rxx_frm_ctl_s cn68xx;
+	struct cvmx_agl_gmx_rxx_frm_ctl_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_frm_ctl_s cn70xx;
+	struct cvmx_agl_gmx_rxx_frm_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_frm_ctl cvmx_agl_gmx_rxx_frm_ctl_t;
+
+/**
+ * cvmx_agl_gmx_rx#_frm_max
+ *
+ * AGL_GMX_RX_FRM_MAX = Frame Max length
+ *
+ *
+ * Notes:
+ * When changing the LEN field, be sure that LEN does not exceed
+ * AGL_GMX_RX_JABBER[CNT]. Failure to meet this constraint will cause packets that
+ * are within the maximum length parameter to be rejected because they exceed
+ * the AGL_GMX_RX_JABBER[CNT] limit.
+ *
+ * Notes:
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_frm_max {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_frm_max_s {
+		u64 reserved_16_63 : 48;
+		u64 len : 16;
+	} s;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn52xx;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn56xx;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn61xx;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn63xx;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn66xx;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn68xx;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn70xx;
+	struct cvmx_agl_gmx_rxx_frm_max_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_frm_max cvmx_agl_gmx_rxx_frm_max_t;
+
+/**
+ * cvmx_agl_gmx_rx#_frm_min
+ *
+ * AGL_GMX_RX_FRM_MIN = Frame Min length
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_rxx_frm_min {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_frm_min_s {
+		u64 reserved_16_63 : 48;
+		u64 len : 16;
+	} s;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn52xx;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn56xx;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn61xx;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn63xx;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn66xx;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn68xx;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn70xx;
+	struct cvmx_agl_gmx_rxx_frm_min_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_frm_min cvmx_agl_gmx_rxx_frm_min_t;
+
+/**
+ * cvmx_agl_gmx_rx#_ifg
+ *
+ * AGL_GMX_RX_IFG = RX Min IFG
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_rxx_ifg {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_ifg_s {
+		u64 reserved_4_63 : 60;
+		u64 ifg : 4;
+	} s;
+	struct cvmx_agl_gmx_rxx_ifg_s cn52xx;
+	struct cvmx_agl_gmx_rxx_ifg_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_ifg_s cn56xx;
+	struct cvmx_agl_gmx_rxx_ifg_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_ifg_s cn61xx;
+	struct cvmx_agl_gmx_rxx_ifg_s cn63xx;
+	struct cvmx_agl_gmx_rxx_ifg_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_ifg_s cn66xx;
+	struct cvmx_agl_gmx_rxx_ifg_s cn68xx;
+	struct cvmx_agl_gmx_rxx_ifg_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_ifg_s cn70xx;
+	struct cvmx_agl_gmx_rxx_ifg_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_ifg cvmx_agl_gmx_rxx_ifg_t;
+
+/**
+ * cvmx_agl_gmx_rx#_int_en
+ *
+ * AGL_GMX_RX_INT_EN = Interrupt Enable
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_rxx_int_en {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_int_en_s {
+		u64 reserved_30_63 : 34;
+		u64 wol : 1;
+		u64 reserved_20_28 : 9;
+		u64 pause_drp : 1;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} s;
+	struct cvmx_agl_gmx_rxx_int_en_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 pause_drp : 1;
+		u64 reserved_16_18 : 3;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 reserved_9_9 : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 reserved_1_1 : 1;
+		u64 minerr : 1;
+	} cn52xx;
+	struct cvmx_agl_gmx_rxx_int_en_cn52xx cn52xxp1;
+	struct cvmx_agl_gmx_rxx_int_en_cn52xx cn56xx;
+	struct cvmx_agl_gmx_rxx_int_en_cn52xx cn56xxp1;
+	struct cvmx_agl_gmx_rxx_int_en_cn61xx {
+		u64 reserved_20_63 : 44;
+		u64 pause_drp : 1;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn61xx;
+	struct cvmx_agl_gmx_rxx_int_en_cn61xx cn63xx;
+	struct cvmx_agl_gmx_rxx_int_en_cn61xx cn63xxp1;
+	struct cvmx_agl_gmx_rxx_int_en_cn61xx cn66xx;
+	struct cvmx_agl_gmx_rxx_int_en_cn61xx cn68xx;
+	struct cvmx_agl_gmx_rxx_int_en_cn61xx cn68xxp1;
+	struct cvmx_agl_gmx_rxx_int_en_s cn70xx;
+	struct cvmx_agl_gmx_rxx_int_en_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_int_en cvmx_agl_gmx_rxx_int_en_t;
+
+/**
+ * cvmx_agl_gmx_rx#_int_reg
+ *
+ * AGL_GMX_RX_INT_REG = Interrupt Register
+ *
+ *
+ * Notes:
+ * (1) exceptions will only be raised to the control processor if the
+ *     corresponding bit in the AGL_GMX_RX_INT_EN register is set.
+ *
+ * (2) exception conditions 10:0 can also set the rcv/opcode in the received
+ *     packet's workQ entry.  The AGL_GMX_RX_FRM_CHK register provides a bit mask
+ *     for configuring which conditions set the error.
+ *
+ * (3) in half duplex operation, the expectation is that collisions will appear
+ *     as MINERRs.
+ *
+ * (4) JABBER - An RX Jabber error indicates that a packet was received which
+ *              is longer than the maximum allowed packet as defined by the
+ *              system.  GMX will truncate the packet at the JABBER count.
+ *              Failure to do so could lead to system instabilty.
+ *
+ * (6) MAXERR - for untagged frames, the total frame DA+SA+TL+DATA+PAD+FCS >
+ *              AGL_GMX_RX_FRM_MAX.  For tagged frames, DA+SA+VLAN+TL+DATA+PAD+FCS
+ *              > AGL_GMX_RX_FRM_MAX + 4*VLAN_VAL + 4*VLAN_STACKED.
+ *
+ * (7) MINERR - total frame DA+SA+TL+DATA+PAD+FCS < AGL_GMX_RX_FRM_MIN.
+ *
+ * (8) ALNERR - Indicates that the packet received was not an integer number of
+ *              bytes.  If FCS checking is enabled, ALNERR will only assert if
+ *              the FCS is bad.  If FCS checking is disabled, ALNERR will
+ *              assert in all non-integer frame cases.
+ *
+ * (9) Collisions - Collisions can only occur in half-duplex mode.  A collision
+ *                  is assumed by the receiver when the received
+ *                  frame < AGL_GMX_RX_FRM_MIN - this is normally a MINERR
+ *
+ * (A) LENERR - Length errors occur when the received packet does not match the
+ *              length field.  LENERR is only checked for packets between 64
+ *              and 1500 bytes.  For untagged frames, the length must exact
+ *              match.  For tagged frames the length or length+4 must match.
+ *
+ * (B) PCTERR - checks that the frame begins with a valid PREAMBLE sequence.
+ *              Does not check the number of PREAMBLE cycles.
+ *
+ * (C) OVRERR -
+ *
+ *              OVRERR is an architectural assertion check internal to GMX to
+ *              make sure no assumption was violated.  In a correctly operating
+ *              system, this interrupt can never fire.
+ *
+ *              GMX has an internal arbiter which selects which of 4 ports to
+ *              buffer in the main RX FIFO.  If we normally buffer 8 bytes,
+ *              then each port will typically push a tick every 8 cycles - if
+ *              the packet interface is going as fast as possible.  If there
+ *              are four ports, they push every two cycles.  So that's the
+ *              assumption.  That the inbound module will always be able to
+ *              consume the tick before another is produced.  If that doesn't
+ *              happen - that's when OVRERR will assert.
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_int_reg {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_int_reg_s {
+		u64 reserved_30_63 : 34;
+		u64 wol : 1;
+		u64 reserved_20_28 : 9;
+		u64 pause_drp : 1;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} s;
+	struct cvmx_agl_gmx_rxx_int_reg_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 pause_drp : 1;
+		u64 reserved_16_18 : 3;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 reserved_9_9 : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 reserved_1_1 : 1;
+		u64 minerr : 1;
+	} cn52xx;
+	struct cvmx_agl_gmx_rxx_int_reg_cn52xx cn52xxp1;
+	struct cvmx_agl_gmx_rxx_int_reg_cn52xx cn56xx;
+	struct cvmx_agl_gmx_rxx_int_reg_cn52xx cn56xxp1;
+	struct cvmx_agl_gmx_rxx_int_reg_cn61xx {
+		u64 reserved_20_63 : 44;
+		u64 pause_drp : 1;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn61xx;
+	struct cvmx_agl_gmx_rxx_int_reg_cn61xx cn63xx;
+	struct cvmx_agl_gmx_rxx_int_reg_cn61xx cn63xxp1;
+	struct cvmx_agl_gmx_rxx_int_reg_cn61xx cn66xx;
+	struct cvmx_agl_gmx_rxx_int_reg_cn61xx cn68xx;
+	struct cvmx_agl_gmx_rxx_int_reg_cn61xx cn68xxp1;
+	struct cvmx_agl_gmx_rxx_int_reg_s cn70xx;
+	struct cvmx_agl_gmx_rxx_int_reg_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_int_reg cvmx_agl_gmx_rxx_int_reg_t;
+
+/**
+ * cvmx_agl_gmx_rx#_jabber
+ *
+ * AGL_GMX_RX_JABBER = The max size packet after which GMX will truncate
+ *
+ *
+ * Notes:
+ * CNT must be 8-byte aligned such that CNT[2:0] == 0
+ *
+ *   The packet that will be sent to the packet input logic will have an
+ *   additionl 8 bytes if AGL_GMX_RX_FRM_CTL[PRE_CHK] is set and
+ *   AGL_GMX_RX_FRM_CTL[PRE_STRP] is clear.  The max packet that will be sent is
+ *   defined as...
+ *
+ *        max_sized_packet = AGL_GMX_RX_JABBER[CNT]+((AGL_GMX_RX_FRM_CTL[PRE_CHK] & !AGL_GMX_RX_FRM_CTL[PRE_STRP])*8)
+ *
+ *   Be sure the CNT field value is at least as large as the
+ *   AGL_GMX_RX_FRM_MAX[LEN] value. Failure to meet this constraint will cause
+ *   packets that are within the AGL_GMX_RX_FRM_MAX[LEN] length to be rejected
+ *   because they exceed the CNT limit.
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_jabber {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_jabber_s {
+		u64 reserved_16_63 : 48;
+		u64 cnt : 16;
+	} s;
+	struct cvmx_agl_gmx_rxx_jabber_s cn52xx;
+	struct cvmx_agl_gmx_rxx_jabber_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_jabber_s cn56xx;
+	struct cvmx_agl_gmx_rxx_jabber_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_jabber_s cn61xx;
+	struct cvmx_agl_gmx_rxx_jabber_s cn63xx;
+	struct cvmx_agl_gmx_rxx_jabber_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_jabber_s cn66xx;
+	struct cvmx_agl_gmx_rxx_jabber_s cn68xx;
+	struct cvmx_agl_gmx_rxx_jabber_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_jabber_s cn70xx;
+	struct cvmx_agl_gmx_rxx_jabber_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_jabber cvmx_agl_gmx_rxx_jabber_t;
+
+/**
+ * cvmx_agl_gmx_rx#_pause_drop_time
+ *
+ * AGL_GMX_RX_PAUSE_DROP_TIME = The TIME field in a PAUSE Packet which was dropped due to GMX RX FIFO full condition
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_rxx_pause_drop_time {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s {
+		u64 reserved_16_63 : 48;
+		u64 status : 16;
+	} s;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn52xx;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn56xx;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn61xx;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn63xx;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn66xx;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn68xx;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn70xx;
+	struct cvmx_agl_gmx_rxx_pause_drop_time_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_pause_drop_time cvmx_agl_gmx_rxx_pause_drop_time_t;
+
+/**
+ * cvmx_agl_gmx_rx#_rx_inbnd
+ *
+ * AGL_GMX_RX_INBND = RGMII InBand Link Status
+ *
+ */
+union cvmx_agl_gmx_rxx_rx_inbnd {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_rx_inbnd_s {
+		u64 reserved_4_63 : 60;
+		u64 duplex : 1;
+		u64 speed : 2;
+		u64 status : 1;
+	} s;
+	struct cvmx_agl_gmx_rxx_rx_inbnd_s cn61xx;
+	struct cvmx_agl_gmx_rxx_rx_inbnd_s cn63xx;
+	struct cvmx_agl_gmx_rxx_rx_inbnd_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_rx_inbnd_s cn66xx;
+	struct cvmx_agl_gmx_rxx_rx_inbnd_s cn68xx;
+	struct cvmx_agl_gmx_rxx_rx_inbnd_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_rx_inbnd_s cn70xx;
+	struct cvmx_agl_gmx_rxx_rx_inbnd_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_rx_inbnd cvmx_agl_gmx_rxx_rx_inbnd_t;
+
+/**
+ * cvmx_agl_gmx_rx#_stats_ctl
+ *
+ * AGL_GMX_RX_STATS_CTL = RX Stats Control register
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_rxx_stats_ctl {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s {
+		u64 reserved_1_63 : 63;
+		u64 rd_clr : 1;
+	} s;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn52xx;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn56xx;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn61xx;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn63xx;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn66xx;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn68xx;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn70xx;
+	struct cvmx_agl_gmx_rxx_stats_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_stats_ctl cvmx_agl_gmx_rxx_stats_ctl_t;
+
+/**
+ * cvmx_agl_gmx_rx#_stats_octs
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_stats_octs {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_stats_octs_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn52xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn56xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn61xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn63xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn66xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn68xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn70xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_stats_octs cvmx_agl_gmx_rxx_stats_octs_t;
+
+/**
+ * cvmx_agl_gmx_rx#_stats_octs_ctl
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_stats_octs_ctl {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn52xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn56xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn61xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn63xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn66xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn68xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn70xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_stats_octs_ctl cvmx_agl_gmx_rxx_stats_octs_ctl_t;
+
+/**
+ * cvmx_agl_gmx_rx#_stats_octs_dmac
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_stats_octs_dmac {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn52xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn56xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn61xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn63xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn66xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn68xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn70xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_stats_octs_dmac cvmx_agl_gmx_rxx_stats_octs_dmac_t;
+
+/**
+ * cvmx_agl_gmx_rx#_stats_octs_drp
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_stats_octs_drp {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn52xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn56xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn61xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn63xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn66xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn68xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn70xx;
+	struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_stats_octs_drp cvmx_agl_gmx_rxx_stats_octs_drp_t;
+
+/**
+ * cvmx_agl_gmx_rx#_stats_pkts
+ *
+ * Count of good received packets - packets that are not recognized as PAUSE
+ * packets, dropped due the DMAC filter, dropped due FIFO full status, or
+ * have any other OPCODE (FCS, Length, etc).
+ */
+union cvmx_agl_gmx_rxx_stats_pkts {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn52xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn56xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn61xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn63xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn66xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn68xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn70xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_stats_pkts cvmx_agl_gmx_rxx_stats_pkts_t;
+
+/**
+ * cvmx_agl_gmx_rx#_stats_pkts_bad
+ *
+ * Count of all packets received with some error that were not dropped
+ * either due to the dmac filter or lack of room in the receive FIFO.
+ */
+union cvmx_agl_gmx_rxx_stats_pkts_bad {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn52xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn56xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn61xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn63xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn66xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn68xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn70xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_stats_pkts_bad cvmx_agl_gmx_rxx_stats_pkts_bad_t;
+
+/**
+ * cvmx_agl_gmx_rx#_stats_pkts_ctl
+ *
+ * Count of all packets received that were recognized as Flow Control or
+ * PAUSE packets.  PAUSE packets with any kind of error are counted in
+ * AGL_GMX_RX_STATS_PKTS_BAD.  Pause packets can be optionally dropped or
+ * forwarded based on the AGL_GMX_RX_FRM_CTL[CTL_DRP] bit.  This count
+ * increments regardless of whether the packet is dropped.  Pause packets
+ * will never be counted in AGL_GMX_RX_STATS_PKTS.  Packets dropped due the dmac
+ * filter will be counted in AGL_GMX_RX_STATS_PKTS_DMAC and not here.
+ */
+union cvmx_agl_gmx_rxx_stats_pkts_ctl {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn52xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn56xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn61xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn63xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn66xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn68xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn70xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_stats_pkts_ctl cvmx_agl_gmx_rxx_stats_pkts_ctl_t;
+
+/**
+ * cvmx_agl_gmx_rx#_stats_pkts_dmac
+ *
+ * Count of all packets received that were dropped by the dmac filter.
+ * Packets that match the DMAC will be dropped and counted here regardless
+ * of if they were bad packets.  These packets will never be counted in
+ * AGL_GMX_RX_STATS_PKTS.
+ * Some packets that were not able to satisify the DECISION_CNT may not
+ * actually be dropped by Octeon, but they will be counted here as if they
+ * were dropped.
+ */
+union cvmx_agl_gmx_rxx_stats_pkts_dmac {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn52xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn56xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn61xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn63xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn66xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn68xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn70xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_stats_pkts_dmac cvmx_agl_gmx_rxx_stats_pkts_dmac_t;
+
+/**
+ * cvmx_agl_gmx_rx#_stats_pkts_drp
+ *
+ * Count of all packets received that were dropped due to a full receive
+ * FIFO.  This counts good and bad packets received - all packets dropped by
+ * the FIFO.  It does not count packets dropped by the dmac or pause packet
+ * filters.
+ */
+union cvmx_agl_gmx_rxx_stats_pkts_drp {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn52xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn56xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn61xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn63xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn66xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn68xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn70xx;
+	struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_stats_pkts_drp cvmx_agl_gmx_rxx_stats_pkts_drp_t;
+
+/**
+ * cvmx_agl_gmx_rx#_udd_skp
+ *
+ * AGL_GMX_RX_UDD_SKP = Amount of User-defined data before the start of the L2 data
+ *
+ *
+ * Notes:
+ * (1) The skip bytes are part of the packet and will be sent down the NCB
+ *     packet interface and will be handled by PKI.
+ *
+ * (2) The system can determine if the UDD bytes are included in the FCS check
+ *     by using the FCSSEL field - if the FCS check is enabled.
+ *
+ * (3) Assume that the preamble/sfd is always at the start of the frame - even
+ *     before UDD bytes.  In most cases, there will be no preamble in these
+ *     cases since it will be MII to MII communication without a PHY
+ *     involved.
+ *
+ * (4) We can still do address filtering and control packet filtering is the
+ *     user desires.
+ *
+ * (5) UDD_SKP must be 0 in half-duplex operation unless
+ *     AGL_GMX_RX_FRM_CTL[PRE_CHK] is clear.  If AGL_GMX_RX_FRM_CTL[PRE_CHK] is set,
+ *     then UDD_SKP will normally be 8.
+ *
+ * (6) In all cases, the UDD bytes will be sent down the packet interface as
+ *     part of the packet.  The UDD bytes are never stripped from the actual
+ *     packet.
+ *
+ * (7) If LEN != 0, then AGL_GMX_RX_FRM_CHK[LENERR] will be disabled and AGL_GMX_RX_INT_REG[LENERR] will be zero
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rxx_udd_skp {
+	u64 u64;
+	struct cvmx_agl_gmx_rxx_udd_skp_s {
+		u64 reserved_9_63 : 55;
+		u64 fcssel : 1;
+		u64 reserved_7_7 : 1;
+		u64 len : 7;
+	} s;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn52xx;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn52xxp1;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn56xx;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn56xxp1;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn61xx;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn63xx;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn63xxp1;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn66xx;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn68xx;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn68xxp1;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn70xx;
+	struct cvmx_agl_gmx_rxx_udd_skp_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rxx_udd_skp cvmx_agl_gmx_rxx_udd_skp_t;
+
+/**
+ * cvmx_agl_gmx_rx_bp_drop#
+ *
+ * AGL_GMX_RX_BP_DROP = FIFO mark for packet drop
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_rx_bp_dropx {
+	u64 u64;
+	struct cvmx_agl_gmx_rx_bp_dropx_s {
+		u64 reserved_6_63 : 58;
+		u64 mark : 6;
+	} s;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn52xx;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn52xxp1;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn56xx;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn56xxp1;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn61xx;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn63xx;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn63xxp1;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn66xx;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn68xx;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn68xxp1;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn70xx;
+	struct cvmx_agl_gmx_rx_bp_dropx_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rx_bp_dropx cvmx_agl_gmx_rx_bp_dropx_t;
+
+/**
+ * cvmx_agl_gmx_rx_bp_off#
+ *
+ * AGL_GMX_RX_BP_OFF = Lowater mark for packet drop
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_rx_bp_offx {
+	u64 u64;
+	struct cvmx_agl_gmx_rx_bp_offx_s {
+		u64 reserved_6_63 : 58;
+		u64 mark : 6;
+	} s;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn52xx;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn52xxp1;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn56xx;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn56xxp1;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn61xx;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn63xx;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn63xxp1;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn66xx;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn68xx;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn68xxp1;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn70xx;
+	struct cvmx_agl_gmx_rx_bp_offx_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rx_bp_offx cvmx_agl_gmx_rx_bp_offx_t;
+
+/**
+ * cvmx_agl_gmx_rx_bp_on#
+ *
+ * AGL_GMX_RX_BP_ON = Hiwater mark for port/interface backpressure
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_rx_bp_onx {
+	u64 u64;
+	struct cvmx_agl_gmx_rx_bp_onx_s {
+		u64 reserved_9_63 : 55;
+		u64 mark : 9;
+	} s;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn52xx;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn52xxp1;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn56xx;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn56xxp1;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn61xx;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn63xx;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn63xxp1;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn66xx;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn68xx;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn68xxp1;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn70xx;
+	struct cvmx_agl_gmx_rx_bp_onx_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rx_bp_onx cvmx_agl_gmx_rx_bp_onx_t;
+
+/**
+ * cvmx_agl_gmx_rx_prt_info
+ *
+ * AGL_GMX_RX_PRT_INFO = state information for the ports
+ *
+ *
+ * Notes:
+ * COMMIT[0], DROP[0] will be reset when MIX0_CTL[RESET] is set to 1.
+ * COMMIT[1], DROP[1] will be reset when MIX1_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rx_prt_info {
+	u64 u64;
+	struct cvmx_agl_gmx_rx_prt_info_s {
+		u64 reserved_18_63 : 46;
+		u64 drop : 2;
+		u64 reserved_2_15 : 14;
+		u64 commit : 2;
+	} s;
+	struct cvmx_agl_gmx_rx_prt_info_s cn52xx;
+	struct cvmx_agl_gmx_rx_prt_info_s cn52xxp1;
+	struct cvmx_agl_gmx_rx_prt_info_cn56xx {
+		u64 reserved_17_63 : 47;
+		u64 drop : 1;
+		u64 reserved_1_15 : 15;
+		u64 commit : 1;
+	} cn56xx;
+	struct cvmx_agl_gmx_rx_prt_info_cn56xx cn56xxp1;
+	struct cvmx_agl_gmx_rx_prt_info_s cn61xx;
+	struct cvmx_agl_gmx_rx_prt_info_s cn63xx;
+	struct cvmx_agl_gmx_rx_prt_info_s cn63xxp1;
+	struct cvmx_agl_gmx_rx_prt_info_s cn66xx;
+	struct cvmx_agl_gmx_rx_prt_info_s cn68xx;
+	struct cvmx_agl_gmx_rx_prt_info_s cn68xxp1;
+	struct cvmx_agl_gmx_rx_prt_info_cn56xx cn70xx;
+	struct cvmx_agl_gmx_rx_prt_info_cn56xx cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rx_prt_info cvmx_agl_gmx_rx_prt_info_t;
+
+/**
+ * cvmx_agl_gmx_rx_tx_status
+ *
+ * AGL_GMX_RX_TX_STATUS = GMX RX/TX Status
+ *
+ *
+ * Notes:
+ * RX[0], TX[0] will be reset when MIX0_CTL[RESET] is set to 1.
+ * RX[1], TX[1] will be reset when MIX1_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_rx_tx_status {
+	u64 u64;
+	struct cvmx_agl_gmx_rx_tx_status_s {
+		u64 reserved_6_63 : 58;
+		u64 tx : 2;
+		u64 reserved_2_3 : 2;
+		u64 rx : 2;
+	} s;
+	struct cvmx_agl_gmx_rx_tx_status_s cn52xx;
+	struct cvmx_agl_gmx_rx_tx_status_s cn52xxp1;
+	struct cvmx_agl_gmx_rx_tx_status_cn56xx {
+		u64 reserved_5_63 : 59;
+		u64 tx : 1;
+		u64 reserved_1_3 : 3;
+		u64 rx : 1;
+	} cn56xx;
+	struct cvmx_agl_gmx_rx_tx_status_cn56xx cn56xxp1;
+	struct cvmx_agl_gmx_rx_tx_status_s cn61xx;
+	struct cvmx_agl_gmx_rx_tx_status_s cn63xx;
+	struct cvmx_agl_gmx_rx_tx_status_s cn63xxp1;
+	struct cvmx_agl_gmx_rx_tx_status_s cn66xx;
+	struct cvmx_agl_gmx_rx_tx_status_s cn68xx;
+	struct cvmx_agl_gmx_rx_tx_status_s cn68xxp1;
+	struct cvmx_agl_gmx_rx_tx_status_cn56xx cn70xx;
+	struct cvmx_agl_gmx_rx_tx_status_cn56xx cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_rx_tx_status cvmx_agl_gmx_rx_tx_status_t;
+
+/**
+ * cvmx_agl_gmx_smac#
+ *
+ * AGL_GMX_SMAC = Packet SMAC
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_smacx {
+	u64 u64;
+	struct cvmx_agl_gmx_smacx_s {
+		u64 reserved_48_63 : 16;
+		u64 smac : 48;
+	} s;
+	struct cvmx_agl_gmx_smacx_s cn52xx;
+	struct cvmx_agl_gmx_smacx_s cn52xxp1;
+	struct cvmx_agl_gmx_smacx_s cn56xx;
+	struct cvmx_agl_gmx_smacx_s cn56xxp1;
+	struct cvmx_agl_gmx_smacx_s cn61xx;
+	struct cvmx_agl_gmx_smacx_s cn63xx;
+	struct cvmx_agl_gmx_smacx_s cn63xxp1;
+	struct cvmx_agl_gmx_smacx_s cn66xx;
+	struct cvmx_agl_gmx_smacx_s cn68xx;
+	struct cvmx_agl_gmx_smacx_s cn68xxp1;
+	struct cvmx_agl_gmx_smacx_s cn70xx;
+	struct cvmx_agl_gmx_smacx_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_smacx cvmx_agl_gmx_smacx_t;
+
+/**
+ * cvmx_agl_gmx_stat_bp
+ *
+ * AGL_GMX_STAT_BP = Number of cycles that the TX/Stats block has help up operation
+ *
+ *
+ * Notes:
+ * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
+ *
+ *
+ *
+ * It has no relationship with the TX FIFO per se.  The TX engine sends packets
+ * from PKO and upon completion, sends a command to the TX stats block for an
+ * update based on the packet size.  The stats operation can take a few cycles -
+ * normally not enough to be visible considering the 64B min packet size that is
+ * ethernet convention.
+ *
+ * In the rare case in which SW attempted to schedule really, really, small packets
+ * or the sclk (6xxx) is running ass-slow, then the stats updates may not happen in
+ * real time and can back up the TX engine.
+ *
+ * This counter is the number of cycles in which the TX engine was stalled.  In
+ * normal operation, it should always be zeros.
+ */
+union cvmx_agl_gmx_stat_bp {
+	u64 u64;
+	struct cvmx_agl_gmx_stat_bp_s {
+		u64 reserved_17_63 : 47;
+		u64 bp : 1;
+		u64 cnt : 16;
+	} s;
+	struct cvmx_agl_gmx_stat_bp_s cn52xx;
+	struct cvmx_agl_gmx_stat_bp_s cn52xxp1;
+	struct cvmx_agl_gmx_stat_bp_s cn56xx;
+	struct cvmx_agl_gmx_stat_bp_s cn56xxp1;
+	struct cvmx_agl_gmx_stat_bp_s cn61xx;
+	struct cvmx_agl_gmx_stat_bp_s cn63xx;
+	struct cvmx_agl_gmx_stat_bp_s cn63xxp1;
+	struct cvmx_agl_gmx_stat_bp_s cn66xx;
+	struct cvmx_agl_gmx_stat_bp_s cn68xx;
+	struct cvmx_agl_gmx_stat_bp_s cn68xxp1;
+	struct cvmx_agl_gmx_stat_bp_s cn70xx;
+	struct cvmx_agl_gmx_stat_bp_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_stat_bp cvmx_agl_gmx_stat_bp_t;
+
+/**
+ * cvmx_agl_gmx_tx#_append
+ *
+ * AGL_GMX_TX_APPEND = Packet TX Append Control
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_txx_append {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_append_s {
+		u64 reserved_4_63 : 60;
+		u64 force_fcs : 1;
+		u64 fcs : 1;
+		u64 pad : 1;
+		u64 preamble : 1;
+	} s;
+	struct cvmx_agl_gmx_txx_append_s cn52xx;
+	struct cvmx_agl_gmx_txx_append_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_append_s cn56xx;
+	struct cvmx_agl_gmx_txx_append_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_append_s cn61xx;
+	struct cvmx_agl_gmx_txx_append_s cn63xx;
+	struct cvmx_agl_gmx_txx_append_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_append_s cn66xx;
+	struct cvmx_agl_gmx_txx_append_s cn68xx;
+	struct cvmx_agl_gmx_txx_append_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_append_s cn70xx;
+	struct cvmx_agl_gmx_txx_append_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_append cvmx_agl_gmx_txx_append_t;
+
+/**
+ * cvmx_agl_gmx_tx#_clk
+ *
+ * AGL_GMX_TX_CLK = RGMII TX Clock Generation Register
+ *
+ *
+ * Notes:
+ * Normal Programming Values:
+ *  (1) RGMII, 1000Mbs   (AGL_GMX_PRT_CFG[SPEED]==1), CLK_CNT == 1
+ *  (2) RGMII, 10/100Mbs (AGL_GMX_PRT_CFG[SPEED]==0), CLK_CNT == 50/5
+ *  (3) MII,   10/100Mbs (AGL_GMX_PRT_CFG[SPEED]==0), CLK_CNT == 1
+ *
+ * RGMII Example:
+ *  Given a 125MHz PLL reference clock...
+ *   CLK_CNT ==  1 ==> 125.0MHz TXC clock period (8ns* 1)
+ *   CLK_CNT ==  5 ==>  25.0MHz TXC clock period (8ns* 5)
+ *   CLK_CNT == 50 ==>   2.5MHz TXC clock period (8ns*50)
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_clk {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_clk_s {
+		u64 reserved_6_63 : 58;
+		u64 clk_cnt : 6;
+	} s;
+	struct cvmx_agl_gmx_txx_clk_s cn61xx;
+	struct cvmx_agl_gmx_txx_clk_s cn63xx;
+	struct cvmx_agl_gmx_txx_clk_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_clk_s cn66xx;
+	struct cvmx_agl_gmx_txx_clk_s cn68xx;
+	struct cvmx_agl_gmx_txx_clk_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_clk_s cn70xx;
+	struct cvmx_agl_gmx_txx_clk_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_clk cvmx_agl_gmx_txx_clk_t;
+
+/**
+ * cvmx_agl_gmx_tx#_ctl
+ *
+ * AGL_GMX_TX_CTL = TX Control register
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_txx_ctl {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_ctl_s {
+		u64 reserved_2_63 : 62;
+		u64 xsdef_en : 1;
+		u64 xscol_en : 1;
+	} s;
+	struct cvmx_agl_gmx_txx_ctl_s cn52xx;
+	struct cvmx_agl_gmx_txx_ctl_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_ctl_s cn56xx;
+	struct cvmx_agl_gmx_txx_ctl_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_ctl_s cn61xx;
+	struct cvmx_agl_gmx_txx_ctl_s cn63xx;
+	struct cvmx_agl_gmx_txx_ctl_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_ctl_s cn66xx;
+	struct cvmx_agl_gmx_txx_ctl_s cn68xx;
+	struct cvmx_agl_gmx_txx_ctl_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_ctl_s cn70xx;
+	struct cvmx_agl_gmx_txx_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_ctl cvmx_agl_gmx_txx_ctl_t;
+
+/**
+ * cvmx_agl_gmx_tx#_min_pkt
+ *
+ * AGL_GMX_TX_MIN_PKT = Packet TX Min Size Packet (PAD upto min size)
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_txx_min_pkt {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_min_pkt_s {
+		u64 reserved_8_63 : 56;
+		u64 min_size : 8;
+	} s;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn52xx;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn56xx;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn61xx;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn63xx;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn66xx;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn68xx;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn70xx;
+	struct cvmx_agl_gmx_txx_min_pkt_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_min_pkt cvmx_agl_gmx_txx_min_pkt_t;
+
+/**
+ * cvmx_agl_gmx_tx#_pause_pkt_interval
+ *
+ * AGL_GMX_TX_PAUSE_PKT_INTERVAL = Packet TX Pause Packet transmission interval - how often PAUSE packets will be sent
+ *
+ *
+ * Notes:
+ * Choosing proper values of AGL_GMX_TX_PAUSE_PKT_TIME[TIME] and
+ * AGL_GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
+ * designer.  It is suggested that TIME be much greater than INTERVAL and
+ * AGL_GMX_TX_PAUSE_ZERO[SEND] be set.  This allows a periodic refresh of the PAUSE
+ * count and then when the backpressure condition is lifted, a PAUSE packet
+ * with TIME==0 will be sent indicating that Octane is ready for additional
+ * data.
+ *
+ * If the system chooses to not set AGL_GMX_TX_PAUSE_ZERO[SEND], then it is
+ * suggested that TIME and INTERVAL are programmed such that they satisify the
+ * following rule...
+ *
+ *    INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size)
+ *
+ * where largest_pkt_size is that largest packet that the system can send
+ * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
+ * of the PAUSE packet (normally 64B).
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_pause_pkt_interval {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s {
+		u64 reserved_16_63 : 48;
+		u64 interval : 16;
+	} s;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn52xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn56xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn61xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn63xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn66xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn68xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn70xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_pause_pkt_interval cvmx_agl_gmx_txx_pause_pkt_interval_t;
+
+/**
+ * cvmx_agl_gmx_tx#_pause_pkt_time
+ *
+ * AGL_GMX_TX_PAUSE_PKT_TIME = Packet TX Pause Packet pause_time field
+ *
+ *
+ * Notes:
+ * Choosing proper values of AGL_GMX_TX_PAUSE_PKT_TIME[TIME] and
+ * AGL_GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
+ * designer.  It is suggested that TIME be much greater than INTERVAL and
+ * AGL_GMX_TX_PAUSE_ZERO[SEND] be set.  This allows a periodic refresh of the PAUSE
+ * count and then when the backpressure condition is lifted, a PAUSE packet
+ * with TIME==0 will be sent indicating that Octane is ready for additional
+ * data.
+ *
+ * If the system chooses to not set AGL_GMX_TX_PAUSE_ZERO[SEND], then it is
+ * suggested that TIME and INTERVAL are programmed such that they satisify the
+ * following rule...
+ *
+ *    INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size)
+ *
+ * where largest_pkt_size is that largest packet that the system can send
+ * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
+ * of the PAUSE packet (normally 64B).
+ *
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_pause_pkt_time {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s {
+		u64 reserved_16_63 : 48;
+		u64 time : 16;
+	} s;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn52xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn56xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn61xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn63xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn66xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn68xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn70xx;
+	struct cvmx_agl_gmx_txx_pause_pkt_time_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_pause_pkt_time cvmx_agl_gmx_txx_pause_pkt_time_t;
+
+/**
+ * cvmx_agl_gmx_tx#_pause_togo
+ *
+ * AGL_GMX_TX_PAUSE_TOGO = Packet TX Amount of time remaining to backpressure
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_txx_pause_togo {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_pause_togo_s {
+		u64 reserved_16_63 : 48;
+		u64 time : 16;
+	} s;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn52xx;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn56xx;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn61xx;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn63xx;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn66xx;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn68xx;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn70xx;
+	struct cvmx_agl_gmx_txx_pause_togo_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_pause_togo cvmx_agl_gmx_txx_pause_togo_t;
+
+/**
+ * cvmx_agl_gmx_tx#_pause_zero
+ *
+ * AGL_GMX_TX_PAUSE_ZERO = Packet TX Amount of time remaining to backpressure
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_txx_pause_zero {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_pause_zero_s {
+		u64 reserved_1_63 : 63;
+		u64 send : 1;
+	} s;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn52xx;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn56xx;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn61xx;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn63xx;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn66xx;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn68xx;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn70xx;
+	struct cvmx_agl_gmx_txx_pause_zero_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_pause_zero cvmx_agl_gmx_txx_pause_zero_t;
+
+/**
+ * cvmx_agl_gmx_tx#_soft_pause
+ *
+ * AGL_GMX_TX_SOFT_PAUSE = Packet TX Software Pause
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_txx_soft_pause {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_soft_pause_s {
+		u64 reserved_16_63 : 48;
+		u64 time : 16;
+	} s;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn52xx;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn56xx;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn61xx;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn63xx;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn66xx;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn68xx;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn70xx;
+	struct cvmx_agl_gmx_txx_soft_pause_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_soft_pause cvmx_agl_gmx_txx_soft_pause_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stat0
+ *
+ * AGL_GMX_TX_STAT0 = AGL_GMX_TX_STATS_XSDEF / AGL_GMX_TX_STATS_XSCOL
+ *
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_stat0 {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stat0_s {
+		u64 xsdef : 32;
+		u64 xscol : 32;
+	} s;
+	struct cvmx_agl_gmx_txx_stat0_s cn52xx;
+	struct cvmx_agl_gmx_txx_stat0_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stat0_s cn56xx;
+	struct cvmx_agl_gmx_txx_stat0_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stat0_s cn61xx;
+	struct cvmx_agl_gmx_txx_stat0_s cn63xx;
+	struct cvmx_agl_gmx_txx_stat0_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stat0_s cn66xx;
+	struct cvmx_agl_gmx_txx_stat0_s cn68xx;
+	struct cvmx_agl_gmx_txx_stat0_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stat0_s cn70xx;
+	struct cvmx_agl_gmx_txx_stat0_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stat0 cvmx_agl_gmx_txx_stat0_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stat1
+ *
+ * AGL_GMX_TX_STAT1 = AGL_GMX_TX_STATS_SCOL  / AGL_GMX_TX_STATS_MCOL
+ *
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_stat1 {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stat1_s {
+		u64 scol : 32;
+		u64 mcol : 32;
+	} s;
+	struct cvmx_agl_gmx_txx_stat1_s cn52xx;
+	struct cvmx_agl_gmx_txx_stat1_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stat1_s cn56xx;
+	struct cvmx_agl_gmx_txx_stat1_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stat1_s cn61xx;
+	struct cvmx_agl_gmx_txx_stat1_s cn63xx;
+	struct cvmx_agl_gmx_txx_stat1_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stat1_s cn66xx;
+	struct cvmx_agl_gmx_txx_stat1_s cn68xx;
+	struct cvmx_agl_gmx_txx_stat1_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stat1_s cn70xx;
+	struct cvmx_agl_gmx_txx_stat1_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stat1 cvmx_agl_gmx_txx_stat1_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stat2
+ *
+ * AGL_GMX_TX_STAT2 = AGL_GMX_TX_STATS_OCTS
+ *
+ *
+ * Notes:
+ * - Octect counts are the sum of all data transmitted on the wire including
+ *   packet data, pad bytes, fcs bytes, pause bytes, and jam bytes.  The octect
+ *   counts do not include PREAMBLE byte or EXTEND cycles.
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_stat2 {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stat2_s {
+		u64 reserved_48_63 : 16;
+		u64 octs : 48;
+	} s;
+	struct cvmx_agl_gmx_txx_stat2_s cn52xx;
+	struct cvmx_agl_gmx_txx_stat2_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stat2_s cn56xx;
+	struct cvmx_agl_gmx_txx_stat2_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stat2_s cn61xx;
+	struct cvmx_agl_gmx_txx_stat2_s cn63xx;
+	struct cvmx_agl_gmx_txx_stat2_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stat2_s cn66xx;
+	struct cvmx_agl_gmx_txx_stat2_s cn68xx;
+	struct cvmx_agl_gmx_txx_stat2_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stat2_s cn70xx;
+	struct cvmx_agl_gmx_txx_stat2_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stat2 cvmx_agl_gmx_txx_stat2_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stat3
+ *
+ * AGL_GMX_TX_STAT3 = AGL_GMX_TX_STATS_PKTS
+ *
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_stat3 {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stat3_s {
+		u64 reserved_32_63 : 32;
+		u64 pkts : 32;
+	} s;
+	struct cvmx_agl_gmx_txx_stat3_s cn52xx;
+	struct cvmx_agl_gmx_txx_stat3_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stat3_s cn56xx;
+	struct cvmx_agl_gmx_txx_stat3_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stat3_s cn61xx;
+	struct cvmx_agl_gmx_txx_stat3_s cn63xx;
+	struct cvmx_agl_gmx_txx_stat3_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stat3_s cn66xx;
+	struct cvmx_agl_gmx_txx_stat3_s cn68xx;
+	struct cvmx_agl_gmx_txx_stat3_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stat3_s cn70xx;
+	struct cvmx_agl_gmx_txx_stat3_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stat3 cvmx_agl_gmx_txx_stat3_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stat4
+ *
+ * AGL_GMX_TX_STAT4 = AGL_GMX_TX_STATS_HIST1 (64) / AGL_GMX_TX_STATS_HIST0 (<64)
+ *
+ *
+ * Notes:
+ * - Packet length is the sum of all data transmitted on the wire for the given
+ *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
+ *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_stat4 {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stat4_s {
+		u64 hist1 : 32;
+		u64 hist0 : 32;
+	} s;
+	struct cvmx_agl_gmx_txx_stat4_s cn52xx;
+	struct cvmx_agl_gmx_txx_stat4_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stat4_s cn56xx;
+	struct cvmx_agl_gmx_txx_stat4_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stat4_s cn61xx;
+	struct cvmx_agl_gmx_txx_stat4_s cn63xx;
+	struct cvmx_agl_gmx_txx_stat4_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stat4_s cn66xx;
+	struct cvmx_agl_gmx_txx_stat4_s cn68xx;
+	struct cvmx_agl_gmx_txx_stat4_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stat4_s cn70xx;
+	struct cvmx_agl_gmx_txx_stat4_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stat4 cvmx_agl_gmx_txx_stat4_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stat5
+ *
+ * AGL_GMX_TX_STAT5 = AGL_GMX_TX_STATS_HIST3 (128- 255) / AGL_GMX_TX_STATS_HIST2 (65- 127)
+ *
+ *
+ * Notes:
+ * - Packet length is the sum of all data transmitted on the wire for the given
+ *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
+ *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_stat5 {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stat5_s {
+		u64 hist3 : 32;
+		u64 hist2 : 32;
+	} s;
+	struct cvmx_agl_gmx_txx_stat5_s cn52xx;
+	struct cvmx_agl_gmx_txx_stat5_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stat5_s cn56xx;
+	struct cvmx_agl_gmx_txx_stat5_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stat5_s cn61xx;
+	struct cvmx_agl_gmx_txx_stat5_s cn63xx;
+	struct cvmx_agl_gmx_txx_stat5_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stat5_s cn66xx;
+	struct cvmx_agl_gmx_txx_stat5_s cn68xx;
+	struct cvmx_agl_gmx_txx_stat5_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stat5_s cn70xx;
+	struct cvmx_agl_gmx_txx_stat5_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stat5 cvmx_agl_gmx_txx_stat5_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stat6
+ *
+ * AGL_GMX_TX_STAT6 = AGL_GMX_TX_STATS_HIST5 (512-1023) / AGL_GMX_TX_STATS_HIST4 (256-511)
+ *
+ *
+ * Notes:
+ * - Packet length is the sum of all data transmitted on the wire for the given
+ *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
+ *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_stat6 {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stat6_s {
+		u64 hist5 : 32;
+		u64 hist4 : 32;
+	} s;
+	struct cvmx_agl_gmx_txx_stat6_s cn52xx;
+	struct cvmx_agl_gmx_txx_stat6_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stat6_s cn56xx;
+	struct cvmx_agl_gmx_txx_stat6_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stat6_s cn61xx;
+	struct cvmx_agl_gmx_txx_stat6_s cn63xx;
+	struct cvmx_agl_gmx_txx_stat6_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stat6_s cn66xx;
+	struct cvmx_agl_gmx_txx_stat6_s cn68xx;
+	struct cvmx_agl_gmx_txx_stat6_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stat6_s cn70xx;
+	struct cvmx_agl_gmx_txx_stat6_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stat6 cvmx_agl_gmx_txx_stat6_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stat7
+ *
+ * AGL_GMX_TX_STAT7 = AGL_GMX_TX_STATS_HIST7 (1024-1518) / AGL_GMX_TX_STATS_HIST6 (>1518)
+ *
+ *
+ * Notes:
+ * - Packet length is the sum of all data transmitted on the wire for the given
+ *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
+ *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_stat7 {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stat7_s {
+		u64 hist7 : 32;
+		u64 hist6 : 32;
+	} s;
+	struct cvmx_agl_gmx_txx_stat7_s cn52xx;
+	struct cvmx_agl_gmx_txx_stat7_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stat7_s cn56xx;
+	struct cvmx_agl_gmx_txx_stat7_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stat7_s cn61xx;
+	struct cvmx_agl_gmx_txx_stat7_s cn63xx;
+	struct cvmx_agl_gmx_txx_stat7_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stat7_s cn66xx;
+	struct cvmx_agl_gmx_txx_stat7_s cn68xx;
+	struct cvmx_agl_gmx_txx_stat7_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stat7_s cn70xx;
+	struct cvmx_agl_gmx_txx_stat7_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stat7 cvmx_agl_gmx_txx_stat7_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stat8
+ *
+ * AGL_GMX_TX_STAT8 = AGL_GMX_TX_STATS_MCST  / AGL_GMX_TX_STATS_BCST
+ *
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Note, GMX determines if the packet is MCST or BCST from the DMAC of the
+ *   packet.  GMX assumes that the DMAC lies in the first 6 bytes of the packet
+ *   as per the 802.3 frame definition.  If the system requires additional data
+ *   before the L2 header, then the MCST and BCST counters may not reflect
+ *   reality and should be ignored by software.
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_stat8 {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stat8_s {
+		u64 mcst : 32;
+		u64 bcst : 32;
+	} s;
+	struct cvmx_agl_gmx_txx_stat8_s cn52xx;
+	struct cvmx_agl_gmx_txx_stat8_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stat8_s cn56xx;
+	struct cvmx_agl_gmx_txx_stat8_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stat8_s cn61xx;
+	struct cvmx_agl_gmx_txx_stat8_s cn63xx;
+	struct cvmx_agl_gmx_txx_stat8_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stat8_s cn66xx;
+	struct cvmx_agl_gmx_txx_stat8_s cn68xx;
+	struct cvmx_agl_gmx_txx_stat8_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stat8_s cn70xx;
+	struct cvmx_agl_gmx_txx_stat8_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stat8 cvmx_agl_gmx_txx_stat8_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stat9
+ *
+ * AGL_GMX_TX_STAT9 = AGL_GMX_TX_STATS_UNDFLW / AGL_GMX_TX_STATS_CTL
+ *
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Not reset when MIX*_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_txx_stat9 {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stat9_s {
+		u64 undflw : 32;
+		u64 ctl : 32;
+	} s;
+	struct cvmx_agl_gmx_txx_stat9_s cn52xx;
+	struct cvmx_agl_gmx_txx_stat9_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stat9_s cn56xx;
+	struct cvmx_agl_gmx_txx_stat9_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stat9_s cn61xx;
+	struct cvmx_agl_gmx_txx_stat9_s cn63xx;
+	struct cvmx_agl_gmx_txx_stat9_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stat9_s cn66xx;
+	struct cvmx_agl_gmx_txx_stat9_s cn68xx;
+	struct cvmx_agl_gmx_txx_stat9_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stat9_s cn70xx;
+	struct cvmx_agl_gmx_txx_stat9_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stat9 cvmx_agl_gmx_txx_stat9_t;
+
+/**
+ * cvmx_agl_gmx_tx#_stats_ctl
+ *
+ * AGL_GMX_TX_STATS_CTL = TX Stats Control register
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_txx_stats_ctl {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_stats_ctl_s {
+		u64 reserved_1_63 : 63;
+		u64 rd_clr : 1;
+	} s;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn52xx;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn56xx;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn61xx;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn63xx;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn66xx;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn68xx;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn70xx;
+	struct cvmx_agl_gmx_txx_stats_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_stats_ctl cvmx_agl_gmx_txx_stats_ctl_t;
+
+/**
+ * cvmx_agl_gmx_tx#_thresh
+ *
+ * AGL_GMX_TX_THRESH = Packet TX Threshold
+ *
+ *
+ * Notes:
+ * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
+ *
+ */
+union cvmx_agl_gmx_txx_thresh {
+	u64 u64;
+	struct cvmx_agl_gmx_txx_thresh_s {
+		u64 reserved_6_63 : 58;
+		u64 cnt : 6;
+	} s;
+	struct cvmx_agl_gmx_txx_thresh_s cn52xx;
+	struct cvmx_agl_gmx_txx_thresh_s cn52xxp1;
+	struct cvmx_agl_gmx_txx_thresh_s cn56xx;
+	struct cvmx_agl_gmx_txx_thresh_s cn56xxp1;
+	struct cvmx_agl_gmx_txx_thresh_s cn61xx;
+	struct cvmx_agl_gmx_txx_thresh_s cn63xx;
+	struct cvmx_agl_gmx_txx_thresh_s cn63xxp1;
+	struct cvmx_agl_gmx_txx_thresh_s cn66xx;
+	struct cvmx_agl_gmx_txx_thresh_s cn68xx;
+	struct cvmx_agl_gmx_txx_thresh_s cn68xxp1;
+	struct cvmx_agl_gmx_txx_thresh_s cn70xx;
+	struct cvmx_agl_gmx_txx_thresh_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_txx_thresh cvmx_agl_gmx_txx_thresh_t;
+
+/**
+ * cvmx_agl_gmx_tx_bp
+ *
+ * AGL_GMX_TX_BP = Packet TX BackPressure Register
+ *
+ *
+ * Notes:
+ * BP[0] will be reset when MIX0_CTL[RESET] is set to 1.
+ * BP[1] will be reset when MIX1_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_tx_bp {
+	u64 u64;
+	struct cvmx_agl_gmx_tx_bp_s {
+		u64 reserved_2_63 : 62;
+		u64 bp : 2;
+	} s;
+	struct cvmx_agl_gmx_tx_bp_s cn52xx;
+	struct cvmx_agl_gmx_tx_bp_s cn52xxp1;
+	struct cvmx_agl_gmx_tx_bp_cn56xx {
+		u64 reserved_1_63 : 63;
+		u64 bp : 1;
+	} cn56xx;
+	struct cvmx_agl_gmx_tx_bp_cn56xx cn56xxp1;
+	struct cvmx_agl_gmx_tx_bp_s cn61xx;
+	struct cvmx_agl_gmx_tx_bp_s cn63xx;
+	struct cvmx_agl_gmx_tx_bp_s cn63xxp1;
+	struct cvmx_agl_gmx_tx_bp_s cn66xx;
+	struct cvmx_agl_gmx_tx_bp_s cn68xx;
+	struct cvmx_agl_gmx_tx_bp_s cn68xxp1;
+	struct cvmx_agl_gmx_tx_bp_cn56xx cn70xx;
+	struct cvmx_agl_gmx_tx_bp_cn56xx cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_tx_bp cvmx_agl_gmx_tx_bp_t;
+
+/**
+ * cvmx_agl_gmx_tx_col_attempt
+ *
+ * AGL_GMX_TX_COL_ATTEMPT = Packet TX collision attempts before dropping frame
+ *
+ *
+ * Notes:
+ * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
+ *
+ */
+union cvmx_agl_gmx_tx_col_attempt {
+	u64 u64;
+	struct cvmx_agl_gmx_tx_col_attempt_s {
+		u64 reserved_5_63 : 59;
+		u64 limit : 5;
+	} s;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn52xx;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn52xxp1;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn56xx;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn56xxp1;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn61xx;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn63xx;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn63xxp1;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn66xx;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn68xx;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn68xxp1;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn70xx;
+	struct cvmx_agl_gmx_tx_col_attempt_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_tx_col_attempt cvmx_agl_gmx_tx_col_attempt_t;
+
+/**
+ * cvmx_agl_gmx_tx_ifg
+ *
+ * Common
+ * AGL_GMX_TX_IFG = Packet TX Interframe Gap
+ */
+union cvmx_agl_gmx_tx_ifg {
+	u64 u64;
+	struct cvmx_agl_gmx_tx_ifg_s {
+		u64 reserved_8_63 : 56;
+		u64 ifg2 : 4;
+		u64 ifg1 : 4;
+	} s;
+	struct cvmx_agl_gmx_tx_ifg_s cn52xx;
+	struct cvmx_agl_gmx_tx_ifg_s cn52xxp1;
+	struct cvmx_agl_gmx_tx_ifg_s cn56xx;
+	struct cvmx_agl_gmx_tx_ifg_s cn56xxp1;
+	struct cvmx_agl_gmx_tx_ifg_s cn61xx;
+	struct cvmx_agl_gmx_tx_ifg_s cn63xx;
+	struct cvmx_agl_gmx_tx_ifg_s cn63xxp1;
+	struct cvmx_agl_gmx_tx_ifg_s cn66xx;
+	struct cvmx_agl_gmx_tx_ifg_s cn68xx;
+	struct cvmx_agl_gmx_tx_ifg_s cn68xxp1;
+	struct cvmx_agl_gmx_tx_ifg_s cn70xx;
+	struct cvmx_agl_gmx_tx_ifg_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_tx_ifg cvmx_agl_gmx_tx_ifg_t;
+
+/**
+ * cvmx_agl_gmx_tx_int_en
+ *
+ * AGL_GMX_TX_INT_EN = Interrupt Enable
+ *
+ *
+ * Notes:
+ * UNDFLW[0], XSCOL[0], XSDEF[0], LATE_COL[0], PTP_LOST[0] will be reset when MIX0_CTL[RESET] is set to 1.
+ * UNDFLW[1], XSCOL[1], XSDEF[1], LATE_COL[1], PTP_LOST[1] will be reset when MIX1_CTL[RESET] is set to 1.
+ * PKO_NXA will bee reset when both MIX0/1_CTL[RESET] are set to 1.
+ */
+union cvmx_agl_gmx_tx_int_en {
+	u64 u64;
+	struct cvmx_agl_gmx_tx_int_en_s {
+		u64 reserved_22_63 : 42;
+		u64 ptp_lost : 2;
+		u64 reserved_18_19 : 2;
+		u64 late_col : 2;
+		u64 reserved_14_15 : 2;
+		u64 xsdef : 2;
+		u64 reserved_10_11 : 2;
+		u64 xscol : 2;
+		u64 reserved_4_7 : 4;
+		u64 undflw : 2;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} s;
+	struct cvmx_agl_gmx_tx_int_en_cn52xx {
+		u64 reserved_18_63 : 46;
+		u64 late_col : 2;
+		u64 reserved_14_15 : 2;
+		u64 xsdef : 2;
+		u64 reserved_10_11 : 2;
+		u64 xscol : 2;
+		u64 reserved_4_7 : 4;
+		u64 undflw : 2;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn52xx;
+	struct cvmx_agl_gmx_tx_int_en_cn52xx cn52xxp1;
+	struct cvmx_agl_gmx_tx_int_en_cn56xx {
+		u64 reserved_17_63 : 47;
+		u64 late_col : 1;
+		u64 reserved_13_15 : 3;
+		u64 xsdef : 1;
+		u64 reserved_9_11 : 3;
+		u64 xscol : 1;
+		u64 reserved_3_7 : 5;
+		u64 undflw : 1;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn56xx;
+	struct cvmx_agl_gmx_tx_int_en_cn56xx cn56xxp1;
+	struct cvmx_agl_gmx_tx_int_en_s cn61xx;
+	struct cvmx_agl_gmx_tx_int_en_s cn63xx;
+	struct cvmx_agl_gmx_tx_int_en_s cn63xxp1;
+	struct cvmx_agl_gmx_tx_int_en_s cn66xx;
+	struct cvmx_agl_gmx_tx_int_en_s cn68xx;
+	struct cvmx_agl_gmx_tx_int_en_s cn68xxp1;
+	struct cvmx_agl_gmx_tx_int_en_cn70xx {
+		u64 reserved_21_63 : 43;
+		u64 ptp_lost : 1;
+		u64 reserved_17_19 : 3;
+		u64 late_col : 1;
+		u64 reserved_13_15 : 3;
+		u64 xsdef : 1;
+		u64 reserved_9_11 : 3;
+		u64 xscol : 1;
+		u64 reserved_3_7 : 5;
+		u64 undflw : 1;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn70xx;
+	struct cvmx_agl_gmx_tx_int_en_cn70xx cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_tx_int_en cvmx_agl_gmx_tx_int_en_t;
+
+/**
+ * cvmx_agl_gmx_tx_int_reg
+ *
+ * AGL_GMX_TX_INT_REG = Interrupt Register
+ *
+ *
+ * Notes:
+ * UNDFLW[0], XSCOL[0], XSDEF[0], LATE_COL[0], PTP_LOST[0] will be reset when MIX0_CTL[RESET] is set to 1.
+ * UNDFLW[1], XSCOL[1], XSDEF[1], LATE_COL[1], PTP_LOST[1] will be reset when MIX1_CTL[RESET] is set to 1.
+ * PKO_NXA will bee reset when both MIX0/1_CTL[RESET] are set to 1.
+ */
+union cvmx_agl_gmx_tx_int_reg {
+	u64 u64;
+	struct cvmx_agl_gmx_tx_int_reg_s {
+		u64 reserved_22_63 : 42;
+		u64 ptp_lost : 2;
+		u64 reserved_18_19 : 2;
+		u64 late_col : 2;
+		u64 reserved_14_15 : 2;
+		u64 xsdef : 2;
+		u64 reserved_10_11 : 2;
+		u64 xscol : 2;
+		u64 reserved_4_7 : 4;
+		u64 undflw : 2;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} s;
+	struct cvmx_agl_gmx_tx_int_reg_cn52xx {
+		u64 reserved_18_63 : 46;
+		u64 late_col : 2;
+		u64 reserved_14_15 : 2;
+		u64 xsdef : 2;
+		u64 reserved_10_11 : 2;
+		u64 xscol : 2;
+		u64 reserved_4_7 : 4;
+		u64 undflw : 2;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn52xx;
+	struct cvmx_agl_gmx_tx_int_reg_cn52xx cn52xxp1;
+	struct cvmx_agl_gmx_tx_int_reg_cn56xx {
+		u64 reserved_17_63 : 47;
+		u64 late_col : 1;
+		u64 reserved_13_15 : 3;
+		u64 xsdef : 1;
+		u64 reserved_9_11 : 3;
+		u64 xscol : 1;
+		u64 reserved_3_7 : 5;
+		u64 undflw : 1;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn56xx;
+	struct cvmx_agl_gmx_tx_int_reg_cn56xx cn56xxp1;
+	struct cvmx_agl_gmx_tx_int_reg_s cn61xx;
+	struct cvmx_agl_gmx_tx_int_reg_s cn63xx;
+	struct cvmx_agl_gmx_tx_int_reg_s cn63xxp1;
+	struct cvmx_agl_gmx_tx_int_reg_s cn66xx;
+	struct cvmx_agl_gmx_tx_int_reg_s cn68xx;
+	struct cvmx_agl_gmx_tx_int_reg_s cn68xxp1;
+	struct cvmx_agl_gmx_tx_int_reg_cn70xx {
+		u64 reserved_21_63 : 43;
+		u64 ptp_lost : 1;
+		u64 reserved_17_19 : 3;
+		u64 late_col : 1;
+		u64 reserved_13_15 : 3;
+		u64 xsdef : 1;
+		u64 reserved_9_11 : 3;
+		u64 xscol : 1;
+		u64 reserved_3_7 : 5;
+		u64 undflw : 1;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn70xx;
+	struct cvmx_agl_gmx_tx_int_reg_cn70xx cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_tx_int_reg cvmx_agl_gmx_tx_int_reg_t;
+
+/**
+ * cvmx_agl_gmx_tx_jam
+ *
+ * AGL_GMX_TX_JAM = Packet TX Jam Pattern
+ *
+ *
+ * Notes:
+ * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
+ *
+ */
+union cvmx_agl_gmx_tx_jam {
+	u64 u64;
+	struct cvmx_agl_gmx_tx_jam_s {
+		u64 reserved_8_63 : 56;
+		u64 jam : 8;
+	} s;
+	struct cvmx_agl_gmx_tx_jam_s cn52xx;
+	struct cvmx_agl_gmx_tx_jam_s cn52xxp1;
+	struct cvmx_agl_gmx_tx_jam_s cn56xx;
+	struct cvmx_agl_gmx_tx_jam_s cn56xxp1;
+	struct cvmx_agl_gmx_tx_jam_s cn61xx;
+	struct cvmx_agl_gmx_tx_jam_s cn63xx;
+	struct cvmx_agl_gmx_tx_jam_s cn63xxp1;
+	struct cvmx_agl_gmx_tx_jam_s cn66xx;
+	struct cvmx_agl_gmx_tx_jam_s cn68xx;
+	struct cvmx_agl_gmx_tx_jam_s cn68xxp1;
+	struct cvmx_agl_gmx_tx_jam_s cn70xx;
+	struct cvmx_agl_gmx_tx_jam_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_tx_jam cvmx_agl_gmx_tx_jam_t;
+
+/**
+ * cvmx_agl_gmx_tx_lfsr
+ *
+ * AGL_GMX_TX_LFSR = LFSR used to implement truncated binary exponential backoff
+ *
+ *
+ * Notes:
+ * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
+ *
+ */
+union cvmx_agl_gmx_tx_lfsr {
+	u64 u64;
+	struct cvmx_agl_gmx_tx_lfsr_s {
+		u64 reserved_16_63 : 48;
+		u64 lfsr : 16;
+	} s;
+	struct cvmx_agl_gmx_tx_lfsr_s cn52xx;
+	struct cvmx_agl_gmx_tx_lfsr_s cn52xxp1;
+	struct cvmx_agl_gmx_tx_lfsr_s cn56xx;
+	struct cvmx_agl_gmx_tx_lfsr_s cn56xxp1;
+	struct cvmx_agl_gmx_tx_lfsr_s cn61xx;
+	struct cvmx_agl_gmx_tx_lfsr_s cn63xx;
+	struct cvmx_agl_gmx_tx_lfsr_s cn63xxp1;
+	struct cvmx_agl_gmx_tx_lfsr_s cn66xx;
+	struct cvmx_agl_gmx_tx_lfsr_s cn68xx;
+	struct cvmx_agl_gmx_tx_lfsr_s cn68xxp1;
+	struct cvmx_agl_gmx_tx_lfsr_s cn70xx;
+	struct cvmx_agl_gmx_tx_lfsr_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_tx_lfsr cvmx_agl_gmx_tx_lfsr_t;
+
+/**
+ * cvmx_agl_gmx_tx_ovr_bp
+ *
+ * AGL_GMX_TX_OVR_BP = Packet TX Override BackPressure
+ *
+ *
+ * Notes:
+ * IGN_FULL[0], BP[0], EN[0] will be reset when MIX0_CTL[RESET] is set to 1.
+ * IGN_FULL[1], BP[1], EN[1] will be reset when MIX1_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_gmx_tx_ovr_bp {
+	u64 u64;
+	struct cvmx_agl_gmx_tx_ovr_bp_s {
+		u64 reserved_10_63 : 54;
+		u64 en : 2;
+		u64 reserved_6_7 : 2;
+		u64 bp : 2;
+		u64 reserved_2_3 : 2;
+		u64 ign_full : 2;
+	} s;
+	struct cvmx_agl_gmx_tx_ovr_bp_s cn52xx;
+	struct cvmx_agl_gmx_tx_ovr_bp_s cn52xxp1;
+	struct cvmx_agl_gmx_tx_ovr_bp_cn56xx {
+		u64 reserved_9_63 : 55;
+		u64 en : 1;
+		u64 reserved_5_7 : 3;
+		u64 bp : 1;
+		u64 reserved_1_3 : 3;
+		u64 ign_full : 1;
+	} cn56xx;
+	struct cvmx_agl_gmx_tx_ovr_bp_cn56xx cn56xxp1;
+	struct cvmx_agl_gmx_tx_ovr_bp_s cn61xx;
+	struct cvmx_agl_gmx_tx_ovr_bp_s cn63xx;
+	struct cvmx_agl_gmx_tx_ovr_bp_s cn63xxp1;
+	struct cvmx_agl_gmx_tx_ovr_bp_s cn66xx;
+	struct cvmx_agl_gmx_tx_ovr_bp_s cn68xx;
+	struct cvmx_agl_gmx_tx_ovr_bp_s cn68xxp1;
+	struct cvmx_agl_gmx_tx_ovr_bp_cn56xx cn70xx;
+	struct cvmx_agl_gmx_tx_ovr_bp_cn56xx cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_tx_ovr_bp cvmx_agl_gmx_tx_ovr_bp_t;
+
+/**
+ * cvmx_agl_gmx_tx_pause_pkt_dmac
+ *
+ * AGL_GMX_TX_PAUSE_PKT_DMAC = Packet TX Pause Packet DMAC field
+ *
+ *
+ * Notes:
+ * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
+ *
+ */
+union cvmx_agl_gmx_tx_pause_pkt_dmac {
+	u64 u64;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s {
+		u64 reserved_48_63 : 16;
+		u64 dmac : 48;
+	} s;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn52xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn52xxp1;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn56xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn56xxp1;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn61xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn63xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn63xxp1;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn66xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn68xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn68xxp1;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn70xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_tx_pause_pkt_dmac cvmx_agl_gmx_tx_pause_pkt_dmac_t;
+
+/**
+ * cvmx_agl_gmx_tx_pause_pkt_type
+ *
+ * AGL_GMX_TX_PAUSE_PKT_TYPE = Packet TX Pause Packet TYPE field
+ *
+ *
+ * Notes:
+ * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
+ *
+ */
+union cvmx_agl_gmx_tx_pause_pkt_type {
+	u64 u64;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s {
+		u64 reserved_16_63 : 48;
+		u64 type : 16;
+	} s;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn52xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn52xxp1;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn56xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn56xxp1;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn61xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn63xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn63xxp1;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn66xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn68xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn68xxp1;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn70xx;
+	struct cvmx_agl_gmx_tx_pause_pkt_type_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_tx_pause_pkt_type cvmx_agl_gmx_tx_pause_pkt_type_t;
+
+/**
+ * cvmx_agl_gmx_wol_ctl
+ */
+union cvmx_agl_gmx_wol_ctl {
+	u64 u64;
+	struct cvmx_agl_gmx_wol_ctl_s {
+		u64 reserved_33_63 : 31;
+		u64 magic_en : 1;
+		u64 reserved_17_31 : 15;
+		u64 direct_en : 1;
+		u64 reserved_1_15 : 15;
+		u64 en : 1;
+	} s;
+	struct cvmx_agl_gmx_wol_ctl_s cn70xx;
+	struct cvmx_agl_gmx_wol_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_agl_gmx_wol_ctl cvmx_agl_gmx_wol_ctl_t;
+
+/**
+ * cvmx_agl_prt#_ctl
+ *
+ * AGL_PRT_CTL = AGL Port Control
+ *
+ *
+ * Notes:
+ * The RGMII timing specification requires that devices transmit clock and
+ * data synchronously. The specification requires external sources (namely
+ * the PC board trace routes) to introduce the appropriate 1.5 to 2.0 ns of
+ * delay.
+ *
+ * To eliminate the need for the PC board delays, the MIX RGMII interface
+ * has optional onboard DLL's for both transmit and receive. For correct
+ * operation, at most one of the transmitter, board, or receiver involved
+ * in an RGMII link should introduce delay. By default/reset,
+ * the MIX RGMII receivers delay the received clock, and the MIX
+ * RGMII transmitters do not delay the transmitted clock. Whether this
+ * default works as-is with a given link partner depends on the behavior
+ * of the link partner and the PC board.
+ *
+ * These are the possible modes of MIX RGMII receive operation:
+ *  o AGL_PRTx_CTL[CLKRX_BYP] = 0 (reset value) - The OCTEON MIX RGMII
+ *    receive interface introduces clock delay using its internal DLL.
+ *    This mode is appropriate if neither the remote
+ *    transmitter nor the PC board delays the clock.
+ *  o AGL_PRTx_CTL[CLKRX_BYP] = 1, [CLKRX_SET] = 0x0 - The OCTEON MIX
+ *    RGMII receive interface introduces no clock delay. This mode
+ *    is appropriate if either the remote transmitter or the PC board
+ *    delays the clock.
+ *
+ * These are the possible modes of MIX RGMII transmit operation:
+ *  o AGL_PRTx_CTL[CLKTX_BYP] = 1, [CLKTX_SET] = 0x0 (reset value) -
+ *    The OCTEON MIX RGMII transmit interface introduces no clock
+ *    delay. This mode is appropriate is either the remote receiver
+ *    or the PC board delays the clock.
+ *  o AGL_PRTx_CTL[CLKTX_BYP] = 0 - The OCTEON MIX RGMII transmit
+ *    interface introduces clock delay using its internal DLL.
+ *    This mode is appropriate if neither the remote receiver
+ *    nor the PC board delays the clock.
+ *
+ * AGL_PRT0_CTL will be reset when MIX0_CTL[RESET] is set to 1.
+ * AGL_PRT1_CTL will be reset when MIX1_CTL[RESET] is set to 1.
+ */
+union cvmx_agl_prtx_ctl {
+	u64 u64;
+	struct cvmx_agl_prtx_ctl_s {
+		u64 drv_byp : 1;
+		u64 reserved_62_62 : 1;
+		u64 cmp_pctl : 6;
+		u64 reserved_54_55 : 2;
+		u64 cmp_nctl : 6;
+		u64 reserved_46_47 : 2;
+		u64 drv_pctl : 6;
+		u64 reserved_38_39 : 2;
+		u64 drv_nctl : 6;
+		u64 reserved_31_31 : 1;
+		u64 clk_set : 7;
+		u64 clkrx_byp : 1;
+		u64 clkrx_set : 7;
+		u64 clktx_byp : 1;
+		u64 clktx_set : 7;
+		u64 refclk_sel : 2;
+		u64 reserved_5_5 : 1;
+		u64 dllrst : 1;
+		u64 comp : 1;
+		u64 enable : 1;
+		u64 clkrst : 1;
+		u64 mode : 1;
+	} s;
+	struct cvmx_agl_prtx_ctl_cn61xx {
+		u64 drv_byp : 1;
+		u64 reserved_62_62 : 1;
+		u64 cmp_pctl : 6;
+		u64 reserved_54_55 : 2;
+		u64 cmp_nctl : 6;
+		u64 reserved_46_47 : 2;
+		u64 drv_pctl : 6;
+		u64 reserved_38_39 : 2;
+		u64 drv_nctl : 6;
+		u64 reserved_29_31 : 3;
+		u64 clk_set : 5;
+		u64 clkrx_byp : 1;
+		u64 reserved_21_22 : 2;
+		u64 clkrx_set : 5;
+		u64 clktx_byp : 1;
+		u64 reserved_13_14 : 2;
+		u64 clktx_set : 5;
+		u64 reserved_5_7 : 3;
+		u64 dllrst : 1;
+		u64 comp : 1;
+		u64 enable : 1;
+		u64 clkrst : 1;
+		u64 mode : 1;
+	} cn61xx;
+	struct cvmx_agl_prtx_ctl_cn61xx cn63xx;
+	struct cvmx_agl_prtx_ctl_cn61xx cn63xxp1;
+	struct cvmx_agl_prtx_ctl_cn61xx cn66xx;
+	struct cvmx_agl_prtx_ctl_cn61xx cn68xx;
+	struct cvmx_agl_prtx_ctl_cn61xx cn68xxp1;
+	struct cvmx_agl_prtx_ctl_cn70xx {
+		u64 drv_byp : 1;
+		u64 reserved_61_62 : 2;
+		u64 cmp_pctl : 5;
+		u64 reserved_53_55 : 3;
+		u64 cmp_nctl : 5;
+		u64 reserved_45_47 : 3;
+		u64 drv_pctl : 5;
+		u64 reserved_37_39 : 3;
+		u64 drv_nctl : 5;
+		u64 reserved_31_31 : 1;
+		u64 clk_set : 7;
+		u64 clkrx_byp : 1;
+		u64 clkrx_set : 7;
+		u64 clktx_byp : 1;
+		u64 clktx_set : 7;
+		u64 refclk_sel : 2;
+		u64 reserved_5_5 : 1;
+		u64 dllrst : 1;
+		u64 comp : 1;
+		u64 enable : 1;
+		u64 clkrst : 1;
+		u64 mode : 1;
+	} cn70xx;
+	struct cvmx_agl_prtx_ctl_cn70xx cn70xxp1;
+};
+
+typedef union cvmx_agl_prtx_ctl cvmx_agl_prtx_ctl_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-asxx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-asxx-defs.h
new file mode 100644
index 0000000..2af1a29
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-asxx-defs.h
@@ -0,0 +1,709 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon asxx.
+ */
+
+#ifndef __CVMX_ASXX_DEFS_H__
+#define __CVMX_ASXX_DEFS_H__
+
+#define CVMX_ASXX_GMII_RX_CLK_SET(offset)    (0x00011800B0000180ull)
+#define CVMX_ASXX_GMII_RX_DAT_SET(offset)    (0x00011800B0000188ull)
+#define CVMX_ASXX_INT_EN(offset)	     (0x00011800B0000018ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_INT_REG(offset)	     (0x00011800B0000010ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_MII_RX_DAT_SET(offset)     (0x00011800B0000190ull)
+#define CVMX_ASXX_PRT_LOOP(offset)	     (0x00011800B0000040ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RLD_BYPASS(offset)	     (0x00011800B0000248ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RLD_BYPASS_SETTING(offset) (0x00011800B0000250ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RLD_COMP(offset)	     (0x00011800B0000220ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RLD_DATA_DRV(offset)	     (0x00011800B0000218ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RLD_FCRAM_MODE(offset)     (0x00011800B0000210ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RLD_NCTL_STRONG(offset)    (0x00011800B0000230ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RLD_NCTL_WEAK(offset)	     (0x00011800B0000240ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RLD_PCTL_STRONG(offset)    (0x00011800B0000228ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RLD_PCTL_WEAK(offset)	     (0x00011800B0000238ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RLD_SETTING(offset)	     (0x00011800B0000258ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RX_CLK_SETX(offset, block_id)                                                    \
+	(0x00011800B0000020ull + (((offset) & 3) + ((block_id) & 1) * 0x1000000ull) * 8)
+#define CVMX_ASXX_RX_PRT_EN(offset)    (0x00011800B0000000ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RX_WOL(offset)       (0x00011800B0000100ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RX_WOL_MSK(offset)   (0x00011800B0000108ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RX_WOL_POWOK(offset) (0x00011800B0000118ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_RX_WOL_SIG(offset)   (0x00011800B0000110ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_TX_CLK_SETX(offset, block_id)                                                    \
+	(0x00011800B0000048ull + (((offset) & 3) + ((block_id) & 1) * 0x1000000ull) * 8)
+#define CVMX_ASXX_TX_COMP_BYP(offset) (0x00011800B0000068ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_ASXX_TX_HI_WATERX(offset, block_id)                                                   \
+	(0x00011800B0000080ull + (((offset) & 3) + ((block_id) & 1) * 0x1000000ull) * 8)
+#define CVMX_ASXX_TX_PRT_EN(offset) (0x00011800B0000008ull + ((offset) & 1) * 0x8000000ull)
+
+/**
+ * cvmx_asx#_gmii_rx_clk_set
+ *
+ * ASX_GMII_RX_CLK_SET = GMII Clock delay setting
+ *
+ */
+union cvmx_asxx_gmii_rx_clk_set {
+	u64 u64;
+	struct cvmx_asxx_gmii_rx_clk_set_s {
+		u64 reserved_5_63 : 59;
+		u64 setting : 5;
+	} s;
+	struct cvmx_asxx_gmii_rx_clk_set_s cn30xx;
+	struct cvmx_asxx_gmii_rx_clk_set_s cn31xx;
+	struct cvmx_asxx_gmii_rx_clk_set_s cn50xx;
+};
+
+typedef union cvmx_asxx_gmii_rx_clk_set cvmx_asxx_gmii_rx_clk_set_t;
+
+/**
+ * cvmx_asx#_gmii_rx_dat_set
+ *
+ * ASX_GMII_RX_DAT_SET = GMII Clock delay setting
+ *
+ */
+union cvmx_asxx_gmii_rx_dat_set {
+	u64 u64;
+	struct cvmx_asxx_gmii_rx_dat_set_s {
+		u64 reserved_5_63 : 59;
+		u64 setting : 5;
+	} s;
+	struct cvmx_asxx_gmii_rx_dat_set_s cn30xx;
+	struct cvmx_asxx_gmii_rx_dat_set_s cn31xx;
+	struct cvmx_asxx_gmii_rx_dat_set_s cn50xx;
+};
+
+typedef union cvmx_asxx_gmii_rx_dat_set cvmx_asxx_gmii_rx_dat_set_t;
+
+/**
+ * cvmx_asx#_int_en
+ *
+ * ASX_INT_EN = Interrupt Enable
+ *
+ */
+union cvmx_asxx_int_en {
+	u64 u64;
+	struct cvmx_asxx_int_en_s {
+		u64 reserved_12_63 : 52;
+		u64 txpsh : 4;
+		u64 txpop : 4;
+		u64 ovrflw : 4;
+	} s;
+	struct cvmx_asxx_int_en_cn30xx {
+		u64 reserved_11_63 : 53;
+		u64 txpsh : 3;
+		u64 reserved_7_7 : 1;
+		u64 txpop : 3;
+		u64 reserved_3_3 : 1;
+		u64 ovrflw : 3;
+	} cn30xx;
+	struct cvmx_asxx_int_en_cn30xx cn31xx;
+	struct cvmx_asxx_int_en_s cn38xx;
+	struct cvmx_asxx_int_en_s cn38xxp2;
+	struct cvmx_asxx_int_en_cn30xx cn50xx;
+	struct cvmx_asxx_int_en_s cn58xx;
+	struct cvmx_asxx_int_en_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_int_en cvmx_asxx_int_en_t;
+
+/**
+ * cvmx_asx#_int_reg
+ *
+ * ASX_INT_REG = Interrupt Register
+ *
+ */
+union cvmx_asxx_int_reg {
+	u64 u64;
+	struct cvmx_asxx_int_reg_s {
+		u64 reserved_12_63 : 52;
+		u64 txpsh : 4;
+		u64 txpop : 4;
+		u64 ovrflw : 4;
+	} s;
+	struct cvmx_asxx_int_reg_cn30xx {
+		u64 reserved_11_63 : 53;
+		u64 txpsh : 3;
+		u64 reserved_7_7 : 1;
+		u64 txpop : 3;
+		u64 reserved_3_3 : 1;
+		u64 ovrflw : 3;
+	} cn30xx;
+	struct cvmx_asxx_int_reg_cn30xx cn31xx;
+	struct cvmx_asxx_int_reg_s cn38xx;
+	struct cvmx_asxx_int_reg_s cn38xxp2;
+	struct cvmx_asxx_int_reg_cn30xx cn50xx;
+	struct cvmx_asxx_int_reg_s cn58xx;
+	struct cvmx_asxx_int_reg_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_int_reg cvmx_asxx_int_reg_t;
+
+/**
+ * cvmx_asx#_mii_rx_dat_set
+ *
+ * ASX_MII_RX_DAT_SET = GMII Clock delay setting
+ *
+ */
+union cvmx_asxx_mii_rx_dat_set {
+	u64 u64;
+	struct cvmx_asxx_mii_rx_dat_set_s {
+		u64 reserved_5_63 : 59;
+		u64 setting : 5;
+	} s;
+	struct cvmx_asxx_mii_rx_dat_set_s cn30xx;
+	struct cvmx_asxx_mii_rx_dat_set_s cn50xx;
+};
+
+typedef union cvmx_asxx_mii_rx_dat_set cvmx_asxx_mii_rx_dat_set_t;
+
+/**
+ * cvmx_asx#_prt_loop
+ *
+ * ASX_PRT_LOOP = Internal Loopback mode - TX FIFO output goes into RX FIFO (and maybe pins)
+ *
+ */
+union cvmx_asxx_prt_loop {
+	u64 u64;
+	struct cvmx_asxx_prt_loop_s {
+		u64 reserved_8_63 : 56;
+		u64 ext_loop : 4;
+		u64 int_loop : 4;
+	} s;
+	struct cvmx_asxx_prt_loop_cn30xx {
+		u64 reserved_7_63 : 57;
+		u64 ext_loop : 3;
+		u64 reserved_3_3 : 1;
+		u64 int_loop : 3;
+	} cn30xx;
+	struct cvmx_asxx_prt_loop_cn30xx cn31xx;
+	struct cvmx_asxx_prt_loop_s cn38xx;
+	struct cvmx_asxx_prt_loop_s cn38xxp2;
+	struct cvmx_asxx_prt_loop_cn30xx cn50xx;
+	struct cvmx_asxx_prt_loop_s cn58xx;
+	struct cvmx_asxx_prt_loop_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_prt_loop cvmx_asxx_prt_loop_t;
+
+/**
+ * cvmx_asx#_rld_bypass
+ *
+ * ASX_RLD_BYPASS
+ *
+ */
+union cvmx_asxx_rld_bypass {
+	u64 u64;
+	struct cvmx_asxx_rld_bypass_s {
+		u64 reserved_1_63 : 63;
+		u64 bypass : 1;
+	} s;
+	struct cvmx_asxx_rld_bypass_s cn38xx;
+	struct cvmx_asxx_rld_bypass_s cn38xxp2;
+	struct cvmx_asxx_rld_bypass_s cn58xx;
+	struct cvmx_asxx_rld_bypass_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rld_bypass cvmx_asxx_rld_bypass_t;
+
+/**
+ * cvmx_asx#_rld_bypass_setting
+ *
+ * ASX_RLD_BYPASS_SETTING
+ *
+ */
+union cvmx_asxx_rld_bypass_setting {
+	u64 u64;
+	struct cvmx_asxx_rld_bypass_setting_s {
+		u64 reserved_5_63 : 59;
+		u64 setting : 5;
+	} s;
+	struct cvmx_asxx_rld_bypass_setting_s cn38xx;
+	struct cvmx_asxx_rld_bypass_setting_s cn38xxp2;
+	struct cvmx_asxx_rld_bypass_setting_s cn58xx;
+	struct cvmx_asxx_rld_bypass_setting_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rld_bypass_setting cvmx_asxx_rld_bypass_setting_t;
+
+/**
+ * cvmx_asx#_rld_comp
+ *
+ * ASX_RLD_COMP
+ *
+ */
+union cvmx_asxx_rld_comp {
+	u64 u64;
+	struct cvmx_asxx_rld_comp_s {
+		u64 reserved_9_63 : 55;
+		u64 pctl : 5;
+		u64 nctl : 4;
+	} s;
+	struct cvmx_asxx_rld_comp_cn38xx {
+		u64 reserved_8_63 : 56;
+		u64 pctl : 4;
+		u64 nctl : 4;
+	} cn38xx;
+	struct cvmx_asxx_rld_comp_cn38xx cn38xxp2;
+	struct cvmx_asxx_rld_comp_s cn58xx;
+	struct cvmx_asxx_rld_comp_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rld_comp cvmx_asxx_rld_comp_t;
+
+/**
+ * cvmx_asx#_rld_data_drv
+ *
+ * ASX_RLD_DATA_DRV
+ *
+ */
+union cvmx_asxx_rld_data_drv {
+	u64 u64;
+	struct cvmx_asxx_rld_data_drv_s {
+		u64 reserved_8_63 : 56;
+		u64 pctl : 4;
+		u64 nctl : 4;
+	} s;
+	struct cvmx_asxx_rld_data_drv_s cn38xx;
+	struct cvmx_asxx_rld_data_drv_s cn38xxp2;
+	struct cvmx_asxx_rld_data_drv_s cn58xx;
+	struct cvmx_asxx_rld_data_drv_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rld_data_drv cvmx_asxx_rld_data_drv_t;
+
+/**
+ * cvmx_asx#_rld_fcram_mode
+ *
+ * ASX_RLD_FCRAM_MODE
+ *
+ */
+union cvmx_asxx_rld_fcram_mode {
+	u64 u64;
+	struct cvmx_asxx_rld_fcram_mode_s {
+		u64 reserved_1_63 : 63;
+		u64 mode : 1;
+	} s;
+	struct cvmx_asxx_rld_fcram_mode_s cn38xx;
+	struct cvmx_asxx_rld_fcram_mode_s cn38xxp2;
+};
+
+typedef union cvmx_asxx_rld_fcram_mode cvmx_asxx_rld_fcram_mode_t;
+
+/**
+ * cvmx_asx#_rld_nctl_strong
+ *
+ * ASX_RLD_NCTL_STRONG
+ *
+ */
+union cvmx_asxx_rld_nctl_strong {
+	u64 u64;
+	struct cvmx_asxx_rld_nctl_strong_s {
+		u64 reserved_5_63 : 59;
+		u64 nctl : 5;
+	} s;
+	struct cvmx_asxx_rld_nctl_strong_s cn38xx;
+	struct cvmx_asxx_rld_nctl_strong_s cn38xxp2;
+	struct cvmx_asxx_rld_nctl_strong_s cn58xx;
+	struct cvmx_asxx_rld_nctl_strong_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rld_nctl_strong cvmx_asxx_rld_nctl_strong_t;
+
+/**
+ * cvmx_asx#_rld_nctl_weak
+ *
+ * ASX_RLD_NCTL_WEAK
+ *
+ */
+union cvmx_asxx_rld_nctl_weak {
+	u64 u64;
+	struct cvmx_asxx_rld_nctl_weak_s {
+		u64 reserved_5_63 : 59;
+		u64 nctl : 5;
+	} s;
+	struct cvmx_asxx_rld_nctl_weak_s cn38xx;
+	struct cvmx_asxx_rld_nctl_weak_s cn38xxp2;
+	struct cvmx_asxx_rld_nctl_weak_s cn58xx;
+	struct cvmx_asxx_rld_nctl_weak_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rld_nctl_weak cvmx_asxx_rld_nctl_weak_t;
+
+/**
+ * cvmx_asx#_rld_pctl_strong
+ *
+ * ASX_RLD_PCTL_STRONG
+ *
+ */
+union cvmx_asxx_rld_pctl_strong {
+	u64 u64;
+	struct cvmx_asxx_rld_pctl_strong_s {
+		u64 reserved_5_63 : 59;
+		u64 pctl : 5;
+	} s;
+	struct cvmx_asxx_rld_pctl_strong_s cn38xx;
+	struct cvmx_asxx_rld_pctl_strong_s cn38xxp2;
+	struct cvmx_asxx_rld_pctl_strong_s cn58xx;
+	struct cvmx_asxx_rld_pctl_strong_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rld_pctl_strong cvmx_asxx_rld_pctl_strong_t;
+
+/**
+ * cvmx_asx#_rld_pctl_weak
+ *
+ * ASX_RLD_PCTL_WEAK
+ *
+ */
+union cvmx_asxx_rld_pctl_weak {
+	u64 u64;
+	struct cvmx_asxx_rld_pctl_weak_s {
+		u64 reserved_5_63 : 59;
+		u64 pctl : 5;
+	} s;
+	struct cvmx_asxx_rld_pctl_weak_s cn38xx;
+	struct cvmx_asxx_rld_pctl_weak_s cn38xxp2;
+	struct cvmx_asxx_rld_pctl_weak_s cn58xx;
+	struct cvmx_asxx_rld_pctl_weak_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rld_pctl_weak cvmx_asxx_rld_pctl_weak_t;
+
+/**
+ * cvmx_asx#_rld_setting
+ *
+ * ASX_RLD_SETTING
+ *
+ */
+union cvmx_asxx_rld_setting {
+	u64 u64;
+	struct cvmx_asxx_rld_setting_s {
+		u64 reserved_13_63 : 51;
+		u64 dfaset : 5;
+		u64 dfalag : 1;
+		u64 dfalead : 1;
+		u64 dfalock : 1;
+		u64 setting : 5;
+	} s;
+	struct cvmx_asxx_rld_setting_cn38xx {
+		u64 reserved_5_63 : 59;
+		u64 setting : 5;
+	} cn38xx;
+	struct cvmx_asxx_rld_setting_cn38xx cn38xxp2;
+	struct cvmx_asxx_rld_setting_s cn58xx;
+	struct cvmx_asxx_rld_setting_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rld_setting cvmx_asxx_rld_setting_t;
+
+/**
+ * cvmx_asx#_rx_clk_set#
+ *
+ * ASX_RX_CLK_SET = RGMII Clock delay setting
+ *
+ *
+ * Notes:
+ * Setting to place on the open-loop RXC (RGMII receive clk)
+ * delay line, which can delay the received clock. This
+ * can be used if the board and/or transmitting device
+ * has not otherwise delayed the clock.
+ *
+ * A value of SETTING=0 disables the delay line. The delay
+ * line should be disabled unless the transmitter or board
+ * does not delay the clock.
+ *
+ * Note that this delay line provides only a coarse control
+ * over the delay. Generally, it can only reliably provide
+ * a delay in the range 1.25-2.5ns, which may not be adequate
+ * for some system applications.
+ *
+ * The open loop delay line selects
+ * from among a series of tap positions. Each incremental
+ * tap position adds a delay of 50ps to 135ps per tap, depending
+ * on the chip, its temperature, and the voltage.
+ * To achieve from 1.25-2.5ns of delay on the received
+ * clock, a fixed value of SETTING=24 may work.
+ * For more precision, we recommend the following settings
+ * based on the chip voltage:
+ *
+ *    VDD           SETTING
+ *  -----------------------------
+ *    1.0             18
+ *    1.05            19
+ *    1.1             21
+ *    1.15            22
+ *    1.2             23
+ *    1.25            24
+ *    1.3             25
+ */
+union cvmx_asxx_rx_clk_setx {
+	u64 u64;
+	struct cvmx_asxx_rx_clk_setx_s {
+		u64 reserved_5_63 : 59;
+		u64 setting : 5;
+	} s;
+	struct cvmx_asxx_rx_clk_setx_s cn30xx;
+	struct cvmx_asxx_rx_clk_setx_s cn31xx;
+	struct cvmx_asxx_rx_clk_setx_s cn38xx;
+	struct cvmx_asxx_rx_clk_setx_s cn38xxp2;
+	struct cvmx_asxx_rx_clk_setx_s cn50xx;
+	struct cvmx_asxx_rx_clk_setx_s cn58xx;
+	struct cvmx_asxx_rx_clk_setx_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rx_clk_setx cvmx_asxx_rx_clk_setx_t;
+
+/**
+ * cvmx_asx#_rx_prt_en
+ *
+ * ASX_RX_PRT_EN = RGMII Port Enable
+ *
+ */
+union cvmx_asxx_rx_prt_en {
+	u64 u64;
+	struct cvmx_asxx_rx_prt_en_s {
+		u64 reserved_4_63 : 60;
+		u64 prt_en : 4;
+	} s;
+	struct cvmx_asxx_rx_prt_en_cn30xx {
+		u64 reserved_3_63 : 61;
+		u64 prt_en : 3;
+	} cn30xx;
+	struct cvmx_asxx_rx_prt_en_cn30xx cn31xx;
+	struct cvmx_asxx_rx_prt_en_s cn38xx;
+	struct cvmx_asxx_rx_prt_en_s cn38xxp2;
+	struct cvmx_asxx_rx_prt_en_cn30xx cn50xx;
+	struct cvmx_asxx_rx_prt_en_s cn58xx;
+	struct cvmx_asxx_rx_prt_en_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_rx_prt_en cvmx_asxx_rx_prt_en_t;
+
+/**
+ * cvmx_asx#_rx_wol
+ *
+ * ASX_RX_WOL = RGMII RX Wake on LAN status register
+ *
+ */
+union cvmx_asxx_rx_wol {
+	u64 u64;
+	struct cvmx_asxx_rx_wol_s {
+		u64 reserved_2_63 : 62;
+		u64 status : 1;
+		u64 enable : 1;
+	} s;
+	struct cvmx_asxx_rx_wol_s cn38xx;
+	struct cvmx_asxx_rx_wol_s cn38xxp2;
+};
+
+typedef union cvmx_asxx_rx_wol cvmx_asxx_rx_wol_t;
+
+/**
+ * cvmx_asx#_rx_wol_msk
+ *
+ * ASX_RX_WOL_MSK = RGMII RX Wake on LAN byte mask
+ *
+ */
+union cvmx_asxx_rx_wol_msk {
+	u64 u64;
+	struct cvmx_asxx_rx_wol_msk_s {
+		u64 msk : 64;
+	} s;
+	struct cvmx_asxx_rx_wol_msk_s cn38xx;
+	struct cvmx_asxx_rx_wol_msk_s cn38xxp2;
+};
+
+typedef union cvmx_asxx_rx_wol_msk cvmx_asxx_rx_wol_msk_t;
+
+/**
+ * cvmx_asx#_rx_wol_powok
+ *
+ * ASX_RX_WOL_POWOK = RGMII RX Wake on LAN Power OK
+ *
+ */
+union cvmx_asxx_rx_wol_powok {
+	u64 u64;
+	struct cvmx_asxx_rx_wol_powok_s {
+		u64 reserved_1_63 : 63;
+		u64 powerok : 1;
+	} s;
+	struct cvmx_asxx_rx_wol_powok_s cn38xx;
+	struct cvmx_asxx_rx_wol_powok_s cn38xxp2;
+};
+
+typedef union cvmx_asxx_rx_wol_powok cvmx_asxx_rx_wol_powok_t;
+
+/**
+ * cvmx_asx#_rx_wol_sig
+ *
+ * ASX_RX_WOL_SIG = RGMII RX Wake on LAN CRC signature
+ *
+ */
+union cvmx_asxx_rx_wol_sig {
+	u64 u64;
+	struct cvmx_asxx_rx_wol_sig_s {
+		u64 reserved_32_63 : 32;
+		u64 sig : 32;
+	} s;
+	struct cvmx_asxx_rx_wol_sig_s cn38xx;
+	struct cvmx_asxx_rx_wol_sig_s cn38xxp2;
+};
+
+typedef union cvmx_asxx_rx_wol_sig cvmx_asxx_rx_wol_sig_t;
+
+/**
+ * cvmx_asx#_tx_clk_set#
+ *
+ * ASX_TX_CLK_SET = RGMII Clock delay setting
+ *
+ *
+ * Notes:
+ * Setting to place on the open-loop TXC (RGMII transmit clk)
+ * delay line, which can delay the transmited clock. This
+ * can be used if the board and/or transmitting device
+ * has not otherwise delayed the clock.
+ *
+ * A value of SETTING=0 disables the delay line. The delay
+ * line should be disabled unless the transmitter or board
+ * does not delay the clock.
+ *
+ * Note that this delay line provides only a coarse control
+ * over the delay. Generally, it can only reliably provide
+ * a delay in the range 1.25-2.5ns, which may not be adequate
+ * for some system applications.
+ *
+ * The open loop delay line selects
+ * from among a series of tap positions. Each incremental
+ * tap position adds a delay of 50ps to 135ps per tap, depending
+ * on the chip, its temperature, and the voltage.
+ * To achieve from 1.25-2.5ns of delay on the received
+ * clock, a fixed value of SETTING=24 may work.
+ * For more precision, we recommend the following settings
+ * based on the chip voltage:
+ *
+ *    VDD           SETTING
+ *  -----------------------------
+ *    1.0             18
+ *    1.05            19
+ *    1.1             21
+ *    1.15            22
+ *    1.2             23
+ *    1.25            24
+ *    1.3             25
+ */
+union cvmx_asxx_tx_clk_setx {
+	u64 u64;
+	struct cvmx_asxx_tx_clk_setx_s {
+		u64 reserved_5_63 : 59;
+		u64 setting : 5;
+	} s;
+	struct cvmx_asxx_tx_clk_setx_s cn30xx;
+	struct cvmx_asxx_tx_clk_setx_s cn31xx;
+	struct cvmx_asxx_tx_clk_setx_s cn38xx;
+	struct cvmx_asxx_tx_clk_setx_s cn38xxp2;
+	struct cvmx_asxx_tx_clk_setx_s cn50xx;
+	struct cvmx_asxx_tx_clk_setx_s cn58xx;
+	struct cvmx_asxx_tx_clk_setx_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_tx_clk_setx cvmx_asxx_tx_clk_setx_t;
+
+/**
+ * cvmx_asx#_tx_comp_byp
+ *
+ * ASX_TX_COMP_BYP = RGMII Clock delay setting
+ *
+ */
+union cvmx_asxx_tx_comp_byp {
+	u64 u64;
+	struct cvmx_asxx_tx_comp_byp_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_asxx_tx_comp_byp_cn30xx {
+		u64 reserved_9_63 : 55;
+		u64 bypass : 1;
+		u64 pctl : 4;
+		u64 nctl : 4;
+	} cn30xx;
+	struct cvmx_asxx_tx_comp_byp_cn30xx cn31xx;
+	struct cvmx_asxx_tx_comp_byp_cn38xx {
+		u64 reserved_8_63 : 56;
+		u64 pctl : 4;
+		u64 nctl : 4;
+	} cn38xx;
+	struct cvmx_asxx_tx_comp_byp_cn38xx cn38xxp2;
+	struct cvmx_asxx_tx_comp_byp_cn50xx {
+		u64 reserved_17_63 : 47;
+		u64 bypass : 1;
+		u64 reserved_13_15 : 3;
+		u64 pctl : 5;
+		u64 reserved_5_7 : 3;
+		u64 nctl : 5;
+	} cn50xx;
+	struct cvmx_asxx_tx_comp_byp_cn58xx {
+		u64 reserved_13_63 : 51;
+		u64 pctl : 5;
+		u64 reserved_5_7 : 3;
+		u64 nctl : 5;
+	} cn58xx;
+	struct cvmx_asxx_tx_comp_byp_cn58xx cn58xxp1;
+};
+
+typedef union cvmx_asxx_tx_comp_byp cvmx_asxx_tx_comp_byp_t;
+
+/**
+ * cvmx_asx#_tx_hi_water#
+ *
+ * ASX_TX_HI_WATER = RGMII TX FIFO Hi WaterMark
+ *
+ */
+union cvmx_asxx_tx_hi_waterx {
+	u64 u64;
+	struct cvmx_asxx_tx_hi_waterx_s {
+		u64 reserved_4_63 : 60;
+		u64 mark : 4;
+	} s;
+	struct cvmx_asxx_tx_hi_waterx_cn30xx {
+		u64 reserved_3_63 : 61;
+		u64 mark : 3;
+	} cn30xx;
+	struct cvmx_asxx_tx_hi_waterx_cn30xx cn31xx;
+	struct cvmx_asxx_tx_hi_waterx_s cn38xx;
+	struct cvmx_asxx_tx_hi_waterx_s cn38xxp2;
+	struct cvmx_asxx_tx_hi_waterx_cn30xx cn50xx;
+	struct cvmx_asxx_tx_hi_waterx_s cn58xx;
+	struct cvmx_asxx_tx_hi_waterx_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_tx_hi_waterx cvmx_asxx_tx_hi_waterx_t;
+
+/**
+ * cvmx_asx#_tx_prt_en
+ *
+ * ASX_TX_PRT_EN = RGMII Port Enable
+ *
+ */
+union cvmx_asxx_tx_prt_en {
+	u64 u64;
+	struct cvmx_asxx_tx_prt_en_s {
+		u64 reserved_4_63 : 60;
+		u64 prt_en : 4;
+	} s;
+	struct cvmx_asxx_tx_prt_en_cn30xx {
+		u64 reserved_3_63 : 61;
+		u64 prt_en : 3;
+	} cn30xx;
+	struct cvmx_asxx_tx_prt_en_cn30xx cn31xx;
+	struct cvmx_asxx_tx_prt_en_s cn38xx;
+	struct cvmx_asxx_tx_prt_en_s cn38xxp2;
+	struct cvmx_asxx_tx_prt_en_cn30xx cn50xx;
+	struct cvmx_asxx_tx_prt_en_s cn58xx;
+	struct cvmx_asxx_tx_prt_en_s cn58xxp1;
+};
+
+typedef union cvmx_asxx_tx_prt_en cvmx_asxx_tx_prt_en_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-bgxx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-bgxx-defs.h
new file mode 100644
index 0000000..7bcf805
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-bgxx-defs.h
@@ -0,0 +1,4106 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon bgxx.
+ */
+
+#ifndef __CVMX_BGXX_DEFS_H__
+#define __CVMX_BGXX_DEFS_H__
+
+#define CVMX_BGXX_CMRX_CONFIG(offset, block_id)                                                    \
+	(0x00011800E0000000ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_INT(offset, block_id)                                                       \
+	(0x00011800E0000020ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_PRT_CBFC_CTL(offset, block_id)                                              \
+	(0x00011800E0000408ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_ADR_CTL(offset, block_id)                                                \
+	(0x00011800E00000A0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_BP_DROP(offset, block_id)                                                \
+	(0x00011800E0000080ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_BP_OFF(offset, block_id)                                                 \
+	(0x00011800E0000090ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_BP_ON(offset, block_id)                                                  \
+	(0x00011800E0000088ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_BP_STATUS(offset, block_id)                                              \
+	(0x00011800E00000A8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_FIFO_LEN(offset, block_id)                                               \
+	(0x00011800E00000C0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_ID_MAP(offset, block_id)                                                 \
+	(0x00011800E0000028ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_LOGL_XOFF(offset, block_id)                                              \
+	(0x00011800E00000B0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_LOGL_XON(offset, block_id)                                               \
+	(0x00011800E00000B8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_PAUSE_DROP_TIME(offset, block_id)                                        \
+	(0x00011800E0000030ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_STAT0(offset, block_id)                                                  \
+	(0x00011800E0000038ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_STAT1(offset, block_id)                                                  \
+	(0x00011800E0000040ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_STAT2(offset, block_id)                                                  \
+	(0x00011800E0000048ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_STAT3(offset, block_id)                                                  \
+	(0x00011800E0000050ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_STAT4(offset, block_id)                                                  \
+	(0x00011800E0000058ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_STAT5(offset, block_id)                                                  \
+	(0x00011800E0000060ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_STAT6(offset, block_id)                                                  \
+	(0x00011800E0000068ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_STAT7(offset, block_id)                                                  \
+	(0x00011800E0000070ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_STAT8(offset, block_id)                                                  \
+	(0x00011800E0000078ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_RX_WEIGHT(offset, block_id)                                                 \
+	(0x00011800E0000098ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_CHANNEL(offset, block_id)                                                \
+	(0x00011800E0000400ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_FIFO_LEN(offset, block_id)                                               \
+	(0x00011800E0000418ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_HG2_STATUS(offset, block_id)                                             \
+	(0x00011800E0000410ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_OVR_BP(offset, block_id)                                                 \
+	(0x00011800E0000420ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT0(offset, block_id)                                                  \
+	(0x00011800E0000508ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT1(offset, block_id)                                                  \
+	(0x00011800E0000510ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT10(offset, block_id)                                                 \
+	(0x00011800E0000558ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT11(offset, block_id)                                                 \
+	(0x00011800E0000560ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT12(offset, block_id)                                                 \
+	(0x00011800E0000568ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT13(offset, block_id)                                                 \
+	(0x00011800E0000570ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT14(offset, block_id)                                                 \
+	(0x00011800E0000578ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT15(offset, block_id)                                                 \
+	(0x00011800E0000580ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT16(offset, block_id)                                                 \
+	(0x00011800E0000588ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT17(offset, block_id)                                                 \
+	(0x00011800E0000590ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT2(offset, block_id)                                                  \
+	(0x00011800E0000518ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT3(offset, block_id)                                                  \
+	(0x00011800E0000520ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT4(offset, block_id)                                                  \
+	(0x00011800E0000528ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT5(offset, block_id)                                                  \
+	(0x00011800E0000530ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT6(offset, block_id)                                                  \
+	(0x00011800E0000538ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT7(offset, block_id)                                                  \
+	(0x00011800E0000540ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT8(offset, block_id)                                                  \
+	(0x00011800E0000548ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMRX_TX_STAT9(offset, block_id)                                                  \
+	(0x00011800E0000550ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_CMR_BAD(offset)	    (0x00011800E0001020ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_BIST_STATUS(offset)   (0x00011800E0000300ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_CHAN_MSK_AND(offset)  (0x00011800E0000200ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_CHAN_MSK_OR(offset)   (0x00011800E0000208ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_ECO(offset)	    (0x00011800E0001028ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_GLOBAL_CONFIG(offset) (0x00011800E0000008ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_MEM_CTRL(offset)	    (0x00011800E0000018ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_MEM_INT(offset)	    (0x00011800E0000010ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_NXC_ADR(offset)	    (0x00011800E0001018ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_RX_ADRX_CAM(offset, block_id)                                                \
+	(0x00011800E0000100ull + (((offset) & 31) + ((block_id) & 7) * 0x200000ull) * 8)
+#define CVMX_BGXX_CMR_RX_LMACS(offset)	(0x00011800E0000308ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_RX_OVR_BP(offset) (0x00011800E0000318ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_CMR_TX_LMACS(offset)	(0x00011800E0001000ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_GMP_GMI_PRTX_CFG(offset, block_id)                                               \
+	(0x00011800E0038010ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_RXX_DECISION(offset, block_id)                                           \
+	(0x00011800E0038040ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_RXX_FRM_CHK(offset, block_id)                                            \
+	(0x00011800E0038020ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_RXX_FRM_CTL(offset, block_id)                                            \
+	(0x00011800E0038018ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_RXX_IFG(offset, block_id)                                                \
+	(0x00011800E0038058ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_RXX_INT(offset, block_id)                                                \
+	(0x00011800E0038000ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_RXX_JABBER(offset, block_id)                                             \
+	(0x00011800E0038038ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_RXX_UDD_SKP(offset, block_id)                                            \
+	(0x00011800E0038048ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_SMACX(offset, block_id)                                                  \
+	(0x00011800E0038230ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_APPEND(offset, block_id)                                             \
+	(0x00011800E0038218ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_BURST(offset, block_id)                                              \
+	(0x00011800E0038228ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_CTL(offset, block_id)                                                \
+	(0x00011800E0038270ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_INT(offset, block_id)                                                \
+	(0x00011800E0038500ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_MIN_PKT(offset, block_id)                                            \
+	(0x00011800E0038240ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(offset, block_id)                                 \
+	(0x00011800E0038248ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(offset, block_id)                                     \
+	(0x00011800E0038238ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_PAUSE_TOGO(offset, block_id)                                         \
+	(0x00011800E0038258ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_PAUSE_ZERO(offset, block_id)                                         \
+	(0x00011800E0038260ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_SGMII_CTL(offset, block_id)                                          \
+	(0x00011800E0038300ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_SLOT(offset, block_id)                                               \
+	(0x00011800E0038220ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_SOFT_PAUSE(offset, block_id)                                         \
+	(0x00011800E0038250ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TXX_THRESH(offset, block_id)                                             \
+	(0x00011800E0038210ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_GMI_TX_COL_ATTEMPT(offset)                                                   \
+	(0x00011800E0039010ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_GMP_GMI_TX_IFG(offset)  (0x00011800E0039000ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_GMP_GMI_TX_JAM(offset)  (0x00011800E0039008ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_GMP_GMI_TX_LFSR(offset) (0x00011800E0039028ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(offset)                                                \
+	(0x00011800E0039018ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(offset)                                                \
+	(0x00011800E0039020ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_GMP_PCS_ANX_ADV(offset, block_id)                                                \
+	(0x00011800E0030010ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_ANX_EXT_ST(offset, block_id)                                             \
+	(0x00011800E0030028ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_ANX_LP_ABIL(offset, block_id)                                            \
+	(0x00011800E0030018ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_ANX_RESULTS(offset, block_id)                                            \
+	(0x00011800E0030020ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_INTX(offset, block_id)                                                   \
+	(0x00011800E0030080ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_LINKX_TIMER(offset, block_id)                                            \
+	(0x00011800E0030040ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_MISCX_CTL(offset, block_id)                                              \
+	(0x00011800E0030078ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_MRX_CONTROL(offset, block_id)                                            \
+	(0x00011800E0030000ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_MRX_STATUS(offset, block_id)                                             \
+	(0x00011800E0030008ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_RXX_STATES(offset, block_id)                                             \
+	(0x00011800E0030058ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_RXX_SYNC(offset, block_id)                                               \
+	(0x00011800E0030050ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_SGMX_AN_ADV(offset, block_id)                                            \
+	(0x00011800E0030068ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_SGMX_LP_ADV(offset, block_id)                                            \
+	(0x00011800E0030070ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_TXX_STATES(offset, block_id)                                             \
+	(0x00011800E0030060ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_GMP_PCS_TX_RXX_POLARITY(offset, block_id)                                        \
+	(0x00011800E0030048ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_CBFC_CTL(offset, block_id)                                                  \
+	(0x00011800E0020218ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_CTRL(offset, block_id)                                                      \
+	(0x00011800E0020200ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_EXT_LOOPBACK(offset, block_id)                                              \
+	(0x00011800E0020208ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_HG2_CONTROL(offset, block_id)                                               \
+	(0x00011800E0020210ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_RX_BAD_COL_HI(offset, block_id)                                             \
+	(0x00011800E0020040ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_RX_BAD_COL_LO(offset, block_id)                                             \
+	(0x00011800E0020038ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_RX_CTL(offset, block_id)                                                    \
+	(0x00011800E0020030ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_RX_DECISION(offset, block_id)                                               \
+	(0x00011800E0020020ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_RX_FRM_CHK(offset, block_id)                                                \
+	(0x00011800E0020010ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_RX_FRM_CTL(offset, block_id)                                                \
+	(0x00011800E0020008ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_RX_INT(offset, block_id)                                                    \
+	(0x00011800E0020000ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_RX_JABBER(offset, block_id)                                                 \
+	(0x00011800E0020018ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_RX_UDD_SKP(offset, block_id)                                                \
+	(0x00011800E0020028ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_SMAC(offset, block_id)                                                      \
+	(0x00011800E0020108ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_APPEND(offset, block_id)                                                 \
+	(0x00011800E0020100ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_CTL(offset, block_id)                                                    \
+	(0x00011800E0020160ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_IFG(offset, block_id)                                                    \
+	(0x00011800E0020148ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_INT(offset, block_id)                                                    \
+	(0x00011800E0020140ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_MIN_PKT(offset, block_id)                                                \
+	(0x00011800E0020118ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_PAUSE_PKT_DMAC(offset, block_id)                                         \
+	(0x00011800E0020150ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(offset, block_id)                                     \
+	(0x00011800E0020120ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_PAUSE_PKT_TIME(offset, block_id)                                         \
+	(0x00011800E0020110ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_PAUSE_PKT_TYPE(offset, block_id)                                         \
+	(0x00011800E0020158ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_PAUSE_TOGO(offset, block_id)                                             \
+	(0x00011800E0020130ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_PAUSE_ZERO(offset, block_id)                                             \
+	(0x00011800E0020138ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_SOFT_PAUSE(offset, block_id)                                             \
+	(0x00011800E0020128ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SMUX_TX_THRESH(offset, block_id)                                                 \
+	(0x00011800E0020168ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_AN_ADV(offset, block_id)                                                    \
+	(0x00011800E00100D8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_AN_BP_STATUS(offset, block_id)                                              \
+	(0x00011800E00100F8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_AN_CONTROL(offset, block_id)                                                \
+	(0x00011800E00100C8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_AN_LP_BASE(offset, block_id)                                                \
+	(0x00011800E00100E0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_AN_LP_XNP(offset, block_id)                                                 \
+	(0x00011800E00100F0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_AN_STATUS(offset, block_id)                                                 \
+	(0x00011800E00100D0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_AN_XNP_TX(offset, block_id)                                                 \
+	(0x00011800E00100E8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_ALGN_STATUS(offset, block_id)                                            \
+	(0x00011800E0010050ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_BIP_ERR_CNT(offset, block_id)                                            \
+	(0x00011800E0010058ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_LANE_MAP(offset, block_id)                                               \
+	(0x00011800E0010060ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_PMD_CONTROL(offset, block_id)                                            \
+	(0x00011800E0010068ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_PMD_LD_CUP(offset, block_id)                                             \
+	(0x00011800E0010088ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_PMD_LD_REP(offset, block_id)                                             \
+	(0x00011800E0010090ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_PMD_LP_CUP(offset, block_id)                                             \
+	(0x00011800E0010078ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_PMD_LP_REP(offset, block_id)                                             \
+	(0x00011800E0010080ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_PMD_STATUS(offset, block_id)                                             \
+	(0x00011800E0010070ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_STATUS1(offset, block_id)                                                \
+	(0x00011800E0010030ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_STATUS2(offset, block_id)                                                \
+	(0x00011800E0010038ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_TP_CONTROL(offset, block_id)                                             \
+	(0x00011800E0010040ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BR_TP_ERR_CNT(offset, block_id)                                             \
+	(0x00011800E0010048ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_BX_STATUS(offset, block_id)                                                 \
+	(0x00011800E0010028ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_CONTROL1(offset, block_id)                                                  \
+	(0x00011800E0010000ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_CONTROL2(offset, block_id)                                                  \
+	(0x00011800E0010018ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_FEC_ABIL(offset, block_id)                                                  \
+	(0x00011800E0010098ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_FEC_CONTROL(offset, block_id)                                               \
+	(0x00011800E00100A0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_FEC_CORR_BLKS01(offset, block_id)                                           \
+	(0x00011800E00100A8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_FEC_CORR_BLKS23(offset, block_id)                                           \
+	(0x00011800E00100B0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_FEC_UNCORR_BLKS01(offset, block_id)                                         \
+	(0x00011800E00100B8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_FEC_UNCORR_BLKS23(offset, block_id)                                         \
+	(0x00011800E00100C0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_INT(offset, block_id)                                                       \
+	(0x00011800E0010220ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_LPCS_STATES(offset, block_id)                                               \
+	(0x00011800E0010208ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_MISC_CONTROL(offset, block_id)                                              \
+	(0x00011800E0010218ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_SPD_ABIL(offset, block_id)                                                  \
+	(0x00011800E0010010ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_STATUS1(offset, block_id)                                                   \
+	(0x00011800E0010008ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPUX_STATUS2(offset, block_id)                                                   \
+	(0x00011800E0010020ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
+#define CVMX_BGXX_SPU_BIST_STATUS(offset) (0x00011800E0010318ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_SPU_DBG_CONTROL(offset) (0x00011800E0010300ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_SPU_MEM_INT(offset)	  (0x00011800E0010310ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_SPU_MEM_STATUS(offset)  (0x00011800E0010308ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_BGXX_SPU_SDSX_SKEW_STATUS(offset, block_id)                                           \
+	(0x00011800E0010320ull + (((offset) & 3) + ((block_id) & 7) * 0x200000ull) * 8)
+#define CVMX_BGXX_SPU_SDSX_STATES(offset, block_id)                                                \
+	(0x00011800E0010340ull + (((offset) & 3) + ((block_id) & 7) * 0x200000ull) * 8)
+
+/**
+ * cvmx_bgx#_cmr#_config
+ *
+ * Logical MAC/PCS configuration registers; one per LMAC. The maximum number of LMACs (and
+ * maximum LMAC ID) that can be enabled by these registers is limited by
+ * BGX()_CMR_RX_LMACS[LMACS] and BGX()_CMR_TX_LMACS[LMACS]. When multiple LMACs are
+ * enabled, they must be configured with the same [LMAC_TYPE] value.
+ */
+union cvmx_bgxx_cmrx_config {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_config_s {
+		u64 reserved_16_63 : 48;
+		u64 enable : 1;
+		u64 data_pkt_rx_en : 1;
+		u64 data_pkt_tx_en : 1;
+		u64 int_beat_gen : 1;
+		u64 mix_en : 1;
+		u64 lmac_type : 3;
+		u64 lane_to_sds : 8;
+	} s;
+	struct cvmx_bgxx_cmrx_config_s cn73xx;
+	struct cvmx_bgxx_cmrx_config_s cn78xx;
+	struct cvmx_bgxx_cmrx_config_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_config_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_config cvmx_bgxx_cmrx_config_t;
+
+/**
+ * cvmx_bgx#_cmr#_int
+ */
+union cvmx_bgxx_cmrx_int {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_int_s {
+		u64 reserved_3_63 : 61;
+		u64 pko_nxc : 1;
+		u64 overflw : 1;
+		u64 pause_drp : 1;
+	} s;
+	struct cvmx_bgxx_cmrx_int_s cn73xx;
+	struct cvmx_bgxx_cmrx_int_s cn78xx;
+	struct cvmx_bgxx_cmrx_int_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_int_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_int cvmx_bgxx_cmrx_int_t;
+
+/**
+ * cvmx_bgx#_cmr#_prt_cbfc_ctl
+ *
+ * See XOFF definition listed under BGX()_SMU()_CBFC_CTL.
+ *
+ */
+union cvmx_bgxx_cmrx_prt_cbfc_ctl {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_prt_cbfc_ctl_s {
+		u64 reserved_32_63 : 32;
+		u64 phys_bp : 16;
+		u64 reserved_0_15 : 16;
+	} s;
+	struct cvmx_bgxx_cmrx_prt_cbfc_ctl_s cn73xx;
+	struct cvmx_bgxx_cmrx_prt_cbfc_ctl_s cn78xx;
+	struct cvmx_bgxx_cmrx_prt_cbfc_ctl_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_prt_cbfc_ctl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_prt_cbfc_ctl cvmx_bgxx_cmrx_prt_cbfc_ctl_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_adr_ctl
+ */
+union cvmx_bgxx_cmrx_rx_adr_ctl {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_adr_ctl_s {
+		u64 reserved_4_63 : 60;
+		u64 cam_accept : 1;
+		u64 mcst_mode : 2;
+		u64 bcst_accept : 1;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_adr_ctl_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_adr_ctl_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_adr_ctl_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_adr_ctl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_adr_ctl cvmx_bgxx_cmrx_rx_adr_ctl_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_bp_drop
+ */
+union cvmx_bgxx_cmrx_rx_bp_drop {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_bp_drop_s {
+		u64 reserved_7_63 : 57;
+		u64 mark : 7;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_bp_drop_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_bp_drop_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_bp_drop_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_bp_drop_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_bp_drop cvmx_bgxx_cmrx_rx_bp_drop_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_bp_off
+ */
+union cvmx_bgxx_cmrx_rx_bp_off {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_bp_off_s {
+		u64 reserved_7_63 : 57;
+		u64 mark : 7;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_bp_off_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_bp_off_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_bp_off_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_bp_off_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_bp_off cvmx_bgxx_cmrx_rx_bp_off_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_bp_on
+ */
+union cvmx_bgxx_cmrx_rx_bp_on {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_bp_on_s {
+		u64 reserved_12_63 : 52;
+		u64 mark : 12;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_bp_on_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_bp_on_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_bp_on_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_bp_on_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_bp_on cvmx_bgxx_cmrx_rx_bp_on_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_bp_status
+ */
+union cvmx_bgxx_cmrx_rx_bp_status {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_bp_status_s {
+		u64 reserved_1_63 : 63;
+		u64 bp : 1;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_bp_status_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_bp_status_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_bp_status_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_bp_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_bp_status cvmx_bgxx_cmrx_rx_bp_status_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_fifo_len
+ */
+union cvmx_bgxx_cmrx_rx_fifo_len {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_fifo_len_s {
+		u64 reserved_13_63 : 51;
+		u64 fifo_len : 13;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_fifo_len_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_fifo_len_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_fifo_len_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_fifo_len_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_fifo_len cvmx_bgxx_cmrx_rx_fifo_len_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_id_map
+ *
+ * These registers set the RX LMAC ID mapping for X2P/PKI.
+ *
+ */
+union cvmx_bgxx_cmrx_rx_id_map {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_id_map_s {
+		u64 reserved_15_63 : 49;
+		u64 rid : 7;
+		u64 pknd : 8;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_id_map_cn73xx {
+		u64 reserved_15_63 : 49;
+		u64 rid : 7;
+		u64 reserved_6_7 : 2;
+		u64 pknd : 6;
+	} cn73xx;
+	struct cvmx_bgxx_cmrx_rx_id_map_cn73xx cn78xx;
+	struct cvmx_bgxx_cmrx_rx_id_map_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_id_map_cn73xx cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_id_map cvmx_bgxx_cmrx_rx_id_map_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_logl_xoff
+ */
+union cvmx_bgxx_cmrx_rx_logl_xoff {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_logl_xoff_s {
+		u64 reserved_16_63 : 48;
+		u64 xoff : 16;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_logl_xoff_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_logl_xoff_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_logl_xoff_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_logl_xoff_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_logl_xoff cvmx_bgxx_cmrx_rx_logl_xoff_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_logl_xon
+ */
+union cvmx_bgxx_cmrx_rx_logl_xon {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_logl_xon_s {
+		u64 reserved_16_63 : 48;
+		u64 xon : 16;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_logl_xon_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_logl_xon_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_logl_xon_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_logl_xon_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_logl_xon cvmx_bgxx_cmrx_rx_logl_xon_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_pause_drop_time
+ */
+union cvmx_bgxx_cmrx_rx_pause_drop_time {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_pause_drop_time_s {
+		u64 reserved_16_63 : 48;
+		u64 pause_time : 16;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_pause_drop_time_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_pause_drop_time_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_pause_drop_time_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_pause_drop_time_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_pause_drop_time cvmx_bgxx_cmrx_rx_pause_drop_time_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_stat0
+ *
+ * These registers provide a count of received packets that meet the following conditions:
+ * * are not recognized as PAUSE packets.
+ * * are not dropped due DMAC filtering.
+ * * are not dropped due FIFO full status.
+ * * do not have any other OPCODE (FCS, Length, etc).
+ */
+union cvmx_bgxx_cmrx_rx_stat0 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_stat0_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_stat0_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_stat0_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_stat0_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_stat0_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_stat0 cvmx_bgxx_cmrx_rx_stat0_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_stat1
+ *
+ * These registers provide a count of octets of received packets.
+ *
+ */
+union cvmx_bgxx_cmrx_rx_stat1 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_stat1_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_stat1_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_stat1_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_stat1_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_stat1_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_stat1 cvmx_bgxx_cmrx_rx_stat1_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_stat2
+ *
+ * These registers provide a count of all packets received that were recognized as flow-control
+ * or PAUSE packets. PAUSE packets with any kind of error are counted in
+ * BGX()_CMR()_RX_STAT8 (error stats register). Pause packets can be optionally dropped
+ * or forwarded based on BGX()_SMU()_RX_FRM_CTL[CTL_DRP]. This count increments
+ * regardless of whether the packet is dropped. PAUSE packets are never counted in
+ * BGX()_CMR()_RX_STAT0.
+ */
+union cvmx_bgxx_cmrx_rx_stat2 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_stat2_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_stat2_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_stat2_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_stat2_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_stat2_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_stat2 cvmx_bgxx_cmrx_rx_stat2_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_stat3
+ *
+ * These registers provide a count of octets of received PAUSE and control packets.
+ *
+ */
+union cvmx_bgxx_cmrx_rx_stat3 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_stat3_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_stat3_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_stat3_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_stat3_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_stat3_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_stat3 cvmx_bgxx_cmrx_rx_stat3_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_stat4
+ *
+ * These registers provide a count of all packets received that were dropped by the DMAC filter.
+ * Packets that match the DMAC are dropped and counted here regardless of whether they were ERR
+ * packets, but does not include those reported in BGX()_CMR()_RX_STAT6. These packets
+ * are never counted in BGX()_CMR()_RX_STAT0. Eight-byte packets as the result of
+ * truncation or other means are not dropped by CNXXXX and will never appear in this count.
+ */
+union cvmx_bgxx_cmrx_rx_stat4 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_stat4_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_stat4_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_stat4_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_stat4_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_stat4_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_stat4 cvmx_bgxx_cmrx_rx_stat4_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_stat5
+ *
+ * These registers provide a count of octets of filtered DMAC packets.
+ *
+ */
+union cvmx_bgxx_cmrx_rx_stat5 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_stat5_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_stat5_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_stat5_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_stat5_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_stat5_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_stat5 cvmx_bgxx_cmrx_rx_stat5_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_stat6
+ *
+ * These registers provide a count of all packets received that were dropped due to a full
+ * receive FIFO. They do not count any packet that is truncated at the point of overflow and sent
+ * on to the PKI. These registers count all entire packets dropped by the FIFO for a given LMAC
+ * regardless of DMAC or PAUSE type.
+ */
+union cvmx_bgxx_cmrx_rx_stat6 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_stat6_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_stat6_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_stat6_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_stat6_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_stat6_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_stat6 cvmx_bgxx_cmrx_rx_stat6_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_stat7
+ *
+ * These registers provide a count of octets of received packets that were dropped due to a full
+ * receive FIFO.
+ */
+union cvmx_bgxx_cmrx_rx_stat7 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_stat7_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_stat7_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_stat7_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_stat7_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_stat7_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_stat7 cvmx_bgxx_cmrx_rx_stat7_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_stat8
+ *
+ * These registers provide a count of all packets received with some error that were not dropped
+ * either due to the DMAC filter or lack of room in the receive FIFO.
+ * This does not include packets which were counted in
+ * BGX()_CMR()_RX_STAT2, BGX()_CMR()_RX_STAT4 nor
+ * BGX()_CMR()_RX_STAT6.
+ *
+ * Which statistics are updated on control packet errors and drops are shown below:
+ *
+ * <pre>
+ * if dropped [
+ *   if !errored STAT8
+ *   if overflow STAT6
+ *   else if dmac drop STAT4
+ *   else if filter drop STAT2
+ * ] else [
+ *   if errored STAT2
+ *   else STAT8
+ * ]
+ * </pre>
+ */
+union cvmx_bgxx_cmrx_rx_stat8 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_stat8_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_stat8_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_stat8_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_stat8_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_stat8_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_stat8 cvmx_bgxx_cmrx_rx_stat8_t;
+
+/**
+ * cvmx_bgx#_cmr#_rx_weight
+ */
+union cvmx_bgxx_cmrx_rx_weight {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_rx_weight_s {
+		u64 reserved_4_63 : 60;
+		u64 weight : 4;
+	} s;
+	struct cvmx_bgxx_cmrx_rx_weight_s cn73xx;
+	struct cvmx_bgxx_cmrx_rx_weight_s cn78xx;
+	struct cvmx_bgxx_cmrx_rx_weight_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_rx_weight_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_rx_weight cvmx_bgxx_cmrx_rx_weight_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_channel
+ */
+union cvmx_bgxx_cmrx_tx_channel {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_channel_s {
+		u64 reserved_32_63 : 32;
+		u64 msk : 16;
+		u64 dis : 16;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_channel_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_channel_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_channel_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_channel_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_channel cvmx_bgxx_cmrx_tx_channel_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_fifo_len
+ */
+union cvmx_bgxx_cmrx_tx_fifo_len {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_fifo_len_s {
+		u64 reserved_14_63 : 50;
+		u64 lmac_idle : 1;
+		u64 fifo_len : 13;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_fifo_len_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_fifo_len_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_fifo_len_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_fifo_len_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_fifo_len cvmx_bgxx_cmrx_tx_fifo_len_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_hg2_status
+ */
+union cvmx_bgxx_cmrx_tx_hg2_status {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_hg2_status_s {
+		u64 reserved_32_63 : 32;
+		u64 xof : 16;
+		u64 lgtim2go : 16;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_hg2_status_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_hg2_status_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_hg2_status_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_hg2_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_hg2_status cvmx_bgxx_cmrx_tx_hg2_status_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_ovr_bp
+ */
+union cvmx_bgxx_cmrx_tx_ovr_bp {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_ovr_bp_s {
+		u64 reserved_16_63 : 48;
+		u64 tx_chan_bp : 16;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_ovr_bp_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_ovr_bp_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_ovr_bp_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_ovr_bp_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_ovr_bp cvmx_bgxx_cmrx_tx_ovr_bp_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat0
+ */
+union cvmx_bgxx_cmrx_tx_stat0 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat0_s {
+		u64 reserved_48_63 : 16;
+		u64 xscol : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat0_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat0_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat0_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat0_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat0 cvmx_bgxx_cmrx_tx_stat0_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat1
+ */
+union cvmx_bgxx_cmrx_tx_stat1 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat1_s {
+		u64 reserved_48_63 : 16;
+		u64 xsdef : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat1_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat1_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat1_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat1_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat1 cvmx_bgxx_cmrx_tx_stat1_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat10
+ */
+union cvmx_bgxx_cmrx_tx_stat10 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat10_s {
+		u64 reserved_48_63 : 16;
+		u64 hist4 : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat10_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat10_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat10_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat10_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat10 cvmx_bgxx_cmrx_tx_stat10_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat11
+ */
+union cvmx_bgxx_cmrx_tx_stat11 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat11_s {
+		u64 reserved_48_63 : 16;
+		u64 hist5 : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat11_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat11_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat11_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat11_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat11 cvmx_bgxx_cmrx_tx_stat11_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat12
+ */
+union cvmx_bgxx_cmrx_tx_stat12 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat12_s {
+		u64 reserved_48_63 : 16;
+		u64 hist6 : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat12_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat12_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat12_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat12_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat12 cvmx_bgxx_cmrx_tx_stat12_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat13
+ */
+union cvmx_bgxx_cmrx_tx_stat13 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat13_s {
+		u64 reserved_48_63 : 16;
+		u64 hist7 : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat13_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat13_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat13_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat13_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat13 cvmx_bgxx_cmrx_tx_stat13_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat14
+ */
+union cvmx_bgxx_cmrx_tx_stat14 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat14_s {
+		u64 reserved_48_63 : 16;
+		u64 bcst : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat14_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat14_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat14_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat14_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat14 cvmx_bgxx_cmrx_tx_stat14_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat15
+ */
+union cvmx_bgxx_cmrx_tx_stat15 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat15_s {
+		u64 reserved_48_63 : 16;
+		u64 mcst : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat15_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat15_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat15_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat15_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat15 cvmx_bgxx_cmrx_tx_stat15_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat16
+ */
+union cvmx_bgxx_cmrx_tx_stat16 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat16_s {
+		u64 reserved_48_63 : 16;
+		u64 undflw : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat16_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat16_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat16_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat16_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat16 cvmx_bgxx_cmrx_tx_stat16_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat17
+ */
+union cvmx_bgxx_cmrx_tx_stat17 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat17_s {
+		u64 reserved_48_63 : 16;
+		u64 ctl : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat17_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat17_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat17_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat17_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat17 cvmx_bgxx_cmrx_tx_stat17_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat2
+ */
+union cvmx_bgxx_cmrx_tx_stat2 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat2_s {
+		u64 reserved_48_63 : 16;
+		u64 mcol : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat2_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat2_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat2_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat2_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat2 cvmx_bgxx_cmrx_tx_stat2_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat3
+ */
+union cvmx_bgxx_cmrx_tx_stat3 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat3_s {
+		u64 reserved_48_63 : 16;
+		u64 scol : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat3_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat3_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat3_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat3_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat3 cvmx_bgxx_cmrx_tx_stat3_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat4
+ */
+union cvmx_bgxx_cmrx_tx_stat4 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat4_s {
+		u64 reserved_48_63 : 16;
+		u64 octs : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat4_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat4_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat4_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat4_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat4 cvmx_bgxx_cmrx_tx_stat4_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat5
+ */
+union cvmx_bgxx_cmrx_tx_stat5 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat5_s {
+		u64 reserved_48_63 : 16;
+		u64 pkts : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat5_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat5_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat5_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat5_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat5 cvmx_bgxx_cmrx_tx_stat5_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat6
+ */
+union cvmx_bgxx_cmrx_tx_stat6 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat6_s {
+		u64 reserved_48_63 : 16;
+		u64 hist0 : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat6_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat6_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat6_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat6_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat6 cvmx_bgxx_cmrx_tx_stat6_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat7
+ */
+union cvmx_bgxx_cmrx_tx_stat7 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat7_s {
+		u64 reserved_48_63 : 16;
+		u64 hist1 : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat7_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat7_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat7_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat7_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat7 cvmx_bgxx_cmrx_tx_stat7_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat8
+ */
+union cvmx_bgxx_cmrx_tx_stat8 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat8_s {
+		u64 reserved_48_63 : 16;
+		u64 hist2 : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat8_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat8_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat8_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat8_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat8 cvmx_bgxx_cmrx_tx_stat8_t;
+
+/**
+ * cvmx_bgx#_cmr#_tx_stat9
+ */
+union cvmx_bgxx_cmrx_tx_stat9 {
+	u64 u64;
+	struct cvmx_bgxx_cmrx_tx_stat9_s {
+		u64 reserved_48_63 : 16;
+		u64 hist3 : 48;
+	} s;
+	struct cvmx_bgxx_cmrx_tx_stat9_s cn73xx;
+	struct cvmx_bgxx_cmrx_tx_stat9_s cn78xx;
+	struct cvmx_bgxx_cmrx_tx_stat9_s cn78xxp1;
+	struct cvmx_bgxx_cmrx_tx_stat9_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmrx_tx_stat9 cvmx_bgxx_cmrx_tx_stat9_t;
+
+/**
+ * cvmx_bgx#_cmr_bad
+ */
+union cvmx_bgxx_cmr_bad {
+	u64 u64;
+	struct cvmx_bgxx_cmr_bad_s {
+		u64 reserved_1_63 : 63;
+		u64 rxb_nxl : 1;
+	} s;
+	struct cvmx_bgxx_cmr_bad_s cn73xx;
+	struct cvmx_bgxx_cmr_bad_s cn78xx;
+	struct cvmx_bgxx_cmr_bad_s cn78xxp1;
+	struct cvmx_bgxx_cmr_bad_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_bad cvmx_bgxx_cmr_bad_t;
+
+/**
+ * cvmx_bgx#_cmr_bist_status
+ */
+union cvmx_bgxx_cmr_bist_status {
+	u64 u64;
+	struct cvmx_bgxx_cmr_bist_status_s {
+		u64 reserved_25_63 : 39;
+		u64 status : 25;
+	} s;
+	struct cvmx_bgxx_cmr_bist_status_s cn73xx;
+	struct cvmx_bgxx_cmr_bist_status_s cn78xx;
+	struct cvmx_bgxx_cmr_bist_status_s cn78xxp1;
+	struct cvmx_bgxx_cmr_bist_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_bist_status cvmx_bgxx_cmr_bist_status_t;
+
+/**
+ * cvmx_bgx#_cmr_chan_msk_and
+ */
+union cvmx_bgxx_cmr_chan_msk_and {
+	u64 u64;
+	struct cvmx_bgxx_cmr_chan_msk_and_s {
+		u64 msk_and : 64;
+	} s;
+	struct cvmx_bgxx_cmr_chan_msk_and_s cn73xx;
+	struct cvmx_bgxx_cmr_chan_msk_and_s cn78xx;
+	struct cvmx_bgxx_cmr_chan_msk_and_s cn78xxp1;
+	struct cvmx_bgxx_cmr_chan_msk_and_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_chan_msk_and cvmx_bgxx_cmr_chan_msk_and_t;
+
+/**
+ * cvmx_bgx#_cmr_chan_msk_or
+ */
+union cvmx_bgxx_cmr_chan_msk_or {
+	u64 u64;
+	struct cvmx_bgxx_cmr_chan_msk_or_s {
+		u64 msk_or : 64;
+	} s;
+	struct cvmx_bgxx_cmr_chan_msk_or_s cn73xx;
+	struct cvmx_bgxx_cmr_chan_msk_or_s cn78xx;
+	struct cvmx_bgxx_cmr_chan_msk_or_s cn78xxp1;
+	struct cvmx_bgxx_cmr_chan_msk_or_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_chan_msk_or cvmx_bgxx_cmr_chan_msk_or_t;
+
+/**
+ * cvmx_bgx#_cmr_eco
+ */
+union cvmx_bgxx_cmr_eco {
+	u64 u64;
+	struct cvmx_bgxx_cmr_eco_s {
+		u64 eco_ro : 32;
+		u64 eco_rw : 32;
+	} s;
+	struct cvmx_bgxx_cmr_eco_s cn73xx;
+	struct cvmx_bgxx_cmr_eco_s cn78xx;
+	struct cvmx_bgxx_cmr_eco_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_eco cvmx_bgxx_cmr_eco_t;
+
+/**
+ * cvmx_bgx#_cmr_global_config
+ *
+ * These registers configure the global CMR, PCS, and MAC.
+ *
+ */
+union cvmx_bgxx_cmr_global_config {
+	u64 u64;
+	struct cvmx_bgxx_cmr_global_config_s {
+		u64 reserved_5_63 : 59;
+		u64 cmr_mix1_reset : 1;
+		u64 cmr_mix0_reset : 1;
+		u64 cmr_x2p_reset : 1;
+		u64 bgx_clk_enable : 1;
+		u64 pmux_sds_sel : 1;
+	} s;
+	struct cvmx_bgxx_cmr_global_config_s cn73xx;
+	struct cvmx_bgxx_cmr_global_config_s cn78xx;
+	struct cvmx_bgxx_cmr_global_config_s cn78xxp1;
+	struct cvmx_bgxx_cmr_global_config_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_global_config cvmx_bgxx_cmr_global_config_t;
+
+/**
+ * cvmx_bgx#_cmr_mem_ctrl
+ */
+union cvmx_bgxx_cmr_mem_ctrl {
+	u64 u64;
+	struct cvmx_bgxx_cmr_mem_ctrl_s {
+		u64 reserved_24_63 : 40;
+		u64 txb_skid_synd : 2;
+		u64 txb_skid_cor_dis : 1;
+		u64 txb_fif_bk1_syn : 2;
+		u64 txb_fif_bk1_cdis : 1;
+		u64 txb_fif_bk0_syn : 2;
+		u64 txb_fif_bk0_cdis : 1;
+		u64 rxb_skid_synd : 2;
+		u64 rxb_skid_cor_dis : 1;
+		u64 rxb_fif_bk1_syn1 : 2;
+		u64 rxb_fif_bk1_cdis1 : 1;
+		u64 rxb_fif_bk1_syn0 : 2;
+		u64 rxb_fif_bk1_cdis0 : 1;
+		u64 rxb_fif_bk0_syn1 : 2;
+		u64 rxb_fif_bk0_cdis1 : 1;
+		u64 rxb_fif_bk0_syn0 : 2;
+		u64 rxb_fif_bk0_cdis0 : 1;
+	} s;
+	struct cvmx_bgxx_cmr_mem_ctrl_s cn73xx;
+	struct cvmx_bgxx_cmr_mem_ctrl_s cn78xx;
+	struct cvmx_bgxx_cmr_mem_ctrl_s cn78xxp1;
+	struct cvmx_bgxx_cmr_mem_ctrl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_mem_ctrl cvmx_bgxx_cmr_mem_ctrl_t;
+
+/**
+ * cvmx_bgx#_cmr_mem_int
+ */
+union cvmx_bgxx_cmr_mem_int {
+	u64 u64;
+	struct cvmx_bgxx_cmr_mem_int_s {
+		u64 reserved_18_63 : 46;
+		u64 smu_in_overfl : 1;
+		u64 gmp_in_overfl : 1;
+		u64 txb_skid_sbe : 1;
+		u64 txb_skid_dbe : 1;
+		u64 txb_fif_bk1_sbe : 1;
+		u64 txb_fif_bk1_dbe : 1;
+		u64 txb_fif_bk0_sbe : 1;
+		u64 txb_fif_bk0_dbe : 1;
+		u64 rxb_skid_sbe : 1;
+		u64 rxb_skid_dbe : 1;
+		u64 rxb_fif_bk1_sbe1 : 1;
+		u64 rxb_fif_bk1_dbe1 : 1;
+		u64 rxb_fif_bk1_sbe0 : 1;
+		u64 rxb_fif_bk1_dbe0 : 1;
+		u64 rxb_fif_bk0_sbe1 : 1;
+		u64 rxb_fif_bk0_dbe1 : 1;
+		u64 rxb_fif_bk0_sbe0 : 1;
+		u64 rxb_fif_bk0_dbe0 : 1;
+	} s;
+	struct cvmx_bgxx_cmr_mem_int_s cn73xx;
+	struct cvmx_bgxx_cmr_mem_int_s cn78xx;
+	struct cvmx_bgxx_cmr_mem_int_s cn78xxp1;
+	struct cvmx_bgxx_cmr_mem_int_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_mem_int cvmx_bgxx_cmr_mem_int_t;
+
+/**
+ * cvmx_bgx#_cmr_nxc_adr
+ */
+union cvmx_bgxx_cmr_nxc_adr {
+	u64 u64;
+	struct cvmx_bgxx_cmr_nxc_adr_s {
+		u64 reserved_16_63 : 48;
+		u64 lmac_id : 4;
+		u64 channel : 12;
+	} s;
+	struct cvmx_bgxx_cmr_nxc_adr_s cn73xx;
+	struct cvmx_bgxx_cmr_nxc_adr_s cn78xx;
+	struct cvmx_bgxx_cmr_nxc_adr_s cn78xxp1;
+	struct cvmx_bgxx_cmr_nxc_adr_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_nxc_adr cvmx_bgxx_cmr_nxc_adr_t;
+
+/**
+ * cvmx_bgx#_cmr_rx_adr#_cam
+ *
+ * These registers provide access to the 32 DMAC CAM entries in BGX.
+ *
+ */
+union cvmx_bgxx_cmr_rx_adrx_cam {
+	u64 u64;
+	struct cvmx_bgxx_cmr_rx_adrx_cam_s {
+		u64 reserved_54_63 : 10;
+		u64 id : 2;
+		u64 reserved_49_51 : 3;
+		u64 en : 1;
+		u64 adr : 48;
+	} s;
+	struct cvmx_bgxx_cmr_rx_adrx_cam_s cn73xx;
+	struct cvmx_bgxx_cmr_rx_adrx_cam_s cn78xx;
+	struct cvmx_bgxx_cmr_rx_adrx_cam_s cn78xxp1;
+	struct cvmx_bgxx_cmr_rx_adrx_cam_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_rx_adrx_cam cvmx_bgxx_cmr_rx_adrx_cam_t;
+
+/**
+ * cvmx_bgx#_cmr_rx_lmacs
+ */
+union cvmx_bgxx_cmr_rx_lmacs {
+	u64 u64;
+	struct cvmx_bgxx_cmr_rx_lmacs_s {
+		u64 reserved_3_63 : 61;
+		u64 lmacs : 3;
+	} s;
+	struct cvmx_bgxx_cmr_rx_lmacs_s cn73xx;
+	struct cvmx_bgxx_cmr_rx_lmacs_s cn78xx;
+	struct cvmx_bgxx_cmr_rx_lmacs_s cn78xxp1;
+	struct cvmx_bgxx_cmr_rx_lmacs_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_rx_lmacs cvmx_bgxx_cmr_rx_lmacs_t;
+
+/**
+ * cvmx_bgx#_cmr_rx_ovr_bp
+ *
+ * BGX()_CMR_RX_OVR_BP[EN<0>] must be set to one and BGX()_CMR_RX_OVR_BP[BP<0>] must be
+ * cleared to zero (to forcibly disable hardware-automatic 802.3 PAUSE packet generation) with
+ * the HiGig2 Protocol when BGX()_SMU()_HG2_CONTROL[HG2TX_EN]=0. (The HiGig2 protocol is
+ * indicated by BGX()_SMU()_TX_CTL[HG_EN]=1 and BGX()_SMU()_RX_UDD_SKP[LEN]=16).
+ * Hardware can only auto-generate backpressure through HiGig2 messages (optionally, when
+ * BGX()_SMU()_HG2_CONTROL[HG2TX_EN]=1) with the HiGig2 protocol.
+ */
+union cvmx_bgxx_cmr_rx_ovr_bp {
+	u64 u64;
+	struct cvmx_bgxx_cmr_rx_ovr_bp_s {
+		u64 reserved_12_63 : 52;
+		u64 en : 4;
+		u64 bp : 4;
+		u64 ign_fifo_bp : 4;
+	} s;
+	struct cvmx_bgxx_cmr_rx_ovr_bp_s cn73xx;
+	struct cvmx_bgxx_cmr_rx_ovr_bp_s cn78xx;
+	struct cvmx_bgxx_cmr_rx_ovr_bp_s cn78xxp1;
+	struct cvmx_bgxx_cmr_rx_ovr_bp_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_rx_ovr_bp cvmx_bgxx_cmr_rx_ovr_bp_t;
+
+/**
+ * cvmx_bgx#_cmr_tx_lmacs
+ *
+ * This register sets the number of LMACs allowed on the TX interface. The value is important for
+ * defining the partitioning of the transmit FIFO.
+ */
+union cvmx_bgxx_cmr_tx_lmacs {
+	u64 u64;
+	struct cvmx_bgxx_cmr_tx_lmacs_s {
+		u64 reserved_3_63 : 61;
+		u64 lmacs : 3;
+	} s;
+	struct cvmx_bgxx_cmr_tx_lmacs_s cn73xx;
+	struct cvmx_bgxx_cmr_tx_lmacs_s cn78xx;
+	struct cvmx_bgxx_cmr_tx_lmacs_s cn78xxp1;
+	struct cvmx_bgxx_cmr_tx_lmacs_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_cmr_tx_lmacs cvmx_bgxx_cmr_tx_lmacs_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_prt#_cfg
+ *
+ * This register controls the configuration of the LMAC.
+ *
+ */
+union cvmx_bgxx_gmp_gmi_prtx_cfg {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_prtx_cfg_s {
+		u64 reserved_14_63 : 50;
+		u64 tx_idle : 1;
+		u64 rx_idle : 1;
+		u64 reserved_9_11 : 3;
+		u64 speed_msb : 1;
+		u64 reserved_4_7 : 4;
+		u64 slottime : 1;
+		u64 duplex : 1;
+		u64 speed : 1;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_prtx_cfg_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_prtx_cfg_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_prtx_cfg_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_prtx_cfg_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_prtx_cfg cvmx_bgxx_gmp_gmi_prtx_cfg_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_rx#_decision
+ *
+ * This register specifies the byte count used to determine when to accept or to filter a packet.
+ * As each byte in a packet is received by GMI, the L2 byte count is compared against
+ * [CNT]. In normal operation, the L2 header begins after the
+ * PREAMBLE + SFD (BGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK] = 1) and any optional UDD skip
+ * data (BGX()_GMP_GMI_RX()_UDD_SKP[LEN]).
+ */
+union cvmx_bgxx_gmp_gmi_rxx_decision {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_rxx_decision_s {
+		u64 reserved_5_63 : 59;
+		u64 cnt : 5;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_rxx_decision_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_decision_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_decision_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_rxx_decision_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_rxx_decision cvmx_bgxx_gmp_gmi_rxx_decision_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_rx#_frm_chk
+ */
+union cvmx_bgxx_gmp_gmi_rxx_frm_chk {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_rxx_frm_chk_s {
+		u64 reserved_9_63 : 55;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_rxx_frm_chk_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_frm_chk_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_frm_chk_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_rxx_frm_chk_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_rxx_frm_chk cvmx_bgxx_gmp_gmi_rxx_frm_chk_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_rx#_frm_ctl
+ *
+ * This register controls the handling of the frames.
+ * The [CTL_BCK] and [CTL_DRP] bits control how the hardware handles incoming PAUSE packets. The
+ * most
+ * common modes of operation:
+ * _ [CTL_BCK] = 1, [CTL_DRP] = 1: hardware handles everything.
+ * _ [CTL_BCK] = 0, [CTL_DRP] = 0: software sees all PAUSE frames.
+ * _ [CTL_BCK] = 0, [CTL_DRP] = 1: all PAUSE frames are completely ignored.
+ *
+ * These control bits should be set to [CTL_BCK] = 0, [CTL_DRP] = 0 in half-duplex mode. Since
+ * PAUSE
+ * packets only apply to full duplex operation, any PAUSE packet would constitute an exception
+ * which should be handled by the processing cores. PAUSE packets should not be forwarded.
+ */
+union cvmx_bgxx_gmp_gmi_rxx_frm_ctl {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_rxx_frm_ctl_s {
+		u64 reserved_13_63 : 51;
+		u64 ptp_mode : 1;
+		u64 reserved_11_11 : 1;
+		u64 null_dis : 1;
+		u64 pre_align : 1;
+		u64 reserved_7_8 : 2;
+		u64 pre_free : 1;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_rxx_frm_ctl_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_frm_ctl_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_frm_ctl_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_rxx_frm_ctl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_rxx_frm_ctl cvmx_bgxx_gmp_gmi_rxx_frm_ctl_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_rx#_ifg
+ *
+ * This register specifies the minimum number of interframe-gap (IFG) cycles between packets.
+ *
+ */
+union cvmx_bgxx_gmp_gmi_rxx_ifg {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_rxx_ifg_s {
+		u64 reserved_4_63 : 60;
+		u64 ifg : 4;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_rxx_ifg_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_ifg_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_ifg_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_rxx_ifg_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_rxx_ifg cvmx_bgxx_gmp_gmi_rxx_ifg_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_rx#_int
+ *
+ * '"These registers allow interrupts to be sent to the control processor.
+ * * Exception conditions <10:0> can also set the rcv/opcode in the received packet's work-queue
+ * entry. BGX()_GMP_GMI_RX()_FRM_CHK provides a bit mask for configuring which conditions
+ * set the error.
+ * In half duplex operation, the expectation is that collisions will appear as either MINERR or
+ * CAREXT errors.'
+ */
+union cvmx_bgxx_gmp_gmi_rxx_int {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_rxx_int_s {
+		u64 reserved_12_63 : 52;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_rxx_int_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_int_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_int_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_rxx_int_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_rxx_int cvmx_bgxx_gmp_gmi_rxx_int_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_rx#_jabber
+ *
+ * This register specifies the maximum size for packets, beyond which the GMI truncates.
+ *
+ */
+union cvmx_bgxx_gmp_gmi_rxx_jabber {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_rxx_jabber_s {
+		u64 reserved_16_63 : 48;
+		u64 cnt : 16;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_rxx_jabber_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_jabber_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_jabber_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_rxx_jabber_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_rxx_jabber cvmx_bgxx_gmp_gmi_rxx_jabber_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_rx#_udd_skp
+ *
+ * This register specifies the amount of user-defined data (UDD) added before the start of the
+ * L2C data.
+ */
+union cvmx_bgxx_gmp_gmi_rxx_udd_skp {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_rxx_udd_skp_s {
+		u64 reserved_9_63 : 55;
+		u64 fcssel : 1;
+		u64 reserved_7_7 : 1;
+		u64 len : 7;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_rxx_udd_skp_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_udd_skp_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_rxx_udd_skp_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_rxx_udd_skp_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_rxx_udd_skp cvmx_bgxx_gmp_gmi_rxx_udd_skp_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_smac#
+ */
+union cvmx_bgxx_gmp_gmi_smacx {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_smacx_s {
+		u64 reserved_48_63 : 16;
+		u64 smac : 48;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_smacx_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_smacx_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_smacx_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_smacx_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_smacx cvmx_bgxx_gmp_gmi_smacx_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_append
+ */
+union cvmx_bgxx_gmp_gmi_txx_append {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_append_s {
+		u64 reserved_4_63 : 60;
+		u64 force_fcs : 1;
+		u64 fcs : 1;
+		u64 pad : 1;
+		u64 preamble : 1;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_append_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_append_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_append_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_append_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_append cvmx_bgxx_gmp_gmi_txx_append_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_burst
+ */
+union cvmx_bgxx_gmp_gmi_txx_burst {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_burst_s {
+		u64 reserved_16_63 : 48;
+		u64 burst : 16;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_burst_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_burst_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_burst_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_burst_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_burst cvmx_bgxx_gmp_gmi_txx_burst_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_ctl
+ */
+union cvmx_bgxx_gmp_gmi_txx_ctl {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_ctl_s {
+		u64 reserved_2_63 : 62;
+		u64 xsdef_en : 1;
+		u64 xscol_en : 1;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_ctl_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_ctl_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_ctl_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_ctl cvmx_bgxx_gmp_gmi_txx_ctl_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_int
+ */
+union cvmx_bgxx_gmp_gmi_txx_int {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_int_s {
+		u64 reserved_5_63 : 59;
+		u64 ptp_lost : 1;
+		u64 late_col : 1;
+		u64 xsdef : 1;
+		u64 xscol : 1;
+		u64 undflw : 1;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_int_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_int_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_int_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_int_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_int cvmx_bgxx_gmp_gmi_txx_int_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_min_pkt
+ */
+union cvmx_bgxx_gmp_gmi_txx_min_pkt {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_min_pkt_s {
+		u64 reserved_8_63 : 56;
+		u64 min_size : 8;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_min_pkt_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_min_pkt_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_min_pkt_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_min_pkt_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_min_pkt cvmx_bgxx_gmp_gmi_txx_min_pkt_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_pause_pkt_interval
+ *
+ * This register specifies how often PAUSE packets are sent.
+ *
+ */
+union cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_s {
+		u64 reserved_16_63 : 48;
+		u64 interval : 16;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_pause_pkt_time
+ */
+union cvmx_bgxx_gmp_gmi_txx_pause_pkt_time {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_s {
+		u64 reserved_16_63 : 48;
+		u64 ptime : 16;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_pause_pkt_time cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_pause_togo
+ */
+union cvmx_bgxx_gmp_gmi_txx_pause_togo {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_togo_s {
+		u64 reserved_16_63 : 48;
+		u64 ptime : 16;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_togo_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_togo_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_togo_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_togo_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_pause_togo cvmx_bgxx_gmp_gmi_txx_pause_togo_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_pause_zero
+ */
+union cvmx_bgxx_gmp_gmi_txx_pause_zero {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_zero_s {
+		u64 reserved_1_63 : 63;
+		u64 send : 1;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_zero_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_zero_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_zero_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_pause_zero_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_pause_zero cvmx_bgxx_gmp_gmi_txx_pause_zero_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_sgmii_ctl
+ */
+union cvmx_bgxx_gmp_gmi_txx_sgmii_ctl {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_s {
+		u64 reserved_1_63 : 63;
+		u64 align : 1;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_sgmii_ctl cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_slot
+ */
+union cvmx_bgxx_gmp_gmi_txx_slot {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_slot_s {
+		u64 reserved_10_63 : 54;
+		u64 slot : 10;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_slot_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_slot_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_slot_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_slot_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_slot cvmx_bgxx_gmp_gmi_txx_slot_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_soft_pause
+ */
+union cvmx_bgxx_gmp_gmi_txx_soft_pause {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_soft_pause_s {
+		u64 reserved_16_63 : 48;
+		u64 ptime : 16;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_soft_pause_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_soft_pause_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_soft_pause_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_soft_pause_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_soft_pause cvmx_bgxx_gmp_gmi_txx_soft_pause_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx#_thresh
+ */
+union cvmx_bgxx_gmp_gmi_txx_thresh {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_txx_thresh_s {
+		u64 reserved_11_63 : 53;
+		u64 cnt : 11;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_txx_thresh_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_txx_thresh_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_txx_thresh_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_txx_thresh_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_txx_thresh cvmx_bgxx_gmp_gmi_txx_thresh_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx_col_attempt
+ */
+union cvmx_bgxx_gmp_gmi_tx_col_attempt {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_tx_col_attempt_s {
+		u64 reserved_5_63 : 59;
+		u64 limit : 5;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_tx_col_attempt_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_tx_col_attempt_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_tx_col_attempt_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_tx_col_attempt_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_tx_col_attempt cvmx_bgxx_gmp_gmi_tx_col_attempt_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx_ifg
+ *
+ * Consider the following when programming IFG1 and IFG2:
+ * * For 10/100/1000 Mb/s half-duplex systems that require IEEE 802.3 compatibility, IFG1 must be
+ * in the range of 1-8, IFG2 must be in the range of 4-12, and the IFG1 + IFG2 sum must be 12.
+ * * For 10/100/1000 Mb/s full-duplex systems that require IEEE 802.3 compatibility, IFG1 must be
+ * in the range of 1-11, IFG2 must be in the range of 1-11, and the IFG1 + IFG2 sum must be 12.
+ * For all other systems, IFG1 and IFG2 can be any value in the range of 1-15, allowing for a
+ * total possible IFG sum of 2-30.
+ */
+union cvmx_bgxx_gmp_gmi_tx_ifg {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_tx_ifg_s {
+		u64 reserved_8_63 : 56;
+		u64 ifg2 : 4;
+		u64 ifg1 : 4;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_tx_ifg_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_tx_ifg_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_tx_ifg_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_tx_ifg_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_tx_ifg cvmx_bgxx_gmp_gmi_tx_ifg_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx_jam
+ *
+ * This register provides the pattern used in JAM bytes.
+ *
+ */
+union cvmx_bgxx_gmp_gmi_tx_jam {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_tx_jam_s {
+		u64 reserved_8_63 : 56;
+		u64 jam : 8;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_tx_jam_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_tx_jam_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_tx_jam_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_tx_jam_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_tx_jam cvmx_bgxx_gmp_gmi_tx_jam_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx_lfsr
+ *
+ * This register shows the contents of the linear feedback shift register (LFSR), which is used
+ * to implement truncated binary exponential backoff.
+ */
+union cvmx_bgxx_gmp_gmi_tx_lfsr {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_tx_lfsr_s {
+		u64 reserved_16_63 : 48;
+		u64 lfsr : 16;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_tx_lfsr_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_tx_lfsr_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_tx_lfsr_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_tx_lfsr_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_tx_lfsr cvmx_bgxx_gmp_gmi_tx_lfsr_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx_pause_pkt_dmac
+ */
+union cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_s {
+		u64 reserved_48_63 : 16;
+		u64 dmac : 48;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_t;
+
+/**
+ * cvmx_bgx#_gmp_gmi_tx_pause_pkt_type
+ *
+ * This register provides the PTYPE field that is placed in outbound PAUSE packets.
+ *
+ */
+union cvmx_bgxx_gmp_gmi_tx_pause_pkt_type {
+	u64 u64;
+	struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_s {
+		u64 reserved_16_63 : 48;
+		u64 ptype : 16;
+	} s;
+	struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_s cn73xx;
+	struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_s cn78xx;
+	struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_s cn78xxp1;
+	struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_gmi_tx_pause_pkt_type cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_an#_adv
+ */
+union cvmx_bgxx_gmp_pcs_anx_adv {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_anx_adv_s {
+		u64 reserved_16_63 : 48;
+		u64 np : 1;
+		u64 reserved_14_14 : 1;
+		u64 rem_flt : 2;
+		u64 reserved_9_11 : 3;
+		u64 pause : 2;
+		u64 hfd : 1;
+		u64 fd : 1;
+		u64 reserved_0_4 : 5;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_anx_adv_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_anx_adv_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_anx_adv_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_anx_adv_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_anx_adv cvmx_bgxx_gmp_pcs_anx_adv_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_an#_ext_st
+ */
+union cvmx_bgxx_gmp_pcs_anx_ext_st {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_anx_ext_st_s {
+		u64 reserved_16_63 : 48;
+		u64 thou_xfd : 1;
+		u64 thou_xhd : 1;
+		u64 thou_tfd : 1;
+		u64 thou_thd : 1;
+		u64 reserved_0_11 : 12;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_anx_ext_st_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_anx_ext_st_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_anx_ext_st_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_anx_ext_st_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_anx_ext_st cvmx_bgxx_gmp_pcs_anx_ext_st_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_an#_lp_abil
+ *
+ * This is the autonegotiation link partner ability register 5 as per IEEE 802.3, Clause 37.
+ *
+ */
+union cvmx_bgxx_gmp_pcs_anx_lp_abil {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_anx_lp_abil_s {
+		u64 reserved_16_63 : 48;
+		u64 np : 1;
+		u64 ack : 1;
+		u64 rem_flt : 2;
+		u64 reserved_9_11 : 3;
+		u64 pause : 2;
+		u64 hfd : 1;
+		u64 fd : 1;
+		u64 reserved_0_4 : 5;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_anx_lp_abil_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_anx_lp_abil_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_anx_lp_abil_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_anx_lp_abil_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_anx_lp_abil cvmx_bgxx_gmp_pcs_anx_lp_abil_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_an#_results
+ *
+ * This register is not valid when BGX()_GMP_PCS_MISC()_CTL[AN_OVRD] is set to 1. If
+ * BGX()_GMP_PCS_MISC()_CTL[AN_OVRD] is set to 0 and
+ * BGX()_GMP_PCS_AN()_RESULTS[AN_CPT] is set to 1, this register is valid.
+ */
+union cvmx_bgxx_gmp_pcs_anx_results {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_anx_results_s {
+		u64 reserved_7_63 : 57;
+		u64 pause : 2;
+		u64 spd : 2;
+		u64 an_cpt : 1;
+		u64 dup : 1;
+		u64 link_ok : 1;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_anx_results_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_anx_results_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_anx_results_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_anx_results_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_anx_results cvmx_bgxx_gmp_pcs_anx_results_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_int#
+ */
+union cvmx_bgxx_gmp_pcs_intx {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_intx_s {
+		u64 reserved_13_63 : 51;
+		u64 dbg_sync : 1;
+		u64 dup : 1;
+		u64 sync_bad : 1;
+		u64 an_bad : 1;
+		u64 rxlock : 1;
+		u64 rxbad : 1;
+		u64 rxerr : 1;
+		u64 txbad : 1;
+		u64 txfifo : 1;
+		u64 txfifu : 1;
+		u64 an_err : 1;
+		u64 xmit : 1;
+		u64 lnkspd : 1;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_intx_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_intx_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_intx_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_intx_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_intx cvmx_bgxx_gmp_pcs_intx_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_link#_timer
+ *
+ * This is the 1.6 ms nominal link timer register.
+ *
+ */
+union cvmx_bgxx_gmp_pcs_linkx_timer {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_linkx_timer_s {
+		u64 reserved_16_63 : 48;
+		u64 count : 16;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_linkx_timer_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_linkx_timer_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_linkx_timer_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_linkx_timer_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_linkx_timer cvmx_bgxx_gmp_pcs_linkx_timer_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_misc#_ctl
+ */
+union cvmx_bgxx_gmp_pcs_miscx_ctl {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_miscx_ctl_s {
+		u64 reserved_13_63 : 51;
+		u64 sgmii : 1;
+		u64 gmxeno : 1;
+		u64 loopbck2 : 1;
+		u64 mac_phy : 1;
+		u64 mode : 1;
+		u64 an_ovrd : 1;
+		u64 samp_pt : 7;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_miscx_ctl_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_miscx_ctl_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_miscx_ctl_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_miscx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_miscx_ctl cvmx_bgxx_gmp_pcs_miscx_ctl_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_mr#_control
+ */
+union cvmx_bgxx_gmp_pcs_mrx_control {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_mrx_control_s {
+		u64 reserved_16_63 : 48;
+		u64 reset : 1;
+		u64 loopbck1 : 1;
+		u64 spdlsb : 1;
+		u64 an_en : 1;
+		u64 pwr_dn : 1;
+		u64 reserved_10_10 : 1;
+		u64 rst_an : 1;
+		u64 dup : 1;
+		u64 coltst : 1;
+		u64 spdmsb : 1;
+		u64 uni : 1;
+		u64 reserved_0_4 : 5;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_mrx_control_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_mrx_control_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_mrx_control_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_mrx_control_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_mrx_control cvmx_bgxx_gmp_pcs_mrx_control_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_mr#_status
+ *
+ * Bits <15:9> in this register indicate the ability to operate when
+ * BGX()_GMP_PCS_MISC()_CTL[MAC_PHY] is set to MAC mode. Bits <15:9> are always read as
+ * 0, indicating that the chip cannot operate in the corresponding modes. The field [RM_FLT] is a
+ * 'don't care' when the selected mode is SGMII.
+ */
+union cvmx_bgxx_gmp_pcs_mrx_status {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_mrx_status_s {
+		u64 reserved_16_63 : 48;
+		u64 hun_t4 : 1;
+		u64 hun_xfd : 1;
+		u64 hun_xhd : 1;
+		u64 ten_fd : 1;
+		u64 ten_hd : 1;
+		u64 hun_t2fd : 1;
+		u64 hun_t2hd : 1;
+		u64 ext_st : 1;
+		u64 reserved_7_7 : 1;
+		u64 prb_sup : 1;
+		u64 an_cpt : 1;
+		u64 rm_flt : 1;
+		u64 an_abil : 1;
+		u64 lnk_st : 1;
+		u64 reserved_1_1 : 1;
+		u64 extnd : 1;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_mrx_status_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_mrx_status_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_mrx_status_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_mrx_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_mrx_status cvmx_bgxx_gmp_pcs_mrx_status_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_rx#_states
+ */
+union cvmx_bgxx_gmp_pcs_rxx_states {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_rxx_states_s {
+		u64 reserved_16_63 : 48;
+		u64 rx_bad : 1;
+		u64 rx_st : 5;
+		u64 sync_bad : 1;
+		u64 sync : 4;
+		u64 an_bad : 1;
+		u64 an_st : 4;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_rxx_states_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_rxx_states_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_rxx_states_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_rxx_states_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_rxx_states cvmx_bgxx_gmp_pcs_rxx_states_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_rx#_sync
+ */
+union cvmx_bgxx_gmp_pcs_rxx_sync {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_rxx_sync_s {
+		u64 reserved_2_63 : 62;
+		u64 sync : 1;
+		u64 bit_lock : 1;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_rxx_sync_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_rxx_sync_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_rxx_sync_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_rxx_sync_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_rxx_sync cvmx_bgxx_gmp_pcs_rxx_sync_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_sgm#_an_adv
+ *
+ * This is the SGMII autonegotiation advertisement register (sent out as tx_Config_Reg<15:0> as
+ * defined in IEEE 802.3 clause 37). This register is sent during autonegotiation if
+ * BGX()_GMP_PCS_MISC()_CTL[MAC_PHY] is set (1 = PHY mode). If the bit is not set (0 =
+ * MAC mode), then tx_Config_Reg<14> becomes ACK bit and tx_Config_Reg<0> is always 1. All other
+ * bits in tx_Config_Reg sent will be 0. The PHY dictates the autonegotiation results.
+ */
+union cvmx_bgxx_gmp_pcs_sgmx_an_adv {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_sgmx_an_adv_s {
+		u64 reserved_16_63 : 48;
+		u64 link : 1;
+		u64 ack : 1;
+		u64 reserved_13_13 : 1;
+		u64 dup : 1;
+		u64 speed : 2;
+		u64 reserved_1_9 : 9;
+		u64 one : 1;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_sgmx_an_adv_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_sgmx_an_adv_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_sgmx_an_adv_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_sgmx_an_adv_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_sgmx_an_adv cvmx_bgxx_gmp_pcs_sgmx_an_adv_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_sgm#_lp_adv
+ *
+ * This is the SGMII link partner advertisement register (received as rx_Config_Reg<15:0> as
+ * defined in IEEE 802.3 clause 37).
+ */
+union cvmx_bgxx_gmp_pcs_sgmx_lp_adv {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_sgmx_lp_adv_s {
+		u64 reserved_16_63 : 48;
+		u64 link : 1;
+		u64 reserved_13_14 : 2;
+		u64 dup : 1;
+		u64 speed : 2;
+		u64 reserved_1_9 : 9;
+		u64 one : 1;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_sgmx_lp_adv_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_sgmx_lp_adv_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_sgmx_lp_adv_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_sgmx_lp_adv_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_sgmx_lp_adv cvmx_bgxx_gmp_pcs_sgmx_lp_adv_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_tx#_states
+ */
+union cvmx_bgxx_gmp_pcs_txx_states {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_txx_states_s {
+		u64 reserved_7_63 : 57;
+		u64 xmit : 2;
+		u64 tx_bad : 1;
+		u64 ord_st : 4;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_txx_states_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_txx_states_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_txx_states_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_txx_states_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_txx_states cvmx_bgxx_gmp_pcs_txx_states_t;
+
+/**
+ * cvmx_bgx#_gmp_pcs_tx_rx#_polarity
+ *
+ * BGX()_GMP_PCS_TX_RX()_POLARITY[AUTORXPL] shows correct polarity needed on the link
+ * receive path after code group synchronization is achieved.
+ */
+union cvmx_bgxx_gmp_pcs_tx_rxx_polarity {
+	u64 u64;
+	struct cvmx_bgxx_gmp_pcs_tx_rxx_polarity_s {
+		u64 reserved_4_63 : 60;
+		u64 rxovrd : 1;
+		u64 autorxpl : 1;
+		u64 rxplrt : 1;
+		u64 txplrt : 1;
+	} s;
+	struct cvmx_bgxx_gmp_pcs_tx_rxx_polarity_s cn73xx;
+	struct cvmx_bgxx_gmp_pcs_tx_rxx_polarity_s cn78xx;
+	struct cvmx_bgxx_gmp_pcs_tx_rxx_polarity_s cn78xxp1;
+	struct cvmx_bgxx_gmp_pcs_tx_rxx_polarity_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_gmp_pcs_tx_rxx_polarity cvmx_bgxx_gmp_pcs_tx_rxx_polarity_t;
+
+/**
+ * cvmx_bgx#_smu#_cbfc_ctl
+ */
+union cvmx_bgxx_smux_cbfc_ctl {
+	u64 u64;
+	struct cvmx_bgxx_smux_cbfc_ctl_s {
+		u64 phys_en : 16;
+		u64 logl_en : 16;
+		u64 reserved_4_31 : 28;
+		u64 bck_en : 1;
+		u64 drp_en : 1;
+		u64 tx_en : 1;
+		u64 rx_en : 1;
+	} s;
+	struct cvmx_bgxx_smux_cbfc_ctl_s cn73xx;
+	struct cvmx_bgxx_smux_cbfc_ctl_s cn78xx;
+	struct cvmx_bgxx_smux_cbfc_ctl_s cn78xxp1;
+	struct cvmx_bgxx_smux_cbfc_ctl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_cbfc_ctl cvmx_bgxx_smux_cbfc_ctl_t;
+
+/**
+ * cvmx_bgx#_smu#_ctrl
+ */
+union cvmx_bgxx_smux_ctrl {
+	u64 u64;
+	struct cvmx_bgxx_smux_ctrl_s {
+		u64 reserved_2_63 : 62;
+		u64 tx_idle : 1;
+		u64 rx_idle : 1;
+	} s;
+	struct cvmx_bgxx_smux_ctrl_s cn73xx;
+	struct cvmx_bgxx_smux_ctrl_s cn78xx;
+	struct cvmx_bgxx_smux_ctrl_s cn78xxp1;
+	struct cvmx_bgxx_smux_ctrl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_ctrl cvmx_bgxx_smux_ctrl_t;
+
+/**
+ * cvmx_bgx#_smu#_ext_loopback
+ *
+ * In loopback mode, the IFG1+IFG2 of local and remote parties must match exactly; otherwise one
+ * of the two sides' loopback FIFO will overrun: BGX()_SMU()_TX_INT[LB_OVRFLW].
+ */
+union cvmx_bgxx_smux_ext_loopback {
+	u64 u64;
+	struct cvmx_bgxx_smux_ext_loopback_s {
+		u64 reserved_5_63 : 59;
+		u64 en : 1;
+		u64 thresh : 4;
+	} s;
+	struct cvmx_bgxx_smux_ext_loopback_s cn73xx;
+	struct cvmx_bgxx_smux_ext_loopback_s cn78xx;
+	struct cvmx_bgxx_smux_ext_loopback_s cn78xxp1;
+	struct cvmx_bgxx_smux_ext_loopback_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_ext_loopback cvmx_bgxx_smux_ext_loopback_t;
+
+/**
+ * cvmx_bgx#_smu#_hg2_control
+ *
+ * HiGig2 TX- and RX-enable are normally set together for HiGig2 messaging. Setting just the TX
+ * or RX bit results in only the HG2 message transmit or receive capability.
+ *
+ * Setting [PHYS_EN] and [LOGL_EN] to 1 allows link PAUSE or backpressure to PKO as per the
+ * received HiGig2 message. Setting these fields to 0 disables link PAUSE and backpressure to PKO
+ * in response to received messages.
+ *
+ * BGX()_SMU()_TX_CTL[HG_EN] must be set (to enable HiGig) whenever either [HG2TX_EN] or
+ * [HG2RX_EN] are set. BGX()_SMU()_RX_UDD_SKP[LEN] must be set to 16 (to select HiGig2)
+ * whenever either [HG2TX_EN] or [HG2RX_EN] are set.
+ *
+ * BGX()_CMR_RX_OVR_BP[EN]<0> must be set and BGX()_CMR_RX_OVR_BP[BP]<0> must be cleared
+ * to 0 (to forcibly disable hardware-automatic 802.3 PAUSE packet generation) with the HiGig2
+ * Protocol when [HG2TX_EN] = 0. (The HiGig2 protocol is indicated
+ * by BGX()_SMU()_TX_CTL[HG_EN] = 1 and BGX()_SMU()_RX_UDD_SKP[LEN]=16.) Hardware
+ * can only autogenerate backpressure via HiGig2 messages (optionally, when [HG2TX_EN] = 1) with
+ * the HiGig2 protocol.
+ */
+union cvmx_bgxx_smux_hg2_control {
+	u64 u64;
+	struct cvmx_bgxx_smux_hg2_control_s {
+		u64 reserved_19_63 : 45;
+		u64 hg2tx_en : 1;
+		u64 hg2rx_en : 1;
+		u64 phys_en : 1;
+		u64 logl_en : 16;
+	} s;
+	struct cvmx_bgxx_smux_hg2_control_s cn73xx;
+	struct cvmx_bgxx_smux_hg2_control_s cn78xx;
+	struct cvmx_bgxx_smux_hg2_control_s cn78xxp1;
+	struct cvmx_bgxx_smux_hg2_control_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_hg2_control cvmx_bgxx_smux_hg2_control_t;
+
+/**
+ * cvmx_bgx#_smu#_rx_bad_col_hi
+ */
+union cvmx_bgxx_smux_rx_bad_col_hi {
+	u64 u64;
+	struct cvmx_bgxx_smux_rx_bad_col_hi_s {
+		u64 reserved_17_63 : 47;
+		u64 val : 1;
+		u64 state : 8;
+		u64 lane_rxc : 8;
+	} s;
+	struct cvmx_bgxx_smux_rx_bad_col_hi_s cn73xx;
+	struct cvmx_bgxx_smux_rx_bad_col_hi_s cn78xx;
+	struct cvmx_bgxx_smux_rx_bad_col_hi_s cn78xxp1;
+	struct cvmx_bgxx_smux_rx_bad_col_hi_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_rx_bad_col_hi cvmx_bgxx_smux_rx_bad_col_hi_t;
+
+/**
+ * cvmx_bgx#_smu#_rx_bad_col_lo
+ */
+union cvmx_bgxx_smux_rx_bad_col_lo {
+	u64 u64;
+	struct cvmx_bgxx_smux_rx_bad_col_lo_s {
+		u64 lane_rxd : 64;
+	} s;
+	struct cvmx_bgxx_smux_rx_bad_col_lo_s cn73xx;
+	struct cvmx_bgxx_smux_rx_bad_col_lo_s cn78xx;
+	struct cvmx_bgxx_smux_rx_bad_col_lo_s cn78xxp1;
+	struct cvmx_bgxx_smux_rx_bad_col_lo_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_rx_bad_col_lo cvmx_bgxx_smux_rx_bad_col_lo_t;
+
+/**
+ * cvmx_bgx#_smu#_rx_ctl
+ */
+union cvmx_bgxx_smux_rx_ctl {
+	u64 u64;
+	struct cvmx_bgxx_smux_rx_ctl_s {
+		u64 reserved_2_63 : 62;
+		u64 status : 2;
+	} s;
+	struct cvmx_bgxx_smux_rx_ctl_s cn73xx;
+	struct cvmx_bgxx_smux_rx_ctl_s cn78xx;
+	struct cvmx_bgxx_smux_rx_ctl_s cn78xxp1;
+	struct cvmx_bgxx_smux_rx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_rx_ctl cvmx_bgxx_smux_rx_ctl_t;
+
+/**
+ * cvmx_bgx#_smu#_rx_decision
+ *
+ * This register specifies the byte count used to determine when to accept or to filter a packet.
+ * As each byte in a packet is received by BGX, the L2 byte count (i.e. the number of bytes from
+ * the beginning of the L2 header (DMAC)) is compared against CNT. In normal operation, the L2
+ * header begins after the PREAMBLE + SFD (BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 1) and any
+ * optional UDD skip data (BGX()_SMU()_RX_UDD_SKP[LEN]).
+ */
+union cvmx_bgxx_smux_rx_decision {
+	u64 u64;
+	struct cvmx_bgxx_smux_rx_decision_s {
+		u64 reserved_5_63 : 59;
+		u64 cnt : 5;
+	} s;
+	struct cvmx_bgxx_smux_rx_decision_s cn73xx;
+	struct cvmx_bgxx_smux_rx_decision_s cn78xx;
+	struct cvmx_bgxx_smux_rx_decision_s cn78xxp1;
+	struct cvmx_bgxx_smux_rx_decision_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_rx_decision cvmx_bgxx_smux_rx_decision_t;
+
+/**
+ * cvmx_bgx#_smu#_rx_frm_chk
+ *
+ * The CSRs provide the enable bits for a subset of errors passed to CMR encoded.
+ *
+ */
+union cvmx_bgxx_smux_rx_frm_chk {
+	u64 u64;
+	struct cvmx_bgxx_smux_rx_frm_chk_s {
+		u64 reserved_9_63 : 55;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_6_6 : 1;
+		u64 fcserr_c : 1;
+		u64 fcserr_d : 1;
+		u64 jabber : 1;
+		u64 reserved_0_2 : 3;
+	} s;
+	struct cvmx_bgxx_smux_rx_frm_chk_s cn73xx;
+	struct cvmx_bgxx_smux_rx_frm_chk_s cn78xx;
+	struct cvmx_bgxx_smux_rx_frm_chk_s cn78xxp1;
+	struct cvmx_bgxx_smux_rx_frm_chk_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_rx_frm_chk cvmx_bgxx_smux_rx_frm_chk_t;
+
+/**
+ * cvmx_bgx#_smu#_rx_frm_ctl
+ *
+ * This register controls the handling of the frames.
+ * The [CTL_BCK] and [CTL_DRP] bits control how the hardware handles incoming PAUSE packets. The
+ * most
+ * common modes of operation:
+ * _ [CTL_BCK] = 1, [CTL_DRP] = 1: hardware handles everything
+ * _ [CTL_BCK] = 0, [CTL_DRP] = 0: software sees all PAUSE frames
+ * _ [CTL_BCK] = 0, [CTL_DRP] = 1: all PAUSE frames are completely ignored
+ *
+ * These control bits should be set to [CTL_BCK] = 0, [CTL_DRP] = 0 in half-duplex mode. Since
+ * PAUSE
+ * packets only apply to full duplex operation, any PAUSE packet would constitute an exception
+ * which should be handled by the processing cores. PAUSE packets should not be forwarded.
+ */
+union cvmx_bgxx_smux_rx_frm_ctl {
+	u64 u64;
+	struct cvmx_bgxx_smux_rx_frm_ctl_s {
+		u64 reserved_13_63 : 51;
+		u64 ptp_mode : 1;
+		u64 reserved_6_11 : 6;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} s;
+	struct cvmx_bgxx_smux_rx_frm_ctl_s cn73xx;
+	struct cvmx_bgxx_smux_rx_frm_ctl_s cn78xx;
+	struct cvmx_bgxx_smux_rx_frm_ctl_s cn78xxp1;
+	struct cvmx_bgxx_smux_rx_frm_ctl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_rx_frm_ctl cvmx_bgxx_smux_rx_frm_ctl_t;
+
+/**
+ * cvmx_bgx#_smu#_rx_int
+ *
+ * SMU Interrupt Register.
+ *
+ */
+union cvmx_bgxx_smux_rx_int {
+	u64 u64;
+	struct cvmx_bgxx_smux_rx_int_s {
+		u64 reserved_12_63 : 52;
+		u64 hg2cc : 1;
+		u64 hg2fld : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+	} s;
+	struct cvmx_bgxx_smux_rx_int_s cn73xx;
+	struct cvmx_bgxx_smux_rx_int_s cn78xx;
+	struct cvmx_bgxx_smux_rx_int_s cn78xxp1;
+	struct cvmx_bgxx_smux_rx_int_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_rx_int cvmx_bgxx_smux_rx_int_t;
+
+/**
+ * cvmx_bgx#_smu#_rx_jabber
+ *
+ * This register specifies the maximum size for packets, beyond which the SMU truncates. In
+ * XAUI/RXAUI mode, port 0 is used for checking.
+ */
+union cvmx_bgxx_smux_rx_jabber {
+	u64 u64;
+	struct cvmx_bgxx_smux_rx_jabber_s {
+		u64 reserved_16_63 : 48;
+		u64 cnt : 16;
+	} s;
+	struct cvmx_bgxx_smux_rx_jabber_s cn73xx;
+	struct cvmx_bgxx_smux_rx_jabber_s cn78xx;
+	struct cvmx_bgxx_smux_rx_jabber_s cn78xxp1;
+	struct cvmx_bgxx_smux_rx_jabber_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_rx_jabber cvmx_bgxx_smux_rx_jabber_t;
+
+/**
+ * cvmx_bgx#_smu#_rx_udd_skp
+ *
+ * This register specifies the amount of user-defined data (UDD) added before the start of the
+ * L2C data.
+ */
+union cvmx_bgxx_smux_rx_udd_skp {
+	u64 u64;
+	struct cvmx_bgxx_smux_rx_udd_skp_s {
+		u64 reserved_9_63 : 55;
+		u64 fcssel : 1;
+		u64 reserved_7_7 : 1;
+		u64 len : 7;
+	} s;
+	struct cvmx_bgxx_smux_rx_udd_skp_s cn73xx;
+	struct cvmx_bgxx_smux_rx_udd_skp_s cn78xx;
+	struct cvmx_bgxx_smux_rx_udd_skp_s cn78xxp1;
+	struct cvmx_bgxx_smux_rx_udd_skp_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_rx_udd_skp cvmx_bgxx_smux_rx_udd_skp_t;
+
+/**
+ * cvmx_bgx#_smu#_smac
+ */
+union cvmx_bgxx_smux_smac {
+	u64 u64;
+	struct cvmx_bgxx_smux_smac_s {
+		u64 reserved_48_63 : 16;
+		u64 smac : 48;
+	} s;
+	struct cvmx_bgxx_smux_smac_s cn73xx;
+	struct cvmx_bgxx_smux_smac_s cn78xx;
+	struct cvmx_bgxx_smux_smac_s cn78xxp1;
+	struct cvmx_bgxx_smux_smac_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_smac cvmx_bgxx_smux_smac_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_append
+ *
+ * For more details on the interactions between FCS and PAD, see also the description of
+ * BGX()_SMU()_TX_MIN_PKT[MIN_SIZE].
+ */
+union cvmx_bgxx_smux_tx_append {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_append_s {
+		u64 reserved_4_63 : 60;
+		u64 fcs_c : 1;
+		u64 fcs_d : 1;
+		u64 pad : 1;
+		u64 preamble : 1;
+	} s;
+	struct cvmx_bgxx_smux_tx_append_s cn73xx;
+	struct cvmx_bgxx_smux_tx_append_s cn78xx;
+	struct cvmx_bgxx_smux_tx_append_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_append_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_append cvmx_bgxx_smux_tx_append_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_ctl
+ */
+union cvmx_bgxx_smux_tx_ctl {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_ctl_s {
+		u64 reserved_31_63 : 33;
+		u64 spu_mrk_cnt : 20;
+		u64 hg_pause_hgi : 2;
+		u64 hg_en : 1;
+		u64 l2p_bp_conv : 1;
+		u64 ls_byp : 1;
+		u64 ls : 2;
+		u64 reserved_3_3 : 1;
+		u64 x4a_dis : 1;
+		u64 uni_en : 1;
+		u64 dic_en : 1;
+	} s;
+	struct cvmx_bgxx_smux_tx_ctl_s cn73xx;
+	struct cvmx_bgxx_smux_tx_ctl_s cn78xx;
+	struct cvmx_bgxx_smux_tx_ctl_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_ctl cvmx_bgxx_smux_tx_ctl_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_ifg
+ *
+ * Programming IFG1 and IFG2:
+ * * For XAUI/RXAUI/10Gbs/40Gbs systems that require IEEE 802.3 compatibility, the IFG1+IFG2 sum
+ * must be 12.
+ * * In loopback mode, the IFG1+IFG2 of local and remote parties must match exactly; otherwise
+ * one of the two sides' loopback FIFO will overrun: BGX()_SMU()_TX_INT[LB_OVRFLW].
+ */
+union cvmx_bgxx_smux_tx_ifg {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_ifg_s {
+		u64 reserved_8_63 : 56;
+		u64 ifg2 : 4;
+		u64 ifg1 : 4;
+	} s;
+	struct cvmx_bgxx_smux_tx_ifg_s cn73xx;
+	struct cvmx_bgxx_smux_tx_ifg_s cn78xx;
+	struct cvmx_bgxx_smux_tx_ifg_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_ifg_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_ifg cvmx_bgxx_smux_tx_ifg_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_int
+ */
+union cvmx_bgxx_smux_tx_int {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_int_s {
+		u64 reserved_5_63 : 59;
+		u64 lb_ovrflw : 1;
+		u64 lb_undflw : 1;
+		u64 fake_commit : 1;
+		u64 xchange : 1;
+		u64 undflw : 1;
+	} s;
+	struct cvmx_bgxx_smux_tx_int_s cn73xx;
+	struct cvmx_bgxx_smux_tx_int_s cn78xx;
+	struct cvmx_bgxx_smux_tx_int_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_int_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_int cvmx_bgxx_smux_tx_int_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_min_pkt
+ */
+union cvmx_bgxx_smux_tx_min_pkt {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_min_pkt_s {
+		u64 reserved_8_63 : 56;
+		u64 min_size : 8;
+	} s;
+	struct cvmx_bgxx_smux_tx_min_pkt_s cn73xx;
+	struct cvmx_bgxx_smux_tx_min_pkt_s cn78xx;
+	struct cvmx_bgxx_smux_tx_min_pkt_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_min_pkt_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_min_pkt cvmx_bgxx_smux_tx_min_pkt_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_pause_pkt_dmac
+ *
+ * This register provides the DMAC value that is placed in outbound PAUSE packets.
+ *
+ */
+union cvmx_bgxx_smux_tx_pause_pkt_dmac {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_pause_pkt_dmac_s {
+		u64 reserved_48_63 : 16;
+		u64 dmac : 48;
+	} s;
+	struct cvmx_bgxx_smux_tx_pause_pkt_dmac_s cn73xx;
+	struct cvmx_bgxx_smux_tx_pause_pkt_dmac_s cn78xx;
+	struct cvmx_bgxx_smux_tx_pause_pkt_dmac_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_pause_pkt_dmac_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_pause_pkt_dmac cvmx_bgxx_smux_tx_pause_pkt_dmac_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_pause_pkt_interval
+ *
+ * This register specifies how often PAUSE packets are sent.
+ *
+ */
+union cvmx_bgxx_smux_tx_pause_pkt_interval {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_pause_pkt_interval_s {
+		u64 reserved_33_63 : 31;
+		u64 hg2_intra_en : 1;
+		u64 hg2_intra_interval : 16;
+		u64 interval : 16;
+	} s;
+	struct cvmx_bgxx_smux_tx_pause_pkt_interval_s cn73xx;
+	struct cvmx_bgxx_smux_tx_pause_pkt_interval_s cn78xx;
+	struct cvmx_bgxx_smux_tx_pause_pkt_interval_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_pause_pkt_interval_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_pause_pkt_interval cvmx_bgxx_smux_tx_pause_pkt_interval_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_pause_pkt_time
+ */
+union cvmx_bgxx_smux_tx_pause_pkt_time {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_pause_pkt_time_s {
+		u64 reserved_16_63 : 48;
+		u64 p_time : 16;
+	} s;
+	struct cvmx_bgxx_smux_tx_pause_pkt_time_s cn73xx;
+	struct cvmx_bgxx_smux_tx_pause_pkt_time_s cn78xx;
+	struct cvmx_bgxx_smux_tx_pause_pkt_time_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_pause_pkt_time_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_pause_pkt_time cvmx_bgxx_smux_tx_pause_pkt_time_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_pause_pkt_type
+ *
+ * This register provides the P_TYPE field that is placed in outbound PAUSE packets.
+ *
+ */
+union cvmx_bgxx_smux_tx_pause_pkt_type {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_pause_pkt_type_s {
+		u64 reserved_16_63 : 48;
+		u64 p_type : 16;
+	} s;
+	struct cvmx_bgxx_smux_tx_pause_pkt_type_s cn73xx;
+	struct cvmx_bgxx_smux_tx_pause_pkt_type_s cn78xx;
+	struct cvmx_bgxx_smux_tx_pause_pkt_type_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_pause_pkt_type_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_pause_pkt_type cvmx_bgxx_smux_tx_pause_pkt_type_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_pause_togo
+ */
+union cvmx_bgxx_smux_tx_pause_togo {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_pause_togo_s {
+		u64 reserved_32_63 : 32;
+		u64 msg_time : 16;
+		u64 p_time : 16;
+	} s;
+	struct cvmx_bgxx_smux_tx_pause_togo_s cn73xx;
+	struct cvmx_bgxx_smux_tx_pause_togo_s cn78xx;
+	struct cvmx_bgxx_smux_tx_pause_togo_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_pause_togo_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_pause_togo cvmx_bgxx_smux_tx_pause_togo_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_pause_zero
+ */
+union cvmx_bgxx_smux_tx_pause_zero {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_pause_zero_s {
+		u64 reserved_1_63 : 63;
+		u64 send : 1;
+	} s;
+	struct cvmx_bgxx_smux_tx_pause_zero_s cn73xx;
+	struct cvmx_bgxx_smux_tx_pause_zero_s cn78xx;
+	struct cvmx_bgxx_smux_tx_pause_zero_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_pause_zero_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_pause_zero cvmx_bgxx_smux_tx_pause_zero_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_soft_pause
+ */
+union cvmx_bgxx_smux_tx_soft_pause {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_soft_pause_s {
+		u64 reserved_16_63 : 48;
+		u64 p_time : 16;
+	} s;
+	struct cvmx_bgxx_smux_tx_soft_pause_s cn73xx;
+	struct cvmx_bgxx_smux_tx_soft_pause_s cn78xx;
+	struct cvmx_bgxx_smux_tx_soft_pause_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_soft_pause_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_soft_pause cvmx_bgxx_smux_tx_soft_pause_t;
+
+/**
+ * cvmx_bgx#_smu#_tx_thresh
+ */
+union cvmx_bgxx_smux_tx_thresh {
+	u64 u64;
+	struct cvmx_bgxx_smux_tx_thresh_s {
+		u64 reserved_11_63 : 53;
+		u64 cnt : 11;
+	} s;
+	struct cvmx_bgxx_smux_tx_thresh_s cn73xx;
+	struct cvmx_bgxx_smux_tx_thresh_s cn78xx;
+	struct cvmx_bgxx_smux_tx_thresh_s cn78xxp1;
+	struct cvmx_bgxx_smux_tx_thresh_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_smux_tx_thresh cvmx_bgxx_smux_tx_thresh_t;
+
+/**
+ * cvmx_bgx#_spu#_an_adv
+ *
+ * Software programs this register with the contents of the AN-link code word base page to be
+ * transmitted during autonegotiation. (See IEEE 802.3 section 73.6 for details.) Any write
+ * operations to this register prior to completion of autonegotiation, as indicated by
+ * BGX()_SPU()_AN_STATUS[AN_COMPLETE], should be followed by a renegotiation in order for
+ * the new values to take effect. Renegotiation is initiated by setting
+ * BGX()_SPU()_AN_CONTROL[AN_RESTART]. Once autonegotiation has completed, software can
+ * examine this register along with BGX()_SPU()_AN_LP_BASE to determine the highest
+ * common denominator technology.
+ */
+union cvmx_bgxx_spux_an_adv {
+	u64 u64;
+	struct cvmx_bgxx_spux_an_adv_s {
+		u64 reserved_48_63 : 16;
+		u64 fec_req : 1;
+		u64 fec_able : 1;
+		u64 arsv : 19;
+		u64 a100g_cr10 : 1;
+		u64 a40g_cr4 : 1;
+		u64 a40g_kr4 : 1;
+		u64 a10g_kr : 1;
+		u64 a10g_kx4 : 1;
+		u64 a1g_kx : 1;
+		u64 t : 5;
+		u64 np : 1;
+		u64 ack : 1;
+		u64 rf : 1;
+		u64 xnp_able : 1;
+		u64 asm_dir : 1;
+		u64 pause : 1;
+		u64 e : 5;
+		u64 s : 5;
+	} s;
+	struct cvmx_bgxx_spux_an_adv_s cn73xx;
+	struct cvmx_bgxx_spux_an_adv_s cn78xx;
+	struct cvmx_bgxx_spux_an_adv_s cn78xxp1;
+	struct cvmx_bgxx_spux_an_adv_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_an_adv cvmx_bgxx_spux_an_adv_t;
+
+/**
+ * cvmx_bgx#_spu#_an_bp_status
+ *
+ * The contents of this register are updated
+ * during autonegotiation and are valid when BGX()_SPU()_AN_STATUS[AN_COMPLETE] is set.
+ * At that time, one of the port type bits ([N100G_CR10], [N40G_CR4], [N40G_KR4], [N10G_KR],
+ * [N10G_KX4],
+ * [N1G_KX]) will be set depending on the AN priority resolution. If a BASE-R type is negotiated,
+ * then [FEC] will be set to indicate that FEC operation has been negotiated, and will be
+ * clear otherwise.
+ */
+union cvmx_bgxx_spux_an_bp_status {
+	u64 u64;
+	struct cvmx_bgxx_spux_an_bp_status_s {
+		u64 reserved_9_63 : 55;
+		u64 n100g_cr10 : 1;
+		u64 reserved_7_7 : 1;
+		u64 n40g_cr4 : 1;
+		u64 n40g_kr4 : 1;
+		u64 fec : 1;
+		u64 n10g_kr : 1;
+		u64 n10g_kx4 : 1;
+		u64 n1g_kx : 1;
+		u64 bp_an_able : 1;
+	} s;
+	struct cvmx_bgxx_spux_an_bp_status_s cn73xx;
+	struct cvmx_bgxx_spux_an_bp_status_s cn78xx;
+	struct cvmx_bgxx_spux_an_bp_status_s cn78xxp1;
+	struct cvmx_bgxx_spux_an_bp_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_an_bp_status cvmx_bgxx_spux_an_bp_status_t;
+
+/**
+ * cvmx_bgx#_spu#_an_control
+ */
+union cvmx_bgxx_spux_an_control {
+	u64 u64;
+	struct cvmx_bgxx_spux_an_control_s {
+		u64 reserved_16_63 : 48;
+		u64 an_reset : 1;
+		u64 reserved_14_14 : 1;
+		u64 xnp_en : 1;
+		u64 an_en : 1;
+		u64 reserved_10_11 : 2;
+		u64 an_restart : 1;
+		u64 reserved_0_8 : 9;
+	} s;
+	struct cvmx_bgxx_spux_an_control_s cn73xx;
+	struct cvmx_bgxx_spux_an_control_s cn78xx;
+	struct cvmx_bgxx_spux_an_control_s cn78xxp1;
+	struct cvmx_bgxx_spux_an_control_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_an_control cvmx_bgxx_spux_an_control_t;
+
+/**
+ * cvmx_bgx#_spu#_an_lp_base
+ *
+ * This register captures the contents of the latest AN link code word base page received from
+ * the link partner during autonegotiation. (See IEEE 802.3 section 73.6 for details.)
+ * BGX()_SPU()_AN_STATUS[PAGE_RX] is set when this register is updated by hardware.
+ */
+union cvmx_bgxx_spux_an_lp_base {
+	u64 u64;
+	struct cvmx_bgxx_spux_an_lp_base_s {
+		u64 reserved_48_63 : 16;
+		u64 fec_req : 1;
+		u64 fec_able : 1;
+		u64 arsv : 19;
+		u64 a100g_cr10 : 1;
+		u64 a40g_cr4 : 1;
+		u64 a40g_kr4 : 1;
+		u64 a10g_kr : 1;
+		u64 a10g_kx4 : 1;
+		u64 a1g_kx : 1;
+		u64 t : 5;
+		u64 np : 1;
+		u64 ack : 1;
+		u64 rf : 1;
+		u64 xnp_able : 1;
+		u64 asm_dir : 1;
+		u64 pause : 1;
+		u64 e : 5;
+		u64 s : 5;
+	} s;
+	struct cvmx_bgxx_spux_an_lp_base_s cn73xx;
+	struct cvmx_bgxx_spux_an_lp_base_s cn78xx;
+	struct cvmx_bgxx_spux_an_lp_base_s cn78xxp1;
+	struct cvmx_bgxx_spux_an_lp_base_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_an_lp_base cvmx_bgxx_spux_an_lp_base_t;
+
+/**
+ * cvmx_bgx#_spu#_an_lp_xnp
+ *
+ * This register captures the contents of the latest next page code word received from the link
+ * partner during autonegotiation, if any. See section 802.3 section 73.7.7 for details.
+ */
+union cvmx_bgxx_spux_an_lp_xnp {
+	u64 u64;
+	struct cvmx_bgxx_spux_an_lp_xnp_s {
+		u64 reserved_48_63 : 16;
+		u64 u : 32;
+		u64 np : 1;
+		u64 ack : 1;
+		u64 mp : 1;
+		u64 ack2 : 1;
+		u64 toggle : 1;
+		u64 m_u : 11;
+	} s;
+	struct cvmx_bgxx_spux_an_lp_xnp_s cn73xx;
+	struct cvmx_bgxx_spux_an_lp_xnp_s cn78xx;
+	struct cvmx_bgxx_spux_an_lp_xnp_s cn78xxp1;
+	struct cvmx_bgxx_spux_an_lp_xnp_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_an_lp_xnp cvmx_bgxx_spux_an_lp_xnp_t;
+
+/**
+ * cvmx_bgx#_spu#_an_status
+ */
+union cvmx_bgxx_spux_an_status {
+	u64 u64;
+	struct cvmx_bgxx_spux_an_status_s {
+		u64 reserved_10_63 : 54;
+		u64 prl_flt : 1;
+		u64 reserved_8_8 : 1;
+		u64 xnp_stat : 1;
+		u64 page_rx : 1;
+		u64 an_complete : 1;
+		u64 rmt_flt : 1;
+		u64 an_able : 1;
+		u64 link_status : 1;
+		u64 reserved_1_1 : 1;
+		u64 lp_an_able : 1;
+	} s;
+	struct cvmx_bgxx_spux_an_status_s cn73xx;
+	struct cvmx_bgxx_spux_an_status_s cn78xx;
+	struct cvmx_bgxx_spux_an_status_s cn78xxp1;
+	struct cvmx_bgxx_spux_an_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_an_status cvmx_bgxx_spux_an_status_t;
+
+/**
+ * cvmx_bgx#_spu#_an_xnp_tx
+ *
+ * Software programs this register with the contents of the AN message next page or unformatted
+ * next page link code word to be transmitted during autonegotiation. Next page exchange occurs
+ * after the base link code words have been exchanged if either end of the link segment sets the
+ * NP bit to 1, indicating that it has at least one next page to send. Once initiated, next page
+ * exchange continues until both ends of the link segment set their NP bits to 0. See section
+ * 802.3 section 73.7.7 for details.
+ */
+union cvmx_bgxx_spux_an_xnp_tx {
+	u64 u64;
+	struct cvmx_bgxx_spux_an_xnp_tx_s {
+		u64 reserved_48_63 : 16;
+		u64 u : 32;
+		u64 np : 1;
+		u64 ack : 1;
+		u64 mp : 1;
+		u64 ack2 : 1;
+		u64 toggle : 1;
+		u64 m_u : 11;
+	} s;
+	struct cvmx_bgxx_spux_an_xnp_tx_s cn73xx;
+	struct cvmx_bgxx_spux_an_xnp_tx_s cn78xx;
+	struct cvmx_bgxx_spux_an_xnp_tx_s cn78xxp1;
+	struct cvmx_bgxx_spux_an_xnp_tx_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_an_xnp_tx cvmx_bgxx_spux_an_xnp_tx_t;
+
+/**
+ * cvmx_bgx#_spu#_br_algn_status
+ *
+ * This register implements the IEEE 802.3 multilane BASE-R PCS alignment status 1-4 registers
+ * (3.50-3.53). It is valid only when the LPCS type is 40GBASE-R
+ * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), and always returns 0x0 for all other LPCS
+ * types. IEEE 802.3 bits that are not applicable to 40GBASE-R (e.g. status bits for PCS lanes
+ * 19-4) are not implemented and marked as reserved. PCS lanes 3-0 are valid and are mapped to
+ * physical SerDes lanes based on the programming of BGX()_CMR()_CONFIG[LANE_TO_SDS].
+ */
+union cvmx_bgxx_spux_br_algn_status {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_algn_status_s {
+		u64 reserved_36_63 : 28;
+		u64 marker_lock : 4;
+		u64 reserved_13_31 : 19;
+		u64 alignd : 1;
+		u64 reserved_4_11 : 8;
+		u64 block_lock : 4;
+	} s;
+	struct cvmx_bgxx_spux_br_algn_status_s cn73xx;
+	struct cvmx_bgxx_spux_br_algn_status_s cn78xx;
+	struct cvmx_bgxx_spux_br_algn_status_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_algn_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_algn_status cvmx_bgxx_spux_br_algn_status_t;
+
+/**
+ * cvmx_bgx#_spu#_br_bip_err_cnt
+ *
+ * This register implements the IEEE 802.3 BIP error-counter registers for PCS lanes 0-3
+ * (3.200-3.203). It is valid only when the LPCS type is 40GBASE-R
+ * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), and always returns 0x0 for all other LPCS
+ * types. The counters are indexed by the RX PCS lane number based on the Alignment Marker
+ * detected on each lane and captured in BGX()_SPU()_BR_LANE_MAP. Each counter counts the
+ * BIP errors for its PCS lane, and is held at all ones in case of overflow. The counters are
+ * reset to all 0s when this register is read by software.
+ *
+ * The reset operation takes precedence over the increment operation; if the register is read on
+ * the same clock cycle as an increment operation, the counter is reset to all 0s and the
+ * increment operation is lost. The counters are writable for test purposes, rather than read-
+ * only as specified in IEEE 802.3.
+ */
+union cvmx_bgxx_spux_br_bip_err_cnt {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_bip_err_cnt_s {
+		u64 bip_err_cnt_ln3 : 16;
+		u64 bip_err_cnt_ln2 : 16;
+		u64 bip_err_cnt_ln1 : 16;
+		u64 bip_err_cnt_ln0 : 16;
+	} s;
+	struct cvmx_bgxx_spux_br_bip_err_cnt_s cn73xx;
+	struct cvmx_bgxx_spux_br_bip_err_cnt_s cn78xx;
+	struct cvmx_bgxx_spux_br_bip_err_cnt_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_bip_err_cnt_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_bip_err_cnt cvmx_bgxx_spux_br_bip_err_cnt_t;
+
+/**
+ * cvmx_bgx#_spu#_br_lane_map
+ *
+ * This register implements the IEEE 802.3 lane 0-3 mapping registers (3.400-3.403). It is valid
+ * only when the LPCS type is 40GBASE-R (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), and always
+ * returns 0x0 for all other LPCS types. The LNx_MAPPING field for each programmed PCS lane
+ * (called service interface in 802.3ba-2010) is valid when that lane has achieved alignment
+ * marker lock on the receive side (i.e. the associated
+ * BGX()_SPU()_BR_ALGN_STATUS[MARKER_LOCK] = 1), and is invalid otherwise. When valid, it
+ * returns the actual detected receive PCS lane number based on the received alignment marker
+ * contents received on that service interface.
+ *
+ * The mapping is flexible because IEEE 802.3 allows multilane BASE-R receive lanes to be re-
+ * ordered. Note that for the transmit side, each PCS lane is mapped to a physical SerDes lane
+ * based on the programming of BGX()_CMR()_CONFIG[LANE_TO_SDS]. For the receive side,
+ * BGX()_CMR()_CONFIG[LANE_TO_SDS] specifies the service interface to physical SerDes
+ * lane mapping, and this register specifies the service interface to PCS lane mapping.
+ */
+union cvmx_bgxx_spux_br_lane_map {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_lane_map_s {
+		u64 reserved_54_63 : 10;
+		u64 ln3_mapping : 6;
+		u64 reserved_38_47 : 10;
+		u64 ln2_mapping : 6;
+		u64 reserved_22_31 : 10;
+		u64 ln1_mapping : 6;
+		u64 reserved_6_15 : 10;
+		u64 ln0_mapping : 6;
+	} s;
+	struct cvmx_bgxx_spux_br_lane_map_s cn73xx;
+	struct cvmx_bgxx_spux_br_lane_map_s cn78xx;
+	struct cvmx_bgxx_spux_br_lane_map_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_lane_map_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_lane_map cvmx_bgxx_spux_br_lane_map_t;
+
+/**
+ * cvmx_bgx#_spu#_br_pmd_control
+ */
+union cvmx_bgxx_spux_br_pmd_control {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_pmd_control_s {
+		u64 reserved_2_63 : 62;
+		u64 train_en : 1;
+		u64 train_restart : 1;
+	} s;
+	struct cvmx_bgxx_spux_br_pmd_control_s cn73xx;
+	struct cvmx_bgxx_spux_br_pmd_control_s cn78xx;
+	struct cvmx_bgxx_spux_br_pmd_control_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_pmd_control_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_pmd_control cvmx_bgxx_spux_br_pmd_control_t;
+
+/**
+ * cvmx_bgx#_spu#_br_pmd_ld_cup
+ *
+ * This register implements 802.3 MDIO register 1.153 for 10GBASE-R (when
+ * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R)
+ * and MDIO registers 1.1300-1.1303 for 40GBASE-R (when
+ * BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of training.
+ * When link training
+ * is in progress, each field reflects the contents of the coefficient update field in the
+ * associated lane's outgoing training frame. The fields in this register are read/write even
+ * though they are specified as read-only in 802.3.
+ *
+ * If BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is set, then this register must be updated
+ * by software during link training and hardware updates are disabled. If
+ * BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is clear, this register is automatically
+ * updated by hardware, and it should not be written by software. The lane fields in this
+ * register are indexed by logical PCS lane ID.
+ *
+ * The lane 0 field (LN0_*) is valid for both
+ * 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*, LN3_*) are only valid for
+ * 40GBASE-R.
+ */
+union cvmx_bgxx_spux_br_pmd_ld_cup {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_pmd_ld_cup_s {
+		u64 ln3_cup : 16;
+		u64 ln2_cup : 16;
+		u64 ln1_cup : 16;
+		u64 ln0_cup : 16;
+	} s;
+	struct cvmx_bgxx_spux_br_pmd_ld_cup_s cn73xx;
+	struct cvmx_bgxx_spux_br_pmd_ld_cup_s cn78xx;
+	struct cvmx_bgxx_spux_br_pmd_ld_cup_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_pmd_ld_cup_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_pmd_ld_cup cvmx_bgxx_spux_br_pmd_ld_cup_t;
+
+/**
+ * cvmx_bgx#_spu#_br_pmd_ld_rep
+ *
+ * This register implements 802.3 MDIO register 1.154 for 10GBASE-R (when
+ * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R) and MDIO registers 1.1400-1.1403 for 40GBASE-R
+ * (when BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of
+ * training. Each field
+ * reflects the contents of the status report field in the associated lane's outgoing training
+ * frame. The fields in this register are read/write even though they are specified as read-only
+ * in 802.3. If BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is set, then this register must
+ * be updated by software during link training and hardware updates are disabled. If
+ * BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is clear, this register is automatically
+ * updated by hardware, and it should not be written by software. The lane fields in this
+ * register are indexed by logical PCS lane ID.
+ *
+ * The lane 0 field (LN0_*) is valid for both
+ * 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*, LN3_*) are only valid for
+ * 40GBASE-R.
+ */
+union cvmx_bgxx_spux_br_pmd_ld_rep {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_pmd_ld_rep_s {
+		u64 ln3_rep : 16;
+		u64 ln2_rep : 16;
+		u64 ln1_rep : 16;
+		u64 ln0_rep : 16;
+	} s;
+	struct cvmx_bgxx_spux_br_pmd_ld_rep_s cn73xx;
+	struct cvmx_bgxx_spux_br_pmd_ld_rep_s cn78xx;
+	struct cvmx_bgxx_spux_br_pmd_ld_rep_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_pmd_ld_rep_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_pmd_ld_rep cvmx_bgxx_spux_br_pmd_ld_rep_t;
+
+/**
+ * cvmx_bgx#_spu#_br_pmd_lp_cup
+ *
+ * This register implements 802.3 MDIO register 1.152 for 10GBASE-R (when
+ * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R)
+ * and MDIO registers 1.1100-1.1103 for 40GBASE-R (when
+ * BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of training.
+ * Each field reflects
+ * the contents of the coefficient update field in the lane's most recently received training
+ * frame. This register should not be written when link training is enabled, i.e. when
+ * BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is set. The lane fields in this register are indexed by
+ * logical PCS lane ID.
+ *
+ * The lane 0 field (LN0_*) is valid for both 10GBASE-R and 40GBASE-R. The remaining fields
+ * (LN1_*, LN2_*, LN3_*) are only valid for 40GBASE-R.
+ */
+union cvmx_bgxx_spux_br_pmd_lp_cup {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_pmd_lp_cup_s {
+		u64 ln3_cup : 16;
+		u64 ln2_cup : 16;
+		u64 ln1_cup : 16;
+		u64 ln0_cup : 16;
+	} s;
+	struct cvmx_bgxx_spux_br_pmd_lp_cup_s cn73xx;
+	struct cvmx_bgxx_spux_br_pmd_lp_cup_s cn78xx;
+	struct cvmx_bgxx_spux_br_pmd_lp_cup_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_pmd_lp_cup_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_pmd_lp_cup cvmx_bgxx_spux_br_pmd_lp_cup_t;
+
+/**
+ * cvmx_bgx#_spu#_br_pmd_lp_rep
+ *
+ * This register implements 802.3 MDIO register 1.153 for 10GBASE-R (when
+ * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R)
+ * and MDIO registers 1.1200-1.1203 for 40GBASE-R (when
+ * BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of training.
+ * Each field reflects
+ * the contents of the status report field in the associated lane's most recently received
+ * training frame. The lane fields in this register are indexed by logical PCS lane ID.
+ *
+ * The lane
+ * 0 field (LN0_*) is valid for both 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*,
+ * LN3_*) are only valid for 40GBASE-R.
+ */
+union cvmx_bgxx_spux_br_pmd_lp_rep {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_pmd_lp_rep_s {
+		u64 ln3_rep : 16;
+		u64 ln2_rep : 16;
+		u64 ln1_rep : 16;
+		u64 ln0_rep : 16;
+	} s;
+	struct cvmx_bgxx_spux_br_pmd_lp_rep_s cn73xx;
+	struct cvmx_bgxx_spux_br_pmd_lp_rep_s cn78xx;
+	struct cvmx_bgxx_spux_br_pmd_lp_rep_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_pmd_lp_rep_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_pmd_lp_rep cvmx_bgxx_spux_br_pmd_lp_rep_t;
+
+/**
+ * cvmx_bgx#_spu#_br_pmd_status
+ *
+ * The lane fields in this register are indexed by logical PCS lane ID. The lane 0 field (LN0_*)
+ * is valid for both 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*, LN3_*) are only
+ * valid for 40GBASE-R.
+ */
+union cvmx_bgxx_spux_br_pmd_status {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_pmd_status_s {
+		u64 reserved_16_63 : 48;
+		u64 ln3_train_status : 4;
+		u64 ln2_train_status : 4;
+		u64 ln1_train_status : 4;
+		u64 ln0_train_status : 4;
+	} s;
+	struct cvmx_bgxx_spux_br_pmd_status_s cn73xx;
+	struct cvmx_bgxx_spux_br_pmd_status_s cn78xx;
+	struct cvmx_bgxx_spux_br_pmd_status_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_pmd_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_pmd_status cvmx_bgxx_spux_br_pmd_status_t;
+
+/**
+ * cvmx_bgx#_spu#_br_status1
+ */
+union cvmx_bgxx_spux_br_status1 {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_status1_s {
+		u64 reserved_13_63 : 51;
+		u64 rcv_lnk : 1;
+		u64 reserved_4_11 : 8;
+		u64 prbs9 : 1;
+		u64 prbs31 : 1;
+		u64 hi_ber : 1;
+		u64 blk_lock : 1;
+	} s;
+	struct cvmx_bgxx_spux_br_status1_s cn73xx;
+	struct cvmx_bgxx_spux_br_status1_s cn78xx;
+	struct cvmx_bgxx_spux_br_status1_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_status1_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_status1 cvmx_bgxx_spux_br_status1_t;
+
+/**
+ * cvmx_bgx#_spu#_br_status2
+ *
+ * This register implements a combination of the following IEEE 802.3 registers:
+ * * BASE-R PCS status 2 (MDIO address 3.33).
+ * * BASE-R BER high-order counter (MDIO address 3.44).
+ * * Errored-blocks high-order counter (MDIO address 3.45).
+ *
+ * Note that the relative locations of some fields have been moved from IEEE 802.3 in order to
+ * make the register layout more software friendly: the BER counter high-order and low-order bits
+ * from sections 3.44 and 3.33 have been combined into the contiguous, 22-bit [BER_CNT] field;
+ * likewise, the errored-blocks counter high-order and low-order bits from section 3.45 have been
+ * combined into the contiguous, 22-bit [ERR_BLKS] field.
+ */
+union cvmx_bgxx_spux_br_status2 {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_status2_s {
+		u64 reserved_62_63 : 2;
+		u64 err_blks : 22;
+		u64 reserved_38_39 : 2;
+		u64 ber_cnt : 22;
+		u64 latched_lock : 1;
+		u64 latched_ber : 1;
+		u64 reserved_0_13 : 14;
+	} s;
+	struct cvmx_bgxx_spux_br_status2_s cn73xx;
+	struct cvmx_bgxx_spux_br_status2_s cn78xx;
+	struct cvmx_bgxx_spux_br_status2_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_status2_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_status2 cvmx_bgxx_spux_br_status2_t;
+
+/**
+ * cvmx_bgx#_spu#_br_tp_control
+ *
+ * Refer to the test pattern methodology described in 802.3 sections 49.2.8 and 82.2.10.
+ *
+ */
+union cvmx_bgxx_spux_br_tp_control {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_tp_control_s {
+		u64 reserved_8_63 : 56;
+		u64 scramble_tp : 1;
+		u64 prbs9_tx : 1;
+		u64 prbs31_rx : 1;
+		u64 prbs31_tx : 1;
+		u64 tx_tp_en : 1;
+		u64 rx_tp_en : 1;
+		u64 tp_sel : 1;
+		u64 dp_sel : 1;
+	} s;
+	struct cvmx_bgxx_spux_br_tp_control_s cn73xx;
+	struct cvmx_bgxx_spux_br_tp_control_s cn78xx;
+	struct cvmx_bgxx_spux_br_tp_control_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_tp_control_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_tp_control cvmx_bgxx_spux_br_tp_control_t;
+
+/**
+ * cvmx_bgx#_spu#_br_tp_err_cnt
+ *
+ * This register provides the BASE-R PCS test-pattern error counter.
+ *
+ */
+union cvmx_bgxx_spux_br_tp_err_cnt {
+	u64 u64;
+	struct cvmx_bgxx_spux_br_tp_err_cnt_s {
+		u64 reserved_16_63 : 48;
+		u64 err_cnt : 16;
+	} s;
+	struct cvmx_bgxx_spux_br_tp_err_cnt_s cn73xx;
+	struct cvmx_bgxx_spux_br_tp_err_cnt_s cn78xx;
+	struct cvmx_bgxx_spux_br_tp_err_cnt_s cn78xxp1;
+	struct cvmx_bgxx_spux_br_tp_err_cnt_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_br_tp_err_cnt cvmx_bgxx_spux_br_tp_err_cnt_t;
+
+/**
+ * cvmx_bgx#_spu#_bx_status
+ */
+union cvmx_bgxx_spux_bx_status {
+	u64 u64;
+	struct cvmx_bgxx_spux_bx_status_s {
+		u64 reserved_13_63 : 51;
+		u64 alignd : 1;
+		u64 pattst : 1;
+		u64 reserved_4_10 : 7;
+		u64 lsync : 4;
+	} s;
+	struct cvmx_bgxx_spux_bx_status_s cn73xx;
+	struct cvmx_bgxx_spux_bx_status_s cn78xx;
+	struct cvmx_bgxx_spux_bx_status_s cn78xxp1;
+	struct cvmx_bgxx_spux_bx_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_bx_status cvmx_bgxx_spux_bx_status_t;
+
+/**
+ * cvmx_bgx#_spu#_control1
+ */
+union cvmx_bgxx_spux_control1 {
+	u64 u64;
+	struct cvmx_bgxx_spux_control1_s {
+		u64 reserved_16_63 : 48;
+		u64 reset : 1;
+		u64 loopbck : 1;
+		u64 spdsel1 : 1;
+		u64 reserved_12_12 : 1;
+		u64 lo_pwr : 1;
+		u64 reserved_7_10 : 4;
+		u64 spdsel0 : 1;
+		u64 spd : 4;
+		u64 reserved_0_1 : 2;
+	} s;
+	struct cvmx_bgxx_spux_control1_s cn73xx;
+	struct cvmx_bgxx_spux_control1_s cn78xx;
+	struct cvmx_bgxx_spux_control1_s cn78xxp1;
+	struct cvmx_bgxx_spux_control1_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_control1 cvmx_bgxx_spux_control1_t;
+
+/**
+ * cvmx_bgx#_spu#_control2
+ */
+union cvmx_bgxx_spux_control2 {
+	u64 u64;
+	struct cvmx_bgxx_spux_control2_s {
+		u64 reserved_3_63 : 61;
+		u64 pcs_type : 3;
+	} s;
+	struct cvmx_bgxx_spux_control2_s cn73xx;
+	struct cvmx_bgxx_spux_control2_s cn78xx;
+	struct cvmx_bgxx_spux_control2_s cn78xxp1;
+	struct cvmx_bgxx_spux_control2_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_control2 cvmx_bgxx_spux_control2_t;
+
+/**
+ * cvmx_bgx#_spu#_fec_abil
+ */
+union cvmx_bgxx_spux_fec_abil {
+	u64 u64;
+	struct cvmx_bgxx_spux_fec_abil_s {
+		u64 reserved_2_63 : 62;
+		u64 err_abil : 1;
+		u64 fec_abil : 1;
+	} s;
+	struct cvmx_bgxx_spux_fec_abil_s cn73xx;
+	struct cvmx_bgxx_spux_fec_abil_s cn78xx;
+	struct cvmx_bgxx_spux_fec_abil_s cn78xxp1;
+	struct cvmx_bgxx_spux_fec_abil_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_fec_abil cvmx_bgxx_spux_fec_abil_t;
+
+/**
+ * cvmx_bgx#_spu#_fec_control
+ */
+union cvmx_bgxx_spux_fec_control {
+	u64 u64;
+	struct cvmx_bgxx_spux_fec_control_s {
+		u64 reserved_2_63 : 62;
+		u64 err_en : 1;
+		u64 fec_en : 1;
+	} s;
+	struct cvmx_bgxx_spux_fec_control_s cn73xx;
+	struct cvmx_bgxx_spux_fec_control_s cn78xx;
+	struct cvmx_bgxx_spux_fec_control_s cn78xxp1;
+	struct cvmx_bgxx_spux_fec_control_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_fec_control cvmx_bgxx_spux_fec_control_t;
+
+/**
+ * cvmx_bgx#_spu#_fec_corr_blks01
+ *
+ * This register is valid only when the LPCS type is BASE-R
+ * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x3 or 0x4). The FEC corrected-block counters are
+ * defined in IEEE 802.3 section 74.8.4.1. Each corrected-blocks counter increments by 1 for a
+ * corrected FEC block, i.e. an FEC block that has been received with invalid parity on the
+ * associated PCS lane and has been corrected by the FEC decoder. The counter is reset to all 0s
+ * when the register is read, and held at all 1s in case of overflow.
+ *
+ * The reset operation takes precedence over the increment operation; if the register is read on
+ * the same clock cycle as an increment operation, the counter is reset to all 0s and the
+ * increment operation is lost. The counters are writable for test purposes, rather than read-
+ * only as specified in IEEE 802.3.
+ */
+union cvmx_bgxx_spux_fec_corr_blks01 {
+	u64 u64;
+	struct cvmx_bgxx_spux_fec_corr_blks01_s {
+		u64 ln1_corr_blks : 32;
+		u64 ln0_corr_blks : 32;
+	} s;
+	struct cvmx_bgxx_spux_fec_corr_blks01_s cn73xx;
+	struct cvmx_bgxx_spux_fec_corr_blks01_s cn78xx;
+	struct cvmx_bgxx_spux_fec_corr_blks01_s cn78xxp1;
+	struct cvmx_bgxx_spux_fec_corr_blks01_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_fec_corr_blks01 cvmx_bgxx_spux_fec_corr_blks01_t;
+
+/**
+ * cvmx_bgx#_spu#_fec_corr_blks23
+ *
+ * This register is valid only when the LPCS type is 40GBASE-R
+ * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4). The FEC corrected-block counters are defined in
+ * IEEE 802.3 section 74.8.4.1. Each corrected-blocks counter increments by 1 for a corrected FEC
+ * block, i.e. an FEC block that has been received with invalid parity on the associated PCS lane
+ * and has been corrected by the FEC decoder. The counter is reset to all 0s when the register is
+ * read, and held at all 1s in case of overflow.
+ *
+ * The reset operation takes precedence over the increment operation; if the register is read on
+ * the same clock cycle as an increment operation, the counter is reset to all 0s and the
+ * increment operation is lost. The counters are writable for test purposes, rather than read-
+ * only as specified in IEEE 802.3.
+ */
+union cvmx_bgxx_spux_fec_corr_blks23 {
+	u64 u64;
+	struct cvmx_bgxx_spux_fec_corr_blks23_s {
+		u64 ln3_corr_blks : 32;
+		u64 ln2_corr_blks : 32;
+	} s;
+	struct cvmx_bgxx_spux_fec_corr_blks23_s cn73xx;
+	struct cvmx_bgxx_spux_fec_corr_blks23_s cn78xx;
+	struct cvmx_bgxx_spux_fec_corr_blks23_s cn78xxp1;
+	struct cvmx_bgxx_spux_fec_corr_blks23_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_fec_corr_blks23 cvmx_bgxx_spux_fec_corr_blks23_t;
+
+/**
+ * cvmx_bgx#_spu#_fec_uncorr_blks01
+ *
+ * This register is valid only when the LPCS type is BASE-R
+ * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x3 or 0x4). The FEC corrected-block counters are
+ * defined in IEEE 802.3 section 74.8.4.2. Each uncorrected-blocks counter increments by 1 for an
+ * uncorrected FEC block, i.e. an FEC block that has been received with invalid parity on the
+ * associated PCS lane and has not been corrected by the FEC decoder. The counter is reset to all
+ * 0s when the register is read, and held at all 1s in case of overflow.
+ *
+ * The reset operation takes precedence over the increment operation; if the register is read on
+ * the same clock cycle as an increment operation, the counter is reset to all 0s and the
+ * increment operation is lost. The counters are writable for test purposes, rather than read-
+ * only as specified in IEEE 802.3.
+ */
+union cvmx_bgxx_spux_fec_uncorr_blks01 {
+	u64 u64;
+	struct cvmx_bgxx_spux_fec_uncorr_blks01_s {
+		u64 ln1_uncorr_blks : 32;
+		u64 ln0_uncorr_blks : 32;
+	} s;
+	struct cvmx_bgxx_spux_fec_uncorr_blks01_s cn73xx;
+	struct cvmx_bgxx_spux_fec_uncorr_blks01_s cn78xx;
+	struct cvmx_bgxx_spux_fec_uncorr_blks01_s cn78xxp1;
+	struct cvmx_bgxx_spux_fec_uncorr_blks01_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_fec_uncorr_blks01 cvmx_bgxx_spux_fec_uncorr_blks01_t;
+
+/**
+ * cvmx_bgx#_spu#_fec_uncorr_blks23
+ *
+ * This register is valid only when the LPCS type is 40GBASE-R
+ * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4). The FEC uncorrected-block counters are defined
+ * in IEEE 802.3 section 74.8.4.2. Each corrected-blocks counter increments by 1 for an
+ * uncorrected FEC block, i.e. an FEC block that has been received with invalid parity on the
+ * associated PCS lane and has not been corrected by the FEC decoder. The counter is reset to all
+ * 0s when the register is read, and held at all 1s in case of overflow.
+ *
+ * The reset operation takes precedence over the increment operation; if the register is read on
+ * the same clock cycle as an increment operation, the counter is reset to all 0s and the
+ * increment operation is lost. The counters are writable for test purposes, rather than read-
+ * only as specified in IEEE 802.3.
+ */
+union cvmx_bgxx_spux_fec_uncorr_blks23 {
+	u64 u64;
+	struct cvmx_bgxx_spux_fec_uncorr_blks23_s {
+		u64 ln3_uncorr_blks : 32;
+		u64 ln2_uncorr_blks : 32;
+	} s;
+	struct cvmx_bgxx_spux_fec_uncorr_blks23_s cn73xx;
+	struct cvmx_bgxx_spux_fec_uncorr_blks23_s cn78xx;
+	struct cvmx_bgxx_spux_fec_uncorr_blks23_s cn78xxp1;
+	struct cvmx_bgxx_spux_fec_uncorr_blks23_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_fec_uncorr_blks23 cvmx_bgxx_spux_fec_uncorr_blks23_t;
+
+/**
+ * cvmx_bgx#_spu#_int
+ */
+union cvmx_bgxx_spux_int {
+	u64 u64;
+	struct cvmx_bgxx_spux_int_s {
+		u64 reserved_15_63 : 49;
+		u64 training_failure : 1;
+		u64 training_done : 1;
+		u64 an_complete : 1;
+		u64 an_link_good : 1;
+		u64 an_page_rx : 1;
+		u64 fec_uncorr : 1;
+		u64 fec_corr : 1;
+		u64 bip_err : 1;
+		u64 dbg_sync : 1;
+		u64 algnlos : 1;
+		u64 synlos : 1;
+		u64 bitlckls : 1;
+		u64 err_blk : 1;
+		u64 rx_link_down : 1;
+		u64 rx_link_up : 1;
+	} s;
+	struct cvmx_bgxx_spux_int_s cn73xx;
+	struct cvmx_bgxx_spux_int_s cn78xx;
+	struct cvmx_bgxx_spux_int_s cn78xxp1;
+	struct cvmx_bgxx_spux_int_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_int cvmx_bgxx_spux_int_t;
+
+/**
+ * cvmx_bgx#_spu#_lpcs_states
+ */
+union cvmx_bgxx_spux_lpcs_states {
+	u64 u64;
+	struct cvmx_bgxx_spux_lpcs_states_s {
+		u64 reserved_15_63 : 49;
+		u64 br_rx_sm : 3;
+		u64 reserved_10_11 : 2;
+		u64 bx_rx_sm : 2;
+		u64 deskew_am_found : 4;
+		u64 reserved_3_3 : 1;
+		u64 deskew_sm : 3;
+	} s;
+	struct cvmx_bgxx_spux_lpcs_states_s cn73xx;
+	struct cvmx_bgxx_spux_lpcs_states_s cn78xx;
+	struct cvmx_bgxx_spux_lpcs_states_s cn78xxp1;
+	struct cvmx_bgxx_spux_lpcs_states_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_lpcs_states cvmx_bgxx_spux_lpcs_states_t;
+
+/**
+ * cvmx_bgx#_spu#_misc_control
+ *
+ * "* RX logical PCS lane polarity vector <3:0> = [XOR_RXPLRT]<3:0> ^ [4[[RXPLRT]]].
+ *  * TX logical PCS lane polarity vector <3:0> = [XOR_TXPLRT]<3:0> ^ [4[[TXPLRT]]].
+ *
+ *  In short, keep [RXPLRT] and [TXPLRT] cleared, and use [XOR_RXPLRT] and [XOR_TXPLRT] fields to
+ *  define
+ *  the polarity per logical PCS lane. Only bit 0 of vector is used for 10GBASE-R, and only bits
+ * - 1:0 of vector are used for RXAUI."
+ */
+union cvmx_bgxx_spux_misc_control {
+	u64 u64;
+	struct cvmx_bgxx_spux_misc_control_s {
+		u64 reserved_13_63 : 51;
+		u64 rx_packet_dis : 1;
+		u64 skip_after_term : 1;
+		u64 intlv_rdisp : 1;
+		u64 xor_rxplrt : 4;
+		u64 xor_txplrt : 4;
+		u64 rxplrt : 1;
+		u64 txplrt : 1;
+	} s;
+	struct cvmx_bgxx_spux_misc_control_s cn73xx;
+	struct cvmx_bgxx_spux_misc_control_s cn78xx;
+	struct cvmx_bgxx_spux_misc_control_s cn78xxp1;
+	struct cvmx_bgxx_spux_misc_control_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_misc_control cvmx_bgxx_spux_misc_control_t;
+
+/**
+ * cvmx_bgx#_spu#_spd_abil
+ */
+union cvmx_bgxx_spux_spd_abil {
+	u64 u64;
+	struct cvmx_bgxx_spux_spd_abil_s {
+		u64 reserved_4_63 : 60;
+		u64 hundredgb : 1;
+		u64 fortygb : 1;
+		u64 tenpasst : 1;
+		u64 tengb : 1;
+	} s;
+	struct cvmx_bgxx_spux_spd_abil_s cn73xx;
+	struct cvmx_bgxx_spux_spd_abil_s cn78xx;
+	struct cvmx_bgxx_spux_spd_abil_s cn78xxp1;
+	struct cvmx_bgxx_spux_spd_abil_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_spd_abil cvmx_bgxx_spux_spd_abil_t;
+
+/**
+ * cvmx_bgx#_spu#_status1
+ */
+union cvmx_bgxx_spux_status1 {
+	u64 u64;
+	struct cvmx_bgxx_spux_status1_s {
+		u64 reserved_8_63 : 56;
+		u64 flt : 1;
+		u64 reserved_3_6 : 4;
+		u64 rcv_lnk : 1;
+		u64 lpable : 1;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_bgxx_spux_status1_s cn73xx;
+	struct cvmx_bgxx_spux_status1_s cn78xx;
+	struct cvmx_bgxx_spux_status1_s cn78xxp1;
+	struct cvmx_bgxx_spux_status1_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_status1 cvmx_bgxx_spux_status1_t;
+
+/**
+ * cvmx_bgx#_spu#_status2
+ */
+union cvmx_bgxx_spux_status2 {
+	u64 u64;
+	struct cvmx_bgxx_spux_status2_s {
+		u64 reserved_16_63 : 48;
+		u64 dev : 2;
+		u64 reserved_12_13 : 2;
+		u64 xmtflt : 1;
+		u64 rcvflt : 1;
+		u64 reserved_6_9 : 4;
+		u64 hundredgb_r : 1;
+		u64 fortygb_r : 1;
+		u64 tengb_t : 1;
+		u64 tengb_w : 1;
+		u64 tengb_x : 1;
+		u64 tengb_r : 1;
+	} s;
+	struct cvmx_bgxx_spux_status2_s cn73xx;
+	struct cvmx_bgxx_spux_status2_s cn78xx;
+	struct cvmx_bgxx_spux_status2_s cn78xxp1;
+	struct cvmx_bgxx_spux_status2_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spux_status2 cvmx_bgxx_spux_status2_t;
+
+/**
+ * cvmx_bgx#_spu_bist_status
+ *
+ * This register provides memory BIST status from the SPU receive buffer lane FIFOs.
+ *
+ */
+union cvmx_bgxx_spu_bist_status {
+	u64 u64;
+	struct cvmx_bgxx_spu_bist_status_s {
+		u64 reserved_4_63 : 60;
+		u64 rx_buf_bist_status : 4;
+	} s;
+	struct cvmx_bgxx_spu_bist_status_s cn73xx;
+	struct cvmx_bgxx_spu_bist_status_s cn78xx;
+	struct cvmx_bgxx_spu_bist_status_s cn78xxp1;
+	struct cvmx_bgxx_spu_bist_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spu_bist_status cvmx_bgxx_spu_bist_status_t;
+
+/**
+ * cvmx_bgx#_spu_dbg_control
+ */
+union cvmx_bgxx_spu_dbg_control {
+	u64 u64;
+	struct cvmx_bgxx_spu_dbg_control_s {
+		u64 reserved_56_63 : 8;
+		u64 ms_clk_period : 12;
+		u64 us_clk_period : 12;
+		u64 reserved_31_31 : 1;
+		u64 br_ber_mon_dis : 1;
+		u64 an_nonce_match_dis : 1;
+		u64 timestamp_norm_dis : 1;
+		u64 rx_buf_flip_synd : 8;
+		u64 br_pmd_train_soft_en : 1;
+		u64 an_arb_link_chk_en : 1;
+		u64 rx_buf_cor_dis : 1;
+		u64 scramble_dis : 1;
+		u64 reserved_15_15 : 1;
+		u64 marker_rxp : 15;
+	} s;
+	struct cvmx_bgxx_spu_dbg_control_s cn73xx;
+	struct cvmx_bgxx_spu_dbg_control_s cn78xx;
+	struct cvmx_bgxx_spu_dbg_control_s cn78xxp1;
+	struct cvmx_bgxx_spu_dbg_control_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spu_dbg_control cvmx_bgxx_spu_dbg_control_t;
+
+/**
+ * cvmx_bgx#_spu_mem_int
+ */
+union cvmx_bgxx_spu_mem_int {
+	u64 u64;
+	struct cvmx_bgxx_spu_mem_int_s {
+		u64 reserved_8_63 : 56;
+		u64 rx_buf_sbe : 4;
+		u64 rx_buf_dbe : 4;
+	} s;
+	struct cvmx_bgxx_spu_mem_int_s cn73xx;
+	struct cvmx_bgxx_spu_mem_int_s cn78xx;
+	struct cvmx_bgxx_spu_mem_int_s cn78xxp1;
+	struct cvmx_bgxx_spu_mem_int_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spu_mem_int cvmx_bgxx_spu_mem_int_t;
+
+/**
+ * cvmx_bgx#_spu_mem_status
+ *
+ * This register provides memory ECC status from the SPU receive buffer lane FIFOs.
+ *
+ */
+union cvmx_bgxx_spu_mem_status {
+	u64 u64;
+	struct cvmx_bgxx_spu_mem_status_s {
+		u64 reserved_32_63 : 32;
+		u64 rx_buf_ecc_synd : 32;
+	} s;
+	struct cvmx_bgxx_spu_mem_status_s cn73xx;
+	struct cvmx_bgxx_spu_mem_status_s cn78xx;
+	struct cvmx_bgxx_spu_mem_status_s cn78xxp1;
+	struct cvmx_bgxx_spu_mem_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spu_mem_status cvmx_bgxx_spu_mem_status_t;
+
+/**
+ * cvmx_bgx#_spu_sds#_skew_status
+ *
+ * This register provides SerDes lane skew status. One register per physical SerDes lane.
+ *
+ */
+union cvmx_bgxx_spu_sdsx_skew_status {
+	u64 u64;
+	struct cvmx_bgxx_spu_sdsx_skew_status_s {
+		u64 reserved_32_63 : 32;
+		u64 skew_status : 32;
+	} s;
+	struct cvmx_bgxx_spu_sdsx_skew_status_s cn73xx;
+	struct cvmx_bgxx_spu_sdsx_skew_status_s cn78xx;
+	struct cvmx_bgxx_spu_sdsx_skew_status_s cn78xxp1;
+	struct cvmx_bgxx_spu_sdsx_skew_status_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spu_sdsx_skew_status cvmx_bgxx_spu_sdsx_skew_status_t;
+
+/**
+ * cvmx_bgx#_spu_sds#_states
+ *
+ * This register provides SerDes lane states. One register per physical SerDes lane.
+ *
+ */
+union cvmx_bgxx_spu_sdsx_states {
+	u64 u64;
+	struct cvmx_bgxx_spu_sdsx_states_s {
+		u64 reserved_52_63 : 12;
+		u64 am_lock_invld_cnt : 2;
+		u64 am_lock_sm : 2;
+		u64 reserved_45_47 : 3;
+		u64 train_sm : 3;
+		u64 train_code_viol : 1;
+		u64 train_frame_lock : 1;
+		u64 train_lock_found_1st_marker : 1;
+		u64 train_lock_bad_markers : 3;
+		u64 reserved_35_35 : 1;
+		u64 an_arb_sm : 3;
+		u64 an_rx_sm : 2;
+		u64 reserved_29_29 : 1;
+		u64 fec_block_sync : 1;
+		u64 fec_sync_cnt : 4;
+		u64 reserved_23_23 : 1;
+		u64 br_sh_invld_cnt : 7;
+		u64 br_block_lock : 1;
+		u64 br_sh_cnt : 11;
+		u64 bx_sync_sm : 4;
+	} s;
+	struct cvmx_bgxx_spu_sdsx_states_s cn73xx;
+	struct cvmx_bgxx_spu_sdsx_states_s cn78xx;
+	struct cvmx_bgxx_spu_sdsx_states_s cn78xxp1;
+	struct cvmx_bgxx_spu_sdsx_states_s cnf75xx;
+};
+
+typedef union cvmx_bgxx_spu_sdsx_states cvmx_bgxx_spu_sdsx_states_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-ciu-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-ciu-defs.h
new file mode 100644
index 0000000..e67d916
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-ciu-defs.h
@@ -0,0 +1,7351 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon ciu.
+ */
+
+#ifndef __CVMX_CIU_DEFS_H__
+#define __CVMX_CIU_DEFS_H__
+
+#define CVMX_CIU_BIST				  (0x0001070000000730ull)
+#define CVMX_CIU_BLOCK_INT			  (0x00010700000007C0ull)
+#define CVMX_CIU_CIB_L2C_ENX(offset)		  (0x000107000000E100ull)
+#define CVMX_CIU_CIB_L2C_RAWX(offset)		  (0x000107000000E000ull)
+#define CVMX_CIU_CIB_LMCX_ENX(offset, block_id)	  (0x000107000000E300ull)
+#define CVMX_CIU_CIB_LMCX_RAWX(offset, block_id)  (0x000107000000E200ull)
+#define CVMX_CIU_CIB_OCLAX_ENX(offset, block_id)  (0x000107000000EE00ull)
+#define CVMX_CIU_CIB_OCLAX_RAWX(offset, block_id) (0x000107000000EC00ull)
+#define CVMX_CIU_CIB_RST_ENX(offset)		  (0x000107000000E500ull)
+#define CVMX_CIU_CIB_RST_RAWX(offset)		  (0x000107000000E400ull)
+#define CVMX_CIU_CIB_SATA_ENX(offset)		  (0x000107000000E700ull)
+#define CVMX_CIU_CIB_SATA_RAWX(offset)		  (0x000107000000E600ull)
+#define CVMX_CIU_CIB_USBDRDX_ENX(offset, block_id)                                                 \
+	(0x000107000000EA00ull + ((block_id) & 1) * 0x100ull)
+#define CVMX_CIU_CIB_USBDRDX_RAWX(offset, block_id)                                                \
+	(0x000107000000E800ull + ((block_id) & 1) * 0x100ull)
+#define CVMX_CIU_DINT CVMX_CIU_DINT_FUNC()
+static inline u64 CVMX_CIU_DINT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000720ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001010000000180ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001010000000180ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001010000000180ull;
+	}
+	return 0x0001010000000180ull;
+}
+
+#define CVMX_CIU_EN2_IOX_INT(offset)	 (0x000107000000A600ull + ((offset) & 1) * 8)
+#define CVMX_CIU_EN2_IOX_INT_W1C(offset) (0x000107000000CE00ull + ((offset) & 1) * 8)
+#define CVMX_CIU_EN2_IOX_INT_W1S(offset) (0x000107000000AE00ull + ((offset) & 1) * 8)
+#define CVMX_CIU_EN2_PPX_IP2(offset)	 (0x000107000000A000ull + ((offset) & 15) * 8)
+#define CVMX_CIU_EN2_PPX_IP2_W1C(offset) (0x000107000000C800ull + ((offset) & 15) * 8)
+#define CVMX_CIU_EN2_PPX_IP2_W1S(offset) (0x000107000000A800ull + ((offset) & 15) * 8)
+#define CVMX_CIU_EN2_PPX_IP3(offset)	 (0x000107000000A200ull + ((offset) & 15) * 8)
+#define CVMX_CIU_EN2_PPX_IP3_W1C(offset) (0x000107000000CA00ull + ((offset) & 15) * 8)
+#define CVMX_CIU_EN2_PPX_IP3_W1S(offset) (0x000107000000AA00ull + ((offset) & 15) * 8)
+#define CVMX_CIU_EN2_PPX_IP4(offset)	 (0x000107000000A400ull + ((offset) & 15) * 8)
+#define CVMX_CIU_EN2_PPX_IP4_W1C(offset) (0x000107000000CC00ull + ((offset) & 15) * 8)
+#define CVMX_CIU_EN2_PPX_IP4_W1S(offset) (0x000107000000AC00ull + ((offset) & 15) * 8)
+#define CVMX_CIU_FUSE			 CVMX_CIU_FUSE_FUNC()
+static inline u64 CVMX_CIU_FUSE_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000728ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00010100000001A0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00010100000001A0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00010100000001A0ull;
+	}
+	return 0x00010100000001A0ull;
+}
+
+#define CVMX_CIU_GSTOP			(0x0001070000000710ull)
+#define CVMX_CIU_INT33_SUM0		(0x0001070000000110ull)
+#define CVMX_CIU_INTR_SLOWDOWN		(0x00010700000007D0ull)
+#define CVMX_CIU_INTX_EN0(offset)	(0x0001070000000200ull + ((offset) & 63) * 16)
+#define CVMX_CIU_INTX_EN0_W1C(offset)	(0x0001070000002200ull + ((offset) & 63) * 16)
+#define CVMX_CIU_INTX_EN0_W1S(offset)	(0x0001070000006200ull + ((offset) & 63) * 16)
+#define CVMX_CIU_INTX_EN1(offset)	(0x0001070000000208ull + ((offset) & 63) * 16)
+#define CVMX_CIU_INTX_EN1_W1C(offset)	(0x0001070000002208ull + ((offset) & 63) * 16)
+#define CVMX_CIU_INTX_EN1_W1S(offset)	(0x0001070000006208ull + ((offset) & 63) * 16)
+#define CVMX_CIU_INTX_EN4_0(offset)	(0x0001070000000C80ull + ((offset) & 15) * 16)
+#define CVMX_CIU_INTX_EN4_0_W1C(offset) (0x0001070000002C80ull + ((offset) & 15) * 16)
+#define CVMX_CIU_INTX_EN4_0_W1S(offset) (0x0001070000006C80ull + ((offset) & 15) * 16)
+#define CVMX_CIU_INTX_EN4_1(offset)	(0x0001070000000C88ull + ((offset) & 15) * 16)
+#define CVMX_CIU_INTX_EN4_1_W1C(offset) (0x0001070000002C88ull + ((offset) & 15) * 16)
+#define CVMX_CIU_INTX_EN4_1_W1S(offset) (0x0001070000006C88ull + ((offset) & 15) * 16)
+#define CVMX_CIU_INTX_SUM0(offset)	(0x0001070000000000ull + ((offset) & 63) * 8)
+#define CVMX_CIU_INTX_SUM4(offset)	(0x0001070000000C00ull + ((offset) & 15) * 8)
+#define CVMX_CIU_INT_DBG_SEL		(0x00010700000007D0ull)
+#define CVMX_CIU_INT_SUM1		(0x0001070000000108ull)
+static inline u64 CVMX_CIU_MBOX_CLRX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000680ull + (offset) * 8;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000680ull + (offset) * 8;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000680ull + (offset) * 8;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001070100100600ull + (offset) * 8;
+	}
+	return 0x0001070000000680ull + (offset) * 8;
+}
+
+static inline u64 CVMX_CIU_MBOX_SETX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000600ull + (offset) * 8;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000600ull + (offset) * 8;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000600ull + (offset) * 8;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001070100100400ull + (offset) * 8;
+	}
+	return 0x0001070000000600ull + (offset) * 8;
+}
+
+#define CVMX_CIU_NMI	      (0x0001070000000718ull)
+#define CVMX_CIU_PCI_INTA     (0x0001070000000750ull)
+#define CVMX_CIU_PP_BIST_STAT (0x00010700000007E0ull)
+#define CVMX_CIU_PP_DBG	      CVMX_CIU_PP_DBG_FUNC()
+static inline u64 CVMX_CIU_PP_DBG_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000708ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001010000000120ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001010000000120ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001010000000120ull;
+	}
+	return 0x0001010000000120ull;
+}
+
+static inline u64 CVMX_CIU_PP_POKEX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000580ull + (offset) * 8;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000580ull + (offset) * 8;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000580ull + (offset) * 8;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001010000030000ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001010000030000ull + (offset) * 8;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001010000030000ull + (offset) * 8;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001070100100200ull + (offset) * 8;
+	}
+	return 0x0001010000030000ull + (offset) * 8;
+}
+
+#define CVMX_CIU_PP_RST CVMX_CIU_PP_RST_FUNC()
+static inline u64 CVMX_CIU_PP_RST_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000700ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001010000000100ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001010000000100ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001010000000100ull;
+	}
+	return 0x0001010000000100ull;
+}
+
+#define CVMX_CIU_PP_RST_PENDING CVMX_CIU_PP_RST_PENDING_FUNC()
+static inline u64 CVMX_CIU_PP_RST_PENDING_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001010000000110ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001010000000110ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001010000000110ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000740ull;
+	}
+	return 0x0001010000000110ull;
+}
+
+#define CVMX_CIU_QLM0		      (0x0001070000000780ull)
+#define CVMX_CIU_QLM1		      (0x0001070000000788ull)
+#define CVMX_CIU_QLM2		      (0x0001070000000790ull)
+#define CVMX_CIU_QLM3		      (0x0001070000000798ull)
+#define CVMX_CIU_QLM4		      (0x00010700000007A0ull)
+#define CVMX_CIU_QLM_DCOK	      (0x0001070000000760ull)
+#define CVMX_CIU_QLM_JTGC	      (0x0001070000000768ull)
+#define CVMX_CIU_QLM_JTGD	      (0x0001070000000770ull)
+#define CVMX_CIU_SOFT_BIST	      (0x0001070000000738ull)
+#define CVMX_CIU_SOFT_PRST	      (0x0001070000000748ull)
+#define CVMX_CIU_SOFT_PRST1	      (0x0001070000000758ull)
+#define CVMX_CIU_SOFT_PRST2	      (0x00010700000007D8ull)
+#define CVMX_CIU_SOFT_PRST3	      (0x00010700000007E0ull)
+#define CVMX_CIU_SOFT_RST	      (0x0001070000000740ull)
+#define CVMX_CIU_SUM1_IOX_INT(offset) (0x0001070000008600ull + ((offset) & 1) * 8)
+#define CVMX_CIU_SUM1_PPX_IP2(offset) (0x0001070000008000ull + ((offset) & 15) * 8)
+#define CVMX_CIU_SUM1_PPX_IP3(offset) (0x0001070000008200ull + ((offset) & 15) * 8)
+#define CVMX_CIU_SUM1_PPX_IP4(offset) (0x0001070000008400ull + ((offset) & 15) * 8)
+#define CVMX_CIU_SUM2_IOX_INT(offset) (0x0001070000008E00ull + ((offset) & 1) * 8)
+#define CVMX_CIU_SUM2_PPX_IP2(offset) (0x0001070000008800ull + ((offset) & 15) * 8)
+#define CVMX_CIU_SUM2_PPX_IP3(offset) (0x0001070000008A00ull + ((offset) & 15) * 8)
+#define CVMX_CIU_SUM2_PPX_IP4(offset) (0x0001070000008C00ull + ((offset) & 15) * 8)
+#define CVMX_CIU_TIMX(offset)	      (0x0001070000000480ull + ((offset) & 15) * 8)
+#define CVMX_CIU_TIM_MULTI_CAST	      CVMX_CIU_TIM_MULTI_CAST_FUNC()
+static inline u64 CVMX_CIU_TIM_MULTI_CAST_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00010700000004F0ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x000107000000C200ull;
+	}
+	return 0x000107000000C200ull;
+}
+
+static inline u64 CVMX_CIU_WDOGX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000500ull + (offset) * 8;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000500ull + (offset) * 8;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001070000000500ull + (offset) * 8;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001010000020000ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001010000020000ull + (offset) * 8;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001010000020000ull + (offset) * 8;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001070100100000ull + (offset) * 8;
+	}
+	return 0x0001010000020000ull + (offset) * 8;
+}
+
+/**
+ * cvmx_ciu_bist
+ */
+union cvmx_ciu_bist {
+	u64 u64;
+	struct cvmx_ciu_bist_s {
+		u64 reserved_7_63 : 57;
+		u64 bist : 7;
+	} s;
+	struct cvmx_ciu_bist_cn30xx {
+		u64 reserved_4_63 : 60;
+		u64 bist : 4;
+	} cn30xx;
+	struct cvmx_ciu_bist_cn30xx cn31xx;
+	struct cvmx_ciu_bist_cn30xx cn38xx;
+	struct cvmx_ciu_bist_cn30xx cn38xxp2;
+	struct cvmx_ciu_bist_cn50xx {
+		u64 reserved_2_63 : 62;
+		u64 bist : 2;
+	} cn50xx;
+	struct cvmx_ciu_bist_cn52xx {
+		u64 reserved_3_63 : 61;
+		u64 bist : 3;
+	} cn52xx;
+	struct cvmx_ciu_bist_cn52xx cn52xxp1;
+	struct cvmx_ciu_bist_cn30xx cn56xx;
+	struct cvmx_ciu_bist_cn30xx cn56xxp1;
+	struct cvmx_ciu_bist_cn30xx cn58xx;
+	struct cvmx_ciu_bist_cn30xx cn58xxp1;
+	struct cvmx_ciu_bist_cn61xx {
+		u64 reserved_6_63 : 58;
+		u64 bist : 6;
+	} cn61xx;
+	struct cvmx_ciu_bist_cn63xx {
+		u64 reserved_5_63 : 59;
+		u64 bist : 5;
+	} cn63xx;
+	struct cvmx_ciu_bist_cn63xx cn63xxp1;
+	struct cvmx_ciu_bist_cn61xx cn66xx;
+	struct cvmx_ciu_bist_s cn68xx;
+	struct cvmx_ciu_bist_s cn68xxp1;
+	struct cvmx_ciu_bist_cn52xx cn70xx;
+	struct cvmx_ciu_bist_cn52xx cn70xxp1;
+	struct cvmx_ciu_bist_cn61xx cnf71xx;
+};
+
+typedef union cvmx_ciu_bist cvmx_ciu_bist_t;
+
+/**
+ * cvmx_ciu_block_int
+ *
+ * CIU_BLOCK_INT = CIU Blocks Interrupt
+ *
+ * The interrupt lines from the various chip blocks.
+ */
+union cvmx_ciu_block_int {
+	u64 u64;
+	struct cvmx_ciu_block_int_s {
+		u64 reserved_62_63 : 2;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_43_59 : 17;
+		u64 ptp : 1;
+		u64 dpi : 1;
+		u64 dfm : 1;
+		u64 reserved_34_39 : 6;
+		u64 srio1 : 1;
+		u64 srio0 : 1;
+		u64 reserved_31_31 : 1;
+		u64 iob : 1;
+		u64 reserved_29_29 : 1;
+		u64 agl : 1;
+		u64 reserved_27_27 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 reserved_24_24 : 1;
+		u64 asxpcs1 : 1;
+		u64 asxpcs0 : 1;
+		u64 reserved_21_21 : 1;
+		u64 pip : 1;
+		u64 reserved_18_19 : 2;
+		u64 lmc0 : 1;
+		u64 l2c : 1;
+		u64 reserved_15_15 : 1;
+		u64 rad : 1;
+		u64 usb : 1;
+		u64 pow : 1;
+		u64 tim : 1;
+		u64 pko : 1;
+		u64 ipd : 1;
+		u64 reserved_8_8 : 1;
+		u64 zip : 1;
+		u64 dfa : 1;
+		u64 fpa : 1;
+		u64 key : 1;
+		u64 sli : 1;
+		u64 gmx1 : 1;
+		u64 gmx0 : 1;
+		u64 mio : 1;
+	} s;
+	struct cvmx_ciu_block_int_cn61xx {
+		u64 reserved_43_63 : 21;
+		u64 ptp : 1;
+		u64 dpi : 1;
+		u64 reserved_31_40 : 10;
+		u64 iob : 1;
+		u64 reserved_29_29 : 1;
+		u64 agl : 1;
+		u64 reserved_27_27 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 reserved_24_24 : 1;
+		u64 asxpcs1 : 1;
+		u64 asxpcs0 : 1;
+		u64 reserved_21_21 : 1;
+		u64 pip : 1;
+		u64 reserved_18_19 : 2;
+		u64 lmc0 : 1;
+		u64 l2c : 1;
+		u64 reserved_15_15 : 1;
+		u64 rad : 1;
+		u64 usb : 1;
+		u64 pow : 1;
+		u64 tim : 1;
+		u64 pko : 1;
+		u64 ipd : 1;
+		u64 reserved_8_8 : 1;
+		u64 zip : 1;
+		u64 dfa : 1;
+		u64 fpa : 1;
+		u64 key : 1;
+		u64 sli : 1;
+		u64 gmx1 : 1;
+		u64 gmx0 : 1;
+		u64 mio : 1;
+	} cn61xx;
+	struct cvmx_ciu_block_int_cn63xx {
+		u64 reserved_43_63 : 21;
+		u64 ptp : 1;
+		u64 dpi : 1;
+		u64 dfm : 1;
+		u64 reserved_34_39 : 6;
+		u64 srio1 : 1;
+		u64 srio0 : 1;
+		u64 reserved_31_31 : 1;
+		u64 iob : 1;
+		u64 reserved_29_29 : 1;
+		u64 agl : 1;
+		u64 reserved_27_27 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 reserved_23_24 : 2;
+		u64 asxpcs0 : 1;
+		u64 reserved_21_21 : 1;
+		u64 pip : 1;
+		u64 reserved_18_19 : 2;
+		u64 lmc0 : 1;
+		u64 l2c : 1;
+		u64 reserved_15_15 : 1;
+		u64 rad : 1;
+		u64 usb : 1;
+		u64 pow : 1;
+		u64 tim : 1;
+		u64 pko : 1;
+		u64 ipd : 1;
+		u64 reserved_8_8 : 1;
+		u64 zip : 1;
+		u64 dfa : 1;
+		u64 fpa : 1;
+		u64 key : 1;
+		u64 sli : 1;
+		u64 reserved_2_2 : 1;
+		u64 gmx0 : 1;
+		u64 mio : 1;
+	} cn63xx;
+	struct cvmx_ciu_block_int_cn63xx cn63xxp1;
+	struct cvmx_ciu_block_int_cn66xx {
+		u64 reserved_62_63 : 2;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_43_59 : 17;
+		u64 ptp : 1;
+		u64 dpi : 1;
+		u64 dfm : 1;
+		u64 reserved_33_39 : 7;
+		u64 srio0 : 1;
+		u64 reserved_31_31 : 1;
+		u64 iob : 1;
+		u64 reserved_29_29 : 1;
+		u64 agl : 1;
+		u64 reserved_27_27 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 reserved_24_24 : 1;
+		u64 asxpcs1 : 1;
+		u64 asxpcs0 : 1;
+		u64 reserved_21_21 : 1;
+		u64 pip : 1;
+		u64 reserved_18_19 : 2;
+		u64 lmc0 : 1;
+		u64 l2c : 1;
+		u64 reserved_15_15 : 1;
+		u64 rad : 1;
+		u64 usb : 1;
+		u64 pow : 1;
+		u64 tim : 1;
+		u64 pko : 1;
+		u64 ipd : 1;
+		u64 reserved_8_8 : 1;
+		u64 zip : 1;
+		u64 dfa : 1;
+		u64 fpa : 1;
+		u64 key : 1;
+		u64 sli : 1;
+		u64 gmx1 : 1;
+		u64 gmx0 : 1;
+		u64 mio : 1;
+	} cn66xx;
+	struct cvmx_ciu_block_int_cnf71xx {
+		u64 reserved_43_63 : 21;
+		u64 ptp : 1;
+		u64 dpi : 1;
+		u64 reserved_31_40 : 10;
+		u64 iob : 1;
+		u64 reserved_27_29 : 3;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 reserved_23_24 : 2;
+		u64 asxpcs0 : 1;
+		u64 reserved_21_21 : 1;
+		u64 pip : 1;
+		u64 reserved_18_19 : 2;
+		u64 lmc0 : 1;
+		u64 l2c : 1;
+		u64 reserved_15_15 : 1;
+		u64 rad : 1;
+		u64 usb : 1;
+		u64 pow : 1;
+		u64 tim : 1;
+		u64 pko : 1;
+		u64 ipd : 1;
+		u64 reserved_6_8 : 3;
+		u64 fpa : 1;
+		u64 key : 1;
+		u64 sli : 1;
+		u64 reserved_2_2 : 1;
+		u64 gmx0 : 1;
+		u64 mio : 1;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_block_int cvmx_ciu_block_int_t;
+
+/**
+ * cvmx_ciu_cib_l2c_en#
+ */
+union cvmx_ciu_cib_l2c_enx {
+	u64 u64;
+	struct cvmx_ciu_cib_l2c_enx_s {
+		u64 reserved_23_63 : 41;
+		u64 cbcx_int_ioccmddbe : 1;
+		u64 cbcx_int_ioccmdsbe : 1;
+		u64 cbcx_int_rsddbe : 1;
+		u64 cbcx_int_rsdsbe : 1;
+		u64 mcix_int_vbfdbe : 1;
+		u64 mcix_int_vbfsbe : 1;
+		u64 tadx_int_rtgdbe : 1;
+		u64 tadx_int_rtgsbe : 1;
+		u64 tadx_int_rddislmc : 1;
+		u64 tadx_int_wrdislmc : 1;
+		u64 tadx_int_bigrd : 1;
+		u64 tadx_int_bigwr : 1;
+		u64 tadx_int_holerd : 1;
+		u64 tadx_int_holewr : 1;
+		u64 tadx_int_noway : 1;
+		u64 tadx_int_tagdbe : 1;
+		u64 tadx_int_tagsbe : 1;
+		u64 tadx_int_fbfdbe : 1;
+		u64 tadx_int_fbfsbe : 1;
+		u64 tadx_int_sbfdbe : 1;
+		u64 tadx_int_sbfsbe : 1;
+		u64 tadx_int_l2ddbe : 1;
+		u64 tadx_int_l2dsbe : 1;
+	} s;
+	struct cvmx_ciu_cib_l2c_enx_s cn70xx;
+	struct cvmx_ciu_cib_l2c_enx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_l2c_enx cvmx_ciu_cib_l2c_enx_t;
+
+/**
+ * cvmx_ciu_cib_l2c_raw#
+ */
+union cvmx_ciu_cib_l2c_rawx {
+	u64 u64;
+	struct cvmx_ciu_cib_l2c_rawx_s {
+		u64 reserved_23_63 : 41;
+		u64 cbcx_int_ioccmddbe : 1;
+		u64 cbcx_int_ioccmdsbe : 1;
+		u64 cbcx_int_rsddbe : 1;
+		u64 cbcx_int_rsdsbe : 1;
+		u64 mcix_int_vbfdbe : 1;
+		u64 mcix_int_vbfsbe : 1;
+		u64 tadx_int_rtgdbe : 1;
+		u64 tadx_int_rtgsbe : 1;
+		u64 tadx_int_rddislmc : 1;
+		u64 tadx_int_wrdislmc : 1;
+		u64 tadx_int_bigrd : 1;
+		u64 tadx_int_bigwr : 1;
+		u64 tadx_int_holerd : 1;
+		u64 tadx_int_holewr : 1;
+		u64 tadx_int_noway : 1;
+		u64 tadx_int_tagdbe : 1;
+		u64 tadx_int_tagsbe : 1;
+		u64 tadx_int_fbfdbe : 1;
+		u64 tadx_int_fbfsbe : 1;
+		u64 tadx_int_sbfdbe : 1;
+		u64 tadx_int_sbfsbe : 1;
+		u64 tadx_int_l2ddbe : 1;
+		u64 tadx_int_l2dsbe : 1;
+	} s;
+	struct cvmx_ciu_cib_l2c_rawx_s cn70xx;
+	struct cvmx_ciu_cib_l2c_rawx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_l2c_rawx cvmx_ciu_cib_l2c_rawx_t;
+
+/**
+ * cvmx_ciu_cib_lmc#_en#
+ */
+union cvmx_ciu_cib_lmcx_enx {
+	u64 u64;
+	struct cvmx_ciu_cib_lmcx_enx_s {
+		u64 reserved_12_63 : 52;
+		u64 int_ddr_err : 1;
+		u64 int_dlc_ded : 1;
+		u64 int_dlc_sec : 1;
+		u64 int_ded_errx : 4;
+		u64 int_sec_errx : 4;
+		u64 int_nxm_wr_err : 1;
+	} s;
+	struct cvmx_ciu_cib_lmcx_enx_s cn70xx;
+	struct cvmx_ciu_cib_lmcx_enx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_lmcx_enx cvmx_ciu_cib_lmcx_enx_t;
+
+/**
+ * cvmx_ciu_cib_lmc#_raw#
+ */
+union cvmx_ciu_cib_lmcx_rawx {
+	u64 u64;
+	struct cvmx_ciu_cib_lmcx_rawx_s {
+		u64 reserved_12_63 : 52;
+		u64 int_ddr_err : 1;
+		u64 int_dlc_ded : 1;
+		u64 int_dlc_sec : 1;
+		u64 int_ded_errx : 4;
+		u64 int_sec_errx : 4;
+		u64 int_nxm_wr_err : 1;
+	} s;
+	struct cvmx_ciu_cib_lmcx_rawx_s cn70xx;
+	struct cvmx_ciu_cib_lmcx_rawx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_lmcx_rawx cvmx_ciu_cib_lmcx_rawx_t;
+
+/**
+ * cvmx_ciu_cib_ocla#_en#
+ */
+union cvmx_ciu_cib_oclax_enx {
+	u64 u64;
+	struct cvmx_ciu_cib_oclax_enx_s {
+		u64 reserved_15_63 : 49;
+		u64 state_ddrfull : 1;
+		u64 state_wmark : 1;
+		u64 state_overfull : 1;
+		u64 state_trigfull : 1;
+		u64 state_captured : 1;
+		u64 state_fsm1_int : 1;
+		u64 state_fsm0_int : 1;
+		u64 state_mcdx : 3;
+		u64 state_trig : 1;
+		u64 state_ovflx : 4;
+	} s;
+	struct cvmx_ciu_cib_oclax_enx_s cn70xx;
+	struct cvmx_ciu_cib_oclax_enx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_oclax_enx cvmx_ciu_cib_oclax_enx_t;
+
+/**
+ * cvmx_ciu_cib_ocla#_raw#
+ */
+union cvmx_ciu_cib_oclax_rawx {
+	u64 u64;
+	struct cvmx_ciu_cib_oclax_rawx_s {
+		u64 reserved_15_63 : 49;
+		u64 state_ddrfull : 1;
+		u64 state_wmark : 1;
+		u64 state_overfull : 1;
+		u64 state_trigfull : 1;
+		u64 state_captured : 1;
+		u64 state_fsm1_int : 1;
+		u64 state_fsm0_int : 1;
+		u64 state_mcdx : 3;
+		u64 state_trig : 1;
+		u64 state_ovflx : 4;
+	} s;
+	struct cvmx_ciu_cib_oclax_rawx_s cn70xx;
+	struct cvmx_ciu_cib_oclax_rawx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_oclax_rawx cvmx_ciu_cib_oclax_rawx_t;
+
+/**
+ * cvmx_ciu_cib_rst_en#
+ */
+union cvmx_ciu_cib_rst_enx {
+	u64 u64;
+	struct cvmx_ciu_cib_rst_enx_s {
+		u64 reserved_6_63 : 58;
+		u64 int_perstx : 3;
+		u64 int_linkx : 3;
+	} s;
+	struct cvmx_ciu_cib_rst_enx_s cn70xx;
+	struct cvmx_ciu_cib_rst_enx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_rst_enx cvmx_ciu_cib_rst_enx_t;
+
+/**
+ * cvmx_ciu_cib_rst_raw#
+ */
+union cvmx_ciu_cib_rst_rawx {
+	u64 u64;
+	struct cvmx_ciu_cib_rst_rawx_s {
+		u64 reserved_6_63 : 58;
+		u64 int_perstx : 3;
+		u64 int_linkx : 3;
+	} s;
+	struct cvmx_ciu_cib_rst_rawx_s cn70xx;
+	struct cvmx_ciu_cib_rst_rawx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_rst_rawx cvmx_ciu_cib_rst_rawx_t;
+
+/**
+ * cvmx_ciu_cib_sata_en#
+ */
+union cvmx_ciu_cib_sata_enx {
+	u64 u64;
+	struct cvmx_ciu_cib_sata_enx_s {
+		u64 reserved_4_63 : 60;
+		u64 uahc_pme_req_ip : 1;
+		u64 uahc_intrq_ip : 1;
+		u64 intstat_xm_bad_dma : 1;
+		u64 intstat_xs_ncb_oob : 1;
+	} s;
+	struct cvmx_ciu_cib_sata_enx_s cn70xx;
+	struct cvmx_ciu_cib_sata_enx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_sata_enx cvmx_ciu_cib_sata_enx_t;
+
+/**
+ * cvmx_ciu_cib_sata_raw#
+ */
+union cvmx_ciu_cib_sata_rawx {
+	u64 u64;
+	struct cvmx_ciu_cib_sata_rawx_s {
+		u64 reserved_4_63 : 60;
+		u64 uahc_pme_req_ip : 1;
+		u64 uahc_intrq_ip : 1;
+		u64 intstat_xm_bad_dma : 1;
+		u64 intstat_xs_ncb_oob : 1;
+	} s;
+	struct cvmx_ciu_cib_sata_rawx_s cn70xx;
+	struct cvmx_ciu_cib_sata_rawx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_sata_rawx cvmx_ciu_cib_sata_rawx_t;
+
+/**
+ * cvmx_ciu_cib_usbdrd#_en#
+ */
+union cvmx_ciu_cib_usbdrdx_enx {
+	u64 u64;
+	struct cvmx_ciu_cib_usbdrdx_enx_s {
+		u64 reserved_11_63 : 53;
+		u64 uahc_dev_int : 1;
+		u64 uahc_imanx_ip : 1;
+		u64 uahc_usbsts_hse : 1;
+		u64 intstat_ram2_dbe : 1;
+		u64 intstat_ram2_sbe : 1;
+		u64 intstat_ram1_dbe : 1;
+		u64 intstat_ram1_sbe : 1;
+		u64 intstat_ram0_dbe : 1;
+		u64 intstat_ram0_sbe : 1;
+		u64 intstat_xm_bad_dma : 1;
+		u64 intstat_xs_ncb_oob : 1;
+	} s;
+	struct cvmx_ciu_cib_usbdrdx_enx_s cn70xx;
+	struct cvmx_ciu_cib_usbdrdx_enx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_usbdrdx_enx cvmx_ciu_cib_usbdrdx_enx_t;
+
+/**
+ * cvmx_ciu_cib_usbdrd#_raw#
+ */
+union cvmx_ciu_cib_usbdrdx_rawx {
+	u64 u64;
+	struct cvmx_ciu_cib_usbdrdx_rawx_s {
+		u64 reserved_11_63 : 53;
+		u64 uahc_dev_int : 1;
+		u64 uahc_imanx_ip : 1;
+		u64 uahc_usbsts_hse : 1;
+		u64 intstat_ram2_dbe : 1;
+		u64 intstat_ram2_sbe : 1;
+		u64 intstat_ram1_dbe : 1;
+		u64 intstat_ram1_sbe : 1;
+		u64 intstat_ram0_dbe : 1;
+		u64 intstat_ram0_sbe : 1;
+		u64 intstat_xm_bad_dma : 1;
+		u64 intstat_xs_ncb_oob : 1;
+	} s;
+	struct cvmx_ciu_cib_usbdrdx_rawx_s cn70xx;
+	struct cvmx_ciu_cib_usbdrdx_rawx_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_cib_usbdrdx_rawx cvmx_ciu_cib_usbdrdx_rawx_t;
+
+/**
+ * cvmx_ciu_dint
+ */
+union cvmx_ciu_dint {
+	u64 u64;
+	struct cvmx_ciu_dint_s {
+		u64 reserved_48_63 : 16;
+		u64 dint : 48;
+	} s;
+	struct cvmx_ciu_dint_cn30xx {
+		u64 reserved_1_63 : 63;
+		u64 dint : 1;
+	} cn30xx;
+	struct cvmx_ciu_dint_cn31xx {
+		u64 reserved_2_63 : 62;
+		u64 dint : 2;
+	} cn31xx;
+	struct cvmx_ciu_dint_cn38xx {
+		u64 reserved_16_63 : 48;
+		u64 dint : 16;
+	} cn38xx;
+	struct cvmx_ciu_dint_cn38xx cn38xxp2;
+	struct cvmx_ciu_dint_cn31xx cn50xx;
+	struct cvmx_ciu_dint_cn52xx {
+		u64 reserved_4_63 : 60;
+		u64 dint : 4;
+	} cn52xx;
+	struct cvmx_ciu_dint_cn52xx cn52xxp1;
+	struct cvmx_ciu_dint_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 dint : 12;
+	} cn56xx;
+	struct cvmx_ciu_dint_cn56xx cn56xxp1;
+	struct cvmx_ciu_dint_cn38xx cn58xx;
+	struct cvmx_ciu_dint_cn38xx cn58xxp1;
+	struct cvmx_ciu_dint_cn52xx cn61xx;
+	struct cvmx_ciu_dint_cn63xx {
+		u64 reserved_6_63 : 58;
+		u64 dint : 6;
+	} cn63xx;
+	struct cvmx_ciu_dint_cn63xx cn63xxp1;
+	struct cvmx_ciu_dint_cn66xx {
+		u64 reserved_10_63 : 54;
+		u64 dint : 10;
+	} cn66xx;
+	struct cvmx_ciu_dint_cn68xx {
+		u64 reserved_32_63 : 32;
+		u64 dint : 32;
+	} cn68xx;
+	struct cvmx_ciu_dint_cn68xx cn68xxp1;
+	struct cvmx_ciu_dint_cn52xx cn70xx;
+	struct cvmx_ciu_dint_cn52xx cn70xxp1;
+	struct cvmx_ciu_dint_cn38xx cn73xx;
+	struct cvmx_ciu_dint_s cn78xx;
+	struct cvmx_ciu_dint_s cn78xxp1;
+	struct cvmx_ciu_dint_cn52xx cnf71xx;
+	struct cvmx_ciu_dint_cn38xx cnf75xx;
+};
+
+typedef union cvmx_ciu_dint cvmx_ciu_dint_t;
+
+/**
+ * cvmx_ciu_en2_io#_int
+ *
+ * CIU_EN2_IO0_INT is for PEM0, CIU_EN2_IO1_INT is reserved.
+ *
+ */
+union cvmx_ciu_en2_iox_int {
+	u64 u64;
+	struct cvmx_ciu_en2_iox_int_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_iox_int_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_iox_int_cn61xx cn66xx;
+	struct cvmx_ciu_en2_iox_int_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_iox_int_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_iox_int_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_iox_int cvmx_ciu_en2_iox_int_t;
+
+/**
+ * cvmx_ciu_en2_io#_int_w1c
+ *
+ * CIU_EN2_IO0_INT_W1C is for PEM0, CIU_EN2_IO1_INT_W1C is reserved.
+ *
+ */
+union cvmx_ciu_en2_iox_int_w1c {
+	u64 u64;
+	struct cvmx_ciu_en2_iox_int_w1c_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_iox_int_w1c_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_iox_int_w1c_cn61xx cn66xx;
+	struct cvmx_ciu_en2_iox_int_w1c_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_iox_int_w1c_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_iox_int_w1c_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_iox_int_w1c cvmx_ciu_en2_iox_int_w1c_t;
+
+/**
+ * cvmx_ciu_en2_io#_int_w1s
+ *
+ * CIU_EN2_IO0_INT_W1S is for PEM0, CIU_EN2_IO1_INT_W1S is reserved.
+ *
+ */
+union cvmx_ciu_en2_iox_int_w1s {
+	u64 u64;
+	struct cvmx_ciu_en2_iox_int_w1s_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_iox_int_w1s_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_iox_int_w1s_cn61xx cn66xx;
+	struct cvmx_ciu_en2_iox_int_w1s_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_iox_int_w1s_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_iox_int_w1s_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_iox_int_w1s cvmx_ciu_en2_iox_int_w1s_t;
+
+/**
+ * cvmx_ciu_en2_pp#_ip2
+ *
+ * Notes:
+ * These SUM2 CSR's did not exist prior to pass 1.2. CIU_TIM4-9 did not exist prior to pass 1.2.
+ *
+ */
+union cvmx_ciu_en2_ppx_ip2 {
+	u64 u64;
+	struct cvmx_ciu_en2_ppx_ip2_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_ppx_ip2_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_ppx_ip2_cn61xx cn66xx;
+	struct cvmx_ciu_en2_ppx_ip2_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_ppx_ip2_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_ppx_ip2_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_ppx_ip2 cvmx_ciu_en2_ppx_ip2_t;
+
+/**
+ * cvmx_ciu_en2_pp#_ip2_w1c
+ *
+ * Write-1-to-clear version of the CIU_EN2_PP(IO)X_IPx(INT) register, read back corresponding
+ * CIU_EN2_PP(IO)X_IPx(INT) value.
+ */
+union cvmx_ciu_en2_ppx_ip2_w1c {
+	u64 u64;
+	struct cvmx_ciu_en2_ppx_ip2_w1c_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_ppx_ip2_w1c_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_ppx_ip2_w1c_cn61xx cn66xx;
+	struct cvmx_ciu_en2_ppx_ip2_w1c_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_ppx_ip2_w1c_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_ppx_ip2_w1c_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_ppx_ip2_w1c cvmx_ciu_en2_ppx_ip2_w1c_t;
+
+/**
+ * cvmx_ciu_en2_pp#_ip2_w1s
+ *
+ * Write-1-to-set version of the CIU_EN2_PP(IO)X_IPx(INT) register, read back corresponding
+ * CIU_EN2_PP(IO)X_IPx(INT) value.
+ */
+union cvmx_ciu_en2_ppx_ip2_w1s {
+	u64 u64;
+	struct cvmx_ciu_en2_ppx_ip2_w1s_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_ppx_ip2_w1s_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_ppx_ip2_w1s_cn61xx cn66xx;
+	struct cvmx_ciu_en2_ppx_ip2_w1s_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_ppx_ip2_w1s_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_ppx_ip2_w1s_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_ppx_ip2_w1s cvmx_ciu_en2_ppx_ip2_w1s_t;
+
+/**
+ * cvmx_ciu_en2_pp#_ip3
+ *
+ * Notes:
+ * These SUM2 CSR's did not exist prior to pass 1.2. CIU_TIM4-9 did not exist prior to pass 1.2.
+ *
+ */
+union cvmx_ciu_en2_ppx_ip3 {
+	u64 u64;
+	struct cvmx_ciu_en2_ppx_ip3_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_ppx_ip3_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_ppx_ip3_cn61xx cn66xx;
+	struct cvmx_ciu_en2_ppx_ip3_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_ppx_ip3_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_ppx_ip3_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_ppx_ip3 cvmx_ciu_en2_ppx_ip3_t;
+
+/**
+ * cvmx_ciu_en2_pp#_ip3_w1c
+ *
+ * Notes:
+ * Write-1-to-clear version of the CIU_EN2_PP(IO)X_IPx(INT) register, read back corresponding
+ * CIU_EN2_PP(IO)X_IPx(INT) value.
+ */
+union cvmx_ciu_en2_ppx_ip3_w1c {
+	u64 u64;
+	struct cvmx_ciu_en2_ppx_ip3_w1c_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_ppx_ip3_w1c_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_ppx_ip3_w1c_cn61xx cn66xx;
+	struct cvmx_ciu_en2_ppx_ip3_w1c_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_ppx_ip3_w1c_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_ppx_ip3_w1c_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_ppx_ip3_w1c cvmx_ciu_en2_ppx_ip3_w1c_t;
+
+/**
+ * cvmx_ciu_en2_pp#_ip3_w1s
+ *
+ * Notes:
+ * Write-1-to-set version of the CIU_EN2_PP(IO)X_IPx(INT) register, read back corresponding
+ * CIU_EN2_PP(IO)X_IPx(INT) value.
+ */
+union cvmx_ciu_en2_ppx_ip3_w1s {
+	u64 u64;
+	struct cvmx_ciu_en2_ppx_ip3_w1s_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_ppx_ip3_w1s_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_ppx_ip3_w1s_cn61xx cn66xx;
+	struct cvmx_ciu_en2_ppx_ip3_w1s_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_ppx_ip3_w1s_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_ppx_ip3_w1s_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_ppx_ip3_w1s cvmx_ciu_en2_ppx_ip3_w1s_t;
+
+/**
+ * cvmx_ciu_en2_pp#_ip4
+ *
+ * Notes:
+ * These SUM2 CSR's did not exist prior to pass 1.2. CIU_TIM4-9 did not exist prior to pass 1.2.
+ *
+ */
+union cvmx_ciu_en2_ppx_ip4 {
+	u64 u64;
+	struct cvmx_ciu_en2_ppx_ip4_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_ppx_ip4_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_ppx_ip4_cn61xx cn66xx;
+	struct cvmx_ciu_en2_ppx_ip4_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_ppx_ip4_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_ppx_ip4_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_ppx_ip4 cvmx_ciu_en2_ppx_ip4_t;
+
+/**
+ * cvmx_ciu_en2_pp#_ip4_w1c
+ *
+ * Notes:
+ * Write-1-to-clear version of the CIU_EN2_PP(IO)X_IPx(INT) register, read back corresponding
+ * CIU_EN2_PP(IO)X_IPx(INT) value.
+ */
+union cvmx_ciu_en2_ppx_ip4_w1c {
+	u64 u64;
+	struct cvmx_ciu_en2_ppx_ip4_w1c_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_ppx_ip4_w1c_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_ppx_ip4_w1c_cn61xx cn66xx;
+	struct cvmx_ciu_en2_ppx_ip4_w1c_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_ppx_ip4_w1c_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_ppx_ip4_w1c_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_ppx_ip4_w1c cvmx_ciu_en2_ppx_ip4_w1c_t;
+
+/**
+ * cvmx_ciu_en2_pp#_ip4_w1s
+ *
+ * Notes:
+ * Write-1-to-set version of the CIU_EN2_PP(IO)X_IPx(INT) register, read back corresponding
+ * CIU_EN2_PP(IO)X_IPx(INT) value.
+ */
+union cvmx_ciu_en2_ppx_ip4_w1s {
+	u64 u64;
+	struct cvmx_ciu_en2_ppx_ip4_w1s_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_en2_ppx_ip4_w1s_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_en2_ppx_ip4_w1s_cn61xx cn66xx;
+	struct cvmx_ciu_en2_ppx_ip4_w1s_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_en2_ppx_ip4_w1s_cn70xx cn70xxp1;
+	struct cvmx_ciu_en2_ppx_ip4_w1s_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_en2_ppx_ip4_w1s cvmx_ciu_en2_ppx_ip4_w1s_t;
+
+/**
+ * cvmx_ciu_fuse
+ */
+union cvmx_ciu_fuse {
+	u64 u64;
+	struct cvmx_ciu_fuse_s {
+		u64 reserved_48_63 : 16;
+		u64 fuse : 48;
+	} s;
+	struct cvmx_ciu_fuse_cn30xx {
+		u64 reserved_1_63 : 63;
+		u64 fuse : 1;
+	} cn30xx;
+	struct cvmx_ciu_fuse_cn31xx {
+		u64 reserved_2_63 : 62;
+		u64 fuse : 2;
+	} cn31xx;
+	struct cvmx_ciu_fuse_cn38xx {
+		u64 reserved_16_63 : 48;
+		u64 fuse : 16;
+	} cn38xx;
+	struct cvmx_ciu_fuse_cn38xx cn38xxp2;
+	struct cvmx_ciu_fuse_cn31xx cn50xx;
+	struct cvmx_ciu_fuse_cn52xx {
+		u64 reserved_4_63 : 60;
+		u64 fuse : 4;
+	} cn52xx;
+	struct cvmx_ciu_fuse_cn52xx cn52xxp1;
+	struct cvmx_ciu_fuse_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 fuse : 12;
+	} cn56xx;
+	struct cvmx_ciu_fuse_cn56xx cn56xxp1;
+	struct cvmx_ciu_fuse_cn38xx cn58xx;
+	struct cvmx_ciu_fuse_cn38xx cn58xxp1;
+	struct cvmx_ciu_fuse_cn52xx cn61xx;
+	struct cvmx_ciu_fuse_cn63xx {
+		u64 reserved_6_63 : 58;
+		u64 fuse : 6;
+	} cn63xx;
+	struct cvmx_ciu_fuse_cn63xx cn63xxp1;
+	struct cvmx_ciu_fuse_cn66xx {
+		u64 reserved_10_63 : 54;
+		u64 fuse : 10;
+	} cn66xx;
+	struct cvmx_ciu_fuse_cn68xx {
+		u64 reserved_32_63 : 32;
+		u64 fuse : 32;
+	} cn68xx;
+	struct cvmx_ciu_fuse_cn68xx cn68xxp1;
+	struct cvmx_ciu_fuse_cn52xx cn70xx;
+	struct cvmx_ciu_fuse_cn52xx cn70xxp1;
+	struct cvmx_ciu_fuse_cn38xx cn73xx;
+	struct cvmx_ciu_fuse_s cn78xx;
+	struct cvmx_ciu_fuse_s cn78xxp1;
+	struct cvmx_ciu_fuse_cn52xx cnf71xx;
+	struct cvmx_ciu_fuse_cn38xx cnf75xx;
+};
+
+typedef union cvmx_ciu_fuse cvmx_ciu_fuse_t;
+
+/**
+ * cvmx_ciu_gstop
+ */
+union cvmx_ciu_gstop {
+	u64 u64;
+	struct cvmx_ciu_gstop_s {
+		u64 reserved_1_63 : 63;
+		u64 gstop : 1;
+	} s;
+	struct cvmx_ciu_gstop_s cn30xx;
+	struct cvmx_ciu_gstop_s cn31xx;
+	struct cvmx_ciu_gstop_s cn38xx;
+	struct cvmx_ciu_gstop_s cn38xxp2;
+	struct cvmx_ciu_gstop_s cn50xx;
+	struct cvmx_ciu_gstop_s cn52xx;
+	struct cvmx_ciu_gstop_s cn52xxp1;
+	struct cvmx_ciu_gstop_s cn56xx;
+	struct cvmx_ciu_gstop_s cn56xxp1;
+	struct cvmx_ciu_gstop_s cn58xx;
+	struct cvmx_ciu_gstop_s cn58xxp1;
+	struct cvmx_ciu_gstop_s cn61xx;
+	struct cvmx_ciu_gstop_s cn63xx;
+	struct cvmx_ciu_gstop_s cn63xxp1;
+	struct cvmx_ciu_gstop_s cn66xx;
+	struct cvmx_ciu_gstop_s cn68xx;
+	struct cvmx_ciu_gstop_s cn68xxp1;
+	struct cvmx_ciu_gstop_s cn70xx;
+	struct cvmx_ciu_gstop_s cn70xxp1;
+	struct cvmx_ciu_gstop_s cnf71xx;
+};
+
+typedef union cvmx_ciu_gstop cvmx_ciu_gstop_t;
+
+/**
+ * cvmx_ciu_int#_en0
+ *
+ * CIU_INT0_EN0:  PP0/IP2
+ * CIU_INT1_EN0:  PP0/IP3
+ * CIU_INT2_EN0:  PP1/IP2
+ * CIU_INT3_EN0:  PP1/IP3
+ * CIU_INT4_EN0:  PP2/IP2
+ * CIU_INT5_EN0:  PP2/IP3
+ * CIU_INT6_EN0:  PP3/IP2
+ * CIU_INT7_EN0:  PP3/IP3
+ * - .....
+ * (hole)
+ * CIU_INT32_EN0: IO 0 (PEM0)
+ * CIU_INT33_EN0: IO 1 (reserved in o70).
+ */
+union cvmx_ciu_intx_en0 {
+	u64 u64;
+	struct cvmx_ciu_intx_en0_s {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} s;
+	struct cvmx_ciu_intx_en0_cn30xx {
+		u64 reserved_59_63 : 5;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 reserved_47_47 : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn30xx;
+	struct cvmx_ciu_intx_en0_cn31xx {
+		u64 reserved_59_63 : 5;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn31xx;
+	struct cvmx_ciu_intx_en0_cn38xx {
+		u64 reserved_56_63 : 8;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn38xx;
+	struct cvmx_ciu_intx_en0_cn38xx cn38xxp2;
+	struct cvmx_ciu_intx_en0_cn30xx cn50xx;
+	struct cvmx_ciu_intx_en0_cn52xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn52xx;
+	struct cvmx_ciu_intx_en0_cn52xx cn52xxp1;
+	struct cvmx_ciu_intx_en0_cn56xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn56xx;
+	struct cvmx_ciu_intx_en0_cn56xx cn56xxp1;
+	struct cvmx_ciu_intx_en0_cn38xx cn58xx;
+	struct cvmx_ciu_intx_en0_cn38xx cn58xxp1;
+	struct cvmx_ciu_intx_en0_cn61xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn61xx;
+	struct cvmx_ciu_intx_en0_cn52xx cn63xx;
+	struct cvmx_ciu_intx_en0_cn52xx cn63xxp1;
+	struct cvmx_ciu_intx_en0_cn66xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 reserved_57_57 : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn66xx;
+	struct cvmx_ciu_intx_en0_cn70xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 reserved_56_56 : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 reserved_46_47 : 2;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn70xx;
+	struct cvmx_ciu_intx_en0_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en0_cnf71xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en0 cvmx_ciu_intx_en0_t;
+
+/**
+ * cvmx_ciu_int#_en0_w1c
+ *
+ * Write-1-to-clear version of the CIU_INTx_EN0 register, read back corresponding CIU_INTx_EN0
+ * value.
+ * CIU_INT33_EN0_W1C is reserved.
+ */
+union cvmx_ciu_intx_en0_w1c {
+	u64 u64;
+	struct cvmx_ciu_intx_en0_w1c_s {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} s;
+	struct cvmx_ciu_intx_en0_w1c_cn52xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn52xx;
+	struct cvmx_ciu_intx_en0_w1c_cn56xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn56xx;
+	struct cvmx_ciu_intx_en0_w1c_cn58xx {
+		u64 reserved_56_63 : 8;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_en0_w1c_cn61xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn61xx;
+	struct cvmx_ciu_intx_en0_w1c_cn52xx cn63xx;
+	struct cvmx_ciu_intx_en0_w1c_cn52xx cn63xxp1;
+	struct cvmx_ciu_intx_en0_w1c_cn66xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 reserved_57_57 : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn66xx;
+	struct cvmx_ciu_intx_en0_w1c_cn70xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 reserved_56_56 : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 reserved_46_47 : 2;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn70xx;
+	struct cvmx_ciu_intx_en0_w1c_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en0_w1c_cnf71xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en0_w1c cvmx_ciu_intx_en0_w1c_t;
+
+/**
+ * cvmx_ciu_int#_en0_w1s
+ *
+ * Write-1-to-set version of the CIU_INTx_EN0 register, read back corresponding CIU_INTx_EN0
+ * value.
+ * CIU_INT33_EN0_W1S is reserved.
+ */
+union cvmx_ciu_intx_en0_w1s {
+	u64 u64;
+	struct cvmx_ciu_intx_en0_w1s_s {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} s;
+	struct cvmx_ciu_intx_en0_w1s_cn52xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn52xx;
+	struct cvmx_ciu_intx_en0_w1s_cn56xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn56xx;
+	struct cvmx_ciu_intx_en0_w1s_cn58xx {
+		u64 reserved_56_63 : 8;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_en0_w1s_cn61xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn61xx;
+	struct cvmx_ciu_intx_en0_w1s_cn52xx cn63xx;
+	struct cvmx_ciu_intx_en0_w1s_cn52xx cn63xxp1;
+	struct cvmx_ciu_intx_en0_w1s_cn66xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 reserved_57_57 : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn66xx;
+	struct cvmx_ciu_intx_en0_w1s_cn70xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 reserved_56_56 : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 reserved_46_47 : 2;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn70xx;
+	struct cvmx_ciu_intx_en0_w1s_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en0_w1s_cnf71xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en0_w1s cvmx_ciu_intx_en0_w1s_t;
+
+/**
+ * cvmx_ciu_int#_en1
+ *
+ * Enables for CIU_SUM1_PPX_IPx  or CIU_SUM1_IOX_INT
+ * CIU_INT0_EN1:  PP0/IP2
+ * CIU_INT1_EN1:  PP0/IP3
+ * CIU_INT2_EN1:  PP1/IP2
+ * CIU_INT3_EN1:  PP1/IP3
+ * CIU_INT4_EN1:  PP2/IP2
+ * CIU_INT5_EN1:  PP2/IP3
+ * CIU_INT6_EN1:  PP3/IP2
+ * CIU_INT7_EN1:  PP3/IP3
+ * - .....
+ * (hole)
+ * CIU_INT32_EN1: IO0 (PEM0)
+ * CIU_INT33_EN1: IO1 (Reserved for o70)
+ *
+ * PPx/IP2 will be raised when...
+ *
+ * n = x*2
+ * PPx/IP2 = |([CIU_SUM2_PPx_IP2,CIU_SUM1_PPx_IP2, CIU_INTn_SUM0] &
+ * [CIU_EN2_PPx_IP2,CIU_INTn_EN1, CIU_INTn_EN0])
+ *
+ * PPx/IP3 will be raised when...
+ *
+ * n = x*2 + 1
+ * PPx/IP3 =  |([CIU_SUM2_PPx_IP3,CIU_SUM1_PPx_IP3, CIU_INTn_SUM0] &
+ * [CIU_EN2_PPx_IP3,CIU_INTn_EN1, CIU_INTn_EN0])
+ *
+ * PPx/IP4 will be raised when...
+ * PPx/IP4 = |([CIU_SUM1_PPx_IP4, CIU_INTx_SUM4] & [CIU_INTx_EN4_1, CIU_INTx_EN4_0])
+ *
+ * PCI/INT will be raised when...
+ *
+ * PCI/INT0 (PEM0)
+ * PCI/INT0 = |([CIU_SUM2_IO0_INT,CIU_SUM1_IO0_INT, CIU_INT32_SUM0] &
+ * [CIU_EN2_IO0_INT,CIU_INT32_EN1, CIU_INT32_EN0])
+ *
+ * PCI/INT1 is reserved for o70.
+ * PCI/INT1 = |([CIU_SUM2_IO1_INT,CIU_SUM1_IO1_INT, CIU_INT33_SUM0] &
+ * [CIU_EN2_IO1_INT,CIU_INT33_EN1, CIU_INT33_EN0])
+ */
+union cvmx_ciu_intx_en1 {
+	u64 u64;
+	struct cvmx_ciu_intx_en1_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 reserved_50_50 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 wdog : 16;
+	} s;
+	struct cvmx_ciu_intx_en1_cn30xx {
+		u64 reserved_1_63 : 63;
+		u64 wdog : 1;
+	} cn30xx;
+	struct cvmx_ciu_intx_en1_cn31xx {
+		u64 reserved_2_63 : 62;
+		u64 wdog : 2;
+	} cn31xx;
+	struct cvmx_ciu_intx_en1_cn38xx {
+		u64 reserved_16_63 : 48;
+		u64 wdog : 16;
+	} cn38xx;
+	struct cvmx_ciu_intx_en1_cn38xx cn38xxp2;
+	struct cvmx_ciu_intx_en1_cn31xx cn50xx;
+	struct cvmx_ciu_intx_en1_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 reserved_4_15 : 12;
+		u64 wdog : 4;
+	} cn52xx;
+	struct cvmx_ciu_intx_en1_cn52xxp1 {
+		u64 reserved_19_63 : 45;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 reserved_4_15 : 12;
+		u64 wdog : 4;
+	} cn52xxp1;
+	struct cvmx_ciu_intx_en1_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 wdog : 12;
+	} cn56xx;
+	struct cvmx_ciu_intx_en1_cn56xx cn56xxp1;
+	struct cvmx_ciu_intx_en1_cn38xx cn58xx;
+	struct cvmx_ciu_intx_en1_cn38xx cn58xxp1;
+	struct cvmx_ciu_intx_en1_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_intx_en1_cn63xx {
+		u64 rst : 1;
+		u64 reserved_57_62 : 6;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_37_45 : 9;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_6_17 : 12;
+		u64 wdog : 6;
+	} cn63xx;
+	struct cvmx_ciu_intx_en1_cn63xx cn63xxp1;
+	struct cvmx_ciu_intx_en1_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_intx_en1_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_39_38 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_intx_en1_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en1_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_41_46 : 6;
+		u64 dpi_dma : 1;
+		u64 reserved_37_39 : 3;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en1 cvmx_ciu_intx_en1_t;
+
+/**
+ * cvmx_ciu_int#_en1_w1c
+ *
+ * Write-1-to-clear version of the CIU_INTX_EN1 register, read back corresponding CIU_INTX_EN1
+ * value.
+ * CIU_INT33_EN1_W1C is reserved.
+ */
+union cvmx_ciu_intx_en1_w1c {
+	u64 u64;
+	struct cvmx_ciu_intx_en1_w1c_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 reserved_50_50 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 wdog : 16;
+	} s;
+	struct cvmx_ciu_intx_en1_w1c_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 reserved_4_15 : 12;
+		u64 wdog : 4;
+	} cn52xx;
+	struct cvmx_ciu_intx_en1_w1c_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 wdog : 12;
+	} cn56xx;
+	struct cvmx_ciu_intx_en1_w1c_cn58xx {
+		u64 reserved_16_63 : 48;
+		u64 wdog : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_en1_w1c_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_intx_en1_w1c_cn63xx {
+		u64 rst : 1;
+		u64 reserved_57_62 : 6;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_37_45 : 9;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_6_17 : 12;
+		u64 wdog : 6;
+	} cn63xx;
+	struct cvmx_ciu_intx_en1_w1c_cn63xx cn63xxp1;
+	struct cvmx_ciu_intx_en1_w1c_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_intx_en1_w1c_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_intx_en1_w1c_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en1_w1c_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_41_46 : 6;
+		u64 dpi_dma : 1;
+		u64 reserved_37_39 : 3;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en1_w1c cvmx_ciu_intx_en1_w1c_t;
+
+/**
+ * cvmx_ciu_int#_en1_w1s
+ *
+ * Write-1-to-set version of the CIU_INTX_EN1 register, read back corresponding CIU_INTX_EN1
+ * value.
+ * CIU_INT33_EN1_W1S is reserved.
+ */
+union cvmx_ciu_intx_en1_w1s {
+	u64 u64;
+	struct cvmx_ciu_intx_en1_w1s_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 reserved_50_50 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 wdog : 16;
+	} s;
+	struct cvmx_ciu_intx_en1_w1s_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 reserved_4_15 : 12;
+		u64 wdog : 4;
+	} cn52xx;
+	struct cvmx_ciu_intx_en1_w1s_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 wdog : 12;
+	} cn56xx;
+	struct cvmx_ciu_intx_en1_w1s_cn58xx {
+		u64 reserved_16_63 : 48;
+		u64 wdog : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_en1_w1s_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_intx_en1_w1s_cn63xx {
+		u64 rst : 1;
+		u64 reserved_57_62 : 6;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_37_45 : 9;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_6_17 : 12;
+		u64 wdog : 6;
+	} cn63xx;
+	struct cvmx_ciu_intx_en1_w1s_cn63xx cn63xxp1;
+	struct cvmx_ciu_intx_en1_w1s_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_intx_en1_w1s_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_intx_en1_w1s_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en1_w1s_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_41_46 : 6;
+		u64 dpi_dma : 1;
+		u64 reserved_37_39 : 3;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en1_w1s cvmx_ciu_intx_en1_w1s_t;
+
+/**
+ * cvmx_ciu_int#_en4_0
+ *
+ * CIU_INT0_EN4_0:   PP0  /IP4
+ * CIU_INT1_EN4_0:   PP1  /IP4
+ * - ...
+ * CIU_INT3_EN4_0:   PP3  /IP4
+ */
+union cvmx_ciu_intx_en4_0 {
+	u64 u64;
+	struct cvmx_ciu_intx_en4_0_s {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} s;
+	struct cvmx_ciu_intx_en4_0_cn50xx {
+		u64 reserved_59_63 : 5;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 reserved_47_47 : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn50xx;
+	struct cvmx_ciu_intx_en4_0_cn52xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn52xx;
+	struct cvmx_ciu_intx_en4_0_cn52xx cn52xxp1;
+	struct cvmx_ciu_intx_en4_0_cn56xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn56xx;
+	struct cvmx_ciu_intx_en4_0_cn56xx cn56xxp1;
+	struct cvmx_ciu_intx_en4_0_cn58xx {
+		u64 reserved_56_63 : 8;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_en4_0_cn58xx cn58xxp1;
+	struct cvmx_ciu_intx_en4_0_cn61xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn61xx;
+	struct cvmx_ciu_intx_en4_0_cn52xx cn63xx;
+	struct cvmx_ciu_intx_en4_0_cn52xx cn63xxp1;
+	struct cvmx_ciu_intx_en4_0_cn66xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 reserved_57_57 : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn66xx;
+	struct cvmx_ciu_intx_en4_0_cn70xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 reserved_56_56 : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 reserved_46_47 : 2;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn70xx;
+	struct cvmx_ciu_intx_en4_0_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en4_0_cnf71xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en4_0 cvmx_ciu_intx_en4_0_t;
+
+/**
+ * cvmx_ciu_int#_en4_0_w1c
+ *
+ * Write-1-to-clear version of the CIU_INTx_EN4_0 register, read back corresponding
+ * CIU_INTx_EN4_0 value.
+ */
+union cvmx_ciu_intx_en4_0_w1c {
+	u64 u64;
+	struct cvmx_ciu_intx_en4_0_w1c_s {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} s;
+	struct cvmx_ciu_intx_en4_0_w1c_cn52xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn52xx;
+	struct cvmx_ciu_intx_en4_0_w1c_cn56xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn56xx;
+	struct cvmx_ciu_intx_en4_0_w1c_cn58xx {
+		u64 reserved_56_63 : 8;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_en4_0_w1c_cn61xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn61xx;
+	struct cvmx_ciu_intx_en4_0_w1c_cn52xx cn63xx;
+	struct cvmx_ciu_intx_en4_0_w1c_cn52xx cn63xxp1;
+	struct cvmx_ciu_intx_en4_0_w1c_cn66xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 reserved_57_57 : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn66xx;
+	struct cvmx_ciu_intx_en4_0_w1c_cn70xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 reserved_56_56 : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 reserved_46_47 : 2;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn70xx;
+	struct cvmx_ciu_intx_en4_0_w1c_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en4_0_w1c_cnf71xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en4_0_w1c cvmx_ciu_intx_en4_0_w1c_t;
+
+/**
+ * cvmx_ciu_int#_en4_0_w1s
+ *
+ * Write-1-to-set version of the CIU_INTX_EN4_0 register, read back corresponding CIU_INTX_EN4_0
+ * value.
+ */
+union cvmx_ciu_intx_en4_0_w1s {
+	u64 u64;
+	struct cvmx_ciu_intx_en4_0_w1s_s {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} s;
+	struct cvmx_ciu_intx_en4_0_w1s_cn52xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn52xx;
+	struct cvmx_ciu_intx_en4_0_w1s_cn56xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn56xx;
+	struct cvmx_ciu_intx_en4_0_w1s_cn58xx {
+		u64 reserved_56_63 : 8;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_en4_0_w1s_cn61xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn61xx;
+	struct cvmx_ciu_intx_en4_0_w1s_cn52xx cn63xx;
+	struct cvmx_ciu_intx_en4_0_w1s_cn52xx cn63xxp1;
+	struct cvmx_ciu_intx_en4_0_w1s_cn66xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 reserved_57_57 : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn66xx;
+	struct cvmx_ciu_intx_en4_0_w1s_cn70xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 reserved_56_56 : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 reserved_46_47 : 2;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn70xx;
+	struct cvmx_ciu_intx_en4_0_w1s_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en4_0_w1s_cnf71xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 reserved_44_44 : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en4_0_w1s cvmx_ciu_intx_en4_0_w1s_t;
+
+/**
+ * cvmx_ciu_int#_en4_1
+ *
+ * PPx/IP4 will be raised when...
+ * PPx/IP4 = |([CIU_SUM1_PPx_IP4, CIU_INTx_SUM4] & [CIU_INTx_EN4_1, CIU_INTx_EN4_0])
+ */
+union cvmx_ciu_intx_en4_1 {
+	u64 u64;
+	struct cvmx_ciu_intx_en4_1_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 reserved_50_50 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 wdog : 16;
+	} s;
+	struct cvmx_ciu_intx_en4_1_cn50xx {
+		u64 reserved_2_63 : 62;
+		u64 wdog : 2;
+	} cn50xx;
+	struct cvmx_ciu_intx_en4_1_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 reserved_4_15 : 12;
+		u64 wdog : 4;
+	} cn52xx;
+	struct cvmx_ciu_intx_en4_1_cn52xxp1 {
+		u64 reserved_19_63 : 45;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 reserved_4_15 : 12;
+		u64 wdog : 4;
+	} cn52xxp1;
+	struct cvmx_ciu_intx_en4_1_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 wdog : 12;
+	} cn56xx;
+	struct cvmx_ciu_intx_en4_1_cn56xx cn56xxp1;
+	struct cvmx_ciu_intx_en4_1_cn58xx {
+		u64 reserved_16_63 : 48;
+		u64 wdog : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_en4_1_cn58xx cn58xxp1;
+	struct cvmx_ciu_intx_en4_1_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_intx_en4_1_cn63xx {
+		u64 rst : 1;
+		u64 reserved_57_62 : 6;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_37_45 : 9;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_6_17 : 12;
+		u64 wdog : 6;
+	} cn63xx;
+	struct cvmx_ciu_intx_en4_1_cn63xx cn63xxp1;
+	struct cvmx_ciu_intx_en4_1_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_intx_en4_1_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_39_38 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_intx_en4_1_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en4_1_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_41_46 : 6;
+		u64 dpi_dma : 1;
+		u64 reserved_37_39 : 3;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en4_1 cvmx_ciu_intx_en4_1_t;
+
+/**
+ * cvmx_ciu_int#_en4_1_w1c
+ *
+ * Write-1-to-clear version of the CIU_INTX_EN4_1 register, read back corresponding
+ * CIU_INTX_EN4_1 value.
+ */
+union cvmx_ciu_intx_en4_1_w1c {
+	u64 u64;
+	struct cvmx_ciu_intx_en4_1_w1c_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 reserved_50_50 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 wdog : 16;
+	} s;
+	struct cvmx_ciu_intx_en4_1_w1c_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 reserved_4_15 : 12;
+		u64 wdog : 4;
+	} cn52xx;
+	struct cvmx_ciu_intx_en4_1_w1c_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 wdog : 12;
+	} cn56xx;
+	struct cvmx_ciu_intx_en4_1_w1c_cn58xx {
+		u64 reserved_16_63 : 48;
+		u64 wdog : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_en4_1_w1c_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_intx_en4_1_w1c_cn63xx {
+		u64 rst : 1;
+		u64 reserved_57_62 : 6;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_37_45 : 9;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_6_17 : 12;
+		u64 wdog : 6;
+	} cn63xx;
+	struct cvmx_ciu_intx_en4_1_w1c_cn63xx cn63xxp1;
+	struct cvmx_ciu_intx_en4_1_w1c_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_intx_en4_1_w1c_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_intx_en4_1_w1c_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en4_1_w1c_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_41_46 : 6;
+		u64 dpi_dma : 1;
+		u64 reserved_37_39 : 3;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en4_1_w1c cvmx_ciu_intx_en4_1_w1c_t;
+
+/**
+ * cvmx_ciu_int#_en4_1_w1s
+ *
+ * Write-1-to-set version of the CIU_INTX_EN4_1 register, read back corresponding CIU_INTX_EN4_1
+ * value.
+ */
+union cvmx_ciu_intx_en4_1_w1s {
+	u64 u64;
+	struct cvmx_ciu_intx_en4_1_w1s_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 reserved_50_50 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 wdog : 16;
+	} s;
+	struct cvmx_ciu_intx_en4_1_w1s_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 reserved_4_15 : 12;
+		u64 wdog : 4;
+	} cn52xx;
+	struct cvmx_ciu_intx_en4_1_w1s_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 wdog : 12;
+	} cn56xx;
+	struct cvmx_ciu_intx_en4_1_w1s_cn58xx {
+		u64 reserved_16_63 : 48;
+		u64 wdog : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_en4_1_w1s_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_intx_en4_1_w1s_cn63xx {
+		u64 rst : 1;
+		u64 reserved_57_62 : 6;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_37_45 : 9;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_6_17 : 12;
+		u64 wdog : 6;
+	} cn63xx;
+	struct cvmx_ciu_intx_en4_1_w1s_cn63xx cn63xxp1;
+	struct cvmx_ciu_intx_en4_1_w1s_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_intx_en4_1_w1s_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_intx_en4_1_w1s_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_en4_1_w1s_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_41_46 : 6;
+		u64 dpi_dma : 1;
+		u64 reserved_37_39 : 3;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_en4_1_w1s cvmx_ciu_intx_en4_1_w1s_t;
+
+/**
+ * cvmx_ciu_int#_sum0
+ *
+ * The remaining IP4 summary bits will be CIU_INTX_SUM4.
+ * CIU_INT0_SUM0:  PP0/IP2
+ * CIU_INT1_SUM0:  PP0/IP3
+ * CIU_INT2_SUM0:  PP1/IP2
+ * CIU_INT3_SUM0:  PP1/IP3
+ * CIU_INT4_SUM0:  PP2/IP2
+ * CIU_INT5_SUM0:  PP2/IP3
+ * CIU_INT6_SUM0:  PP3/IP2
+ * CIU_INT7_SUM0:  PP3/IP3
+ *  - .....
+ * (hole)
+ * CIU_INT32_SUM0: IO 0 (PEM0).
+ * CIU_INT33_SUM0: IO 1 (Reserved in o70, in separate address group)
+ */
+union cvmx_ciu_intx_sum0 {
+	u64 u64;
+	struct cvmx_ciu_intx_sum0_s {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} s;
+	struct cvmx_ciu_intx_sum0_cn30xx {
+		u64 reserved_59_63 : 5;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 reserved_47_47 : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn30xx;
+	struct cvmx_ciu_intx_sum0_cn31xx {
+		u64 reserved_59_63 : 5;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn31xx;
+	struct cvmx_ciu_intx_sum0_cn38xx {
+		u64 reserved_56_63 : 8;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn38xx;
+	struct cvmx_ciu_intx_sum0_cn38xx cn38xxp2;
+	struct cvmx_ciu_intx_sum0_cn30xx cn50xx;
+	struct cvmx_ciu_intx_sum0_cn52xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn52xx;
+	struct cvmx_ciu_intx_sum0_cn52xx cn52xxp1;
+	struct cvmx_ciu_intx_sum0_cn56xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn56xx;
+	struct cvmx_ciu_intx_sum0_cn56xx cn56xxp1;
+	struct cvmx_ciu_intx_sum0_cn38xx cn58xx;
+	struct cvmx_ciu_intx_sum0_cn38xx cn58xxp1;
+	struct cvmx_ciu_intx_sum0_cn61xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn61xx;
+	struct cvmx_ciu_intx_sum0_cn52xx cn63xx;
+	struct cvmx_ciu_intx_sum0_cn52xx cn63xxp1;
+	struct cvmx_ciu_intx_sum0_cn66xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 reserved_57_57 : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn66xx;
+	struct cvmx_ciu_intx_sum0_cn70xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 reserved_56_56 : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 reserved_46_47 : 2;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn70xx;
+	struct cvmx_ciu_intx_sum0_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_sum0_cnf71xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_sum0 cvmx_ciu_intx_sum0_t;
+
+/**
+ * cvmx_ciu_int#_sum4
+ *
+ * CIU_INT0_SUM4:   PP0  /IP4
+ * CIU_INT1_SUM4:   PP1  /IP4
+ * - ...
+ * CIU_INT3_SUM4:   PP3  /IP4
+ */
+union cvmx_ciu_intx_sum4 {
+	u64 u64;
+	struct cvmx_ciu_intx_sum4_s {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} s;
+	struct cvmx_ciu_intx_sum4_cn50xx {
+		u64 reserved_59_63 : 5;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 reserved_47_47 : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn50xx;
+	struct cvmx_ciu_intx_sum4_cn52xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn52xx;
+	struct cvmx_ciu_intx_sum4_cn52xx cn52xxp1;
+	struct cvmx_ciu_intx_sum4_cn56xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn56xx;
+	struct cvmx_ciu_intx_sum4_cn56xx cn56xxp1;
+	struct cvmx_ciu_intx_sum4_cn58xx {
+		u64 reserved_56_63 : 8;
+		u64 timer : 4;
+		u64 key_zero : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn58xx;
+	struct cvmx_ciu_intx_sum4_cn58xx cn58xxp1;
+	struct cvmx_ciu_intx_sum4_cn61xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn61xx;
+	struct cvmx_ciu_intx_sum4_cn52xx cn63xx;
+	struct cvmx_ciu_intx_sum4_cn52xx cn63xxp1;
+	struct cvmx_ciu_intx_sum4_cn66xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 reserved_57_57 : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn66xx;
+	struct cvmx_ciu_intx_sum4_cn70xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 reserved_56_56 : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 reserved_46_47 : 2;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn70xx;
+	struct cvmx_ciu_intx_sum4_cn70xx cn70xxp1;
+	struct cvmx_ciu_intx_sum4_cnf71xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_intx_sum4 cvmx_ciu_intx_sum4_t;
+
+/**
+ * cvmx_ciu_int33_sum0
+ *
+ * This bit is associated with CIU_INTX_SUM0. Reserved for o70 for future expansion.
+ *
+ */
+union cvmx_ciu_int33_sum0 {
+	u64 u64;
+	struct cvmx_ciu_int33_sum0_s {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} s;
+	struct cvmx_ciu_int33_sum0_s cn61xx;
+	struct cvmx_ciu_int33_sum0_cn63xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 reserved_57_58 : 2;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 reserved_51_51 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn63xx;
+	struct cvmx_ciu_int33_sum0_cn63xx cn63xxp1;
+	struct cvmx_ciu_int33_sum0_cn66xx {
+		u64 bootdma : 1;
+		u64 mii : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 reserved_57_57 : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn66xx;
+	struct cvmx_ciu_int33_sum0_cn70xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 reserved_56_56 : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 gmx_drp : 2;
+		u64 reserved_47_46 : 2;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cn70xx;
+	struct cvmx_ciu_int33_sum0_cn70xx cn70xxp1;
+	struct cvmx_ciu_int33_sum0_cnf71xx {
+		u64 bootdma : 1;
+		u64 reserved_62_62 : 1;
+		u64 ipdppthr : 1;
+		u64 powiq : 1;
+		u64 twsi2 : 1;
+		u64 mpi : 1;
+		u64 pcm : 1;
+		u64 usb : 1;
+		u64 timer : 4;
+		u64 sum2 : 1;
+		u64 ipd_drp : 1;
+		u64 reserved_49_49 : 1;
+		u64 gmx_drp : 1;
+		u64 trace : 1;
+		u64 rml : 1;
+		u64 twsi : 1;
+		u64 wdog_sum : 1;
+		u64 pci_msi : 4;
+		u64 pci_int : 4;
+		u64 uart : 2;
+		u64 mbox : 2;
+		u64 gpio : 16;
+		u64 workq : 16;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_int33_sum0 cvmx_ciu_int33_sum0_t;
+
+/**
+ * cvmx_ciu_int_dbg_sel
+ */
+union cvmx_ciu_int_dbg_sel {
+	u64 u64;
+	struct cvmx_ciu_int_dbg_sel_s {
+		u64 reserved_19_63 : 45;
+		u64 sel : 3;
+		u64 reserved_10_15 : 6;
+		u64 irq : 2;
+		u64 reserved_5_7 : 3;
+		u64 pp : 5;
+	} s;
+	struct cvmx_ciu_int_dbg_sel_cn61xx {
+		u64 reserved_19_63 : 45;
+		u64 sel : 3;
+		u64 reserved_10_15 : 6;
+		u64 irq : 2;
+		u64 reserved_4_7 : 4;
+		u64 pp : 4;
+	} cn61xx;
+	struct cvmx_ciu_int_dbg_sel_cn63xx {
+		u64 reserved_19_63 : 45;
+		u64 sel : 3;
+		u64 reserved_10_15 : 6;
+		u64 irq : 2;
+		u64 reserved_3_7 : 5;
+		u64 pp : 3;
+	} cn63xx;
+	struct cvmx_ciu_int_dbg_sel_cn61xx cn66xx;
+	struct cvmx_ciu_int_dbg_sel_s cn68xx;
+	struct cvmx_ciu_int_dbg_sel_s cn68xxp1;
+	struct cvmx_ciu_int_dbg_sel_cn61xx cnf71xx;
+};
+
+typedef union cvmx_ciu_int_dbg_sel cvmx_ciu_int_dbg_sel_t;
+
+/**
+ * cvmx_ciu_int_sum1
+ *
+ * CIU_INT_SUM1 is kept to keep backward compatible.
+ * Refer to CIU_SUM1_PPX_IPx which is the one should use.
+ */
+union cvmx_ciu_int_sum1 {
+	u64 u64;
+	struct cvmx_ciu_int_sum1_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 reserved_50_50 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 wdog : 16;
+	} s;
+	struct cvmx_ciu_int_sum1_cn30xx {
+		u64 reserved_1_63 : 63;
+		u64 wdog : 1;
+	} cn30xx;
+	struct cvmx_ciu_int_sum1_cn31xx {
+		u64 reserved_2_63 : 62;
+		u64 wdog : 2;
+	} cn31xx;
+	struct cvmx_ciu_int_sum1_cn38xx {
+		u64 reserved_16_63 : 48;
+		u64 wdog : 16;
+	} cn38xx;
+	struct cvmx_ciu_int_sum1_cn38xx cn38xxp2;
+	struct cvmx_ciu_int_sum1_cn31xx cn50xx;
+	struct cvmx_ciu_int_sum1_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 reserved_4_15 : 12;
+		u64 wdog : 4;
+	} cn52xx;
+	struct cvmx_ciu_int_sum1_cn52xxp1 {
+		u64 reserved_19_63 : 45;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 uart2 : 1;
+		u64 reserved_4_15 : 12;
+		u64 wdog : 4;
+	} cn52xxp1;
+	struct cvmx_ciu_int_sum1_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 wdog : 12;
+	} cn56xx;
+	struct cvmx_ciu_int_sum1_cn56xx cn56xxp1;
+	struct cvmx_ciu_int_sum1_cn38xx cn58xx;
+	struct cvmx_ciu_int_sum1_cn38xx cn58xxp1;
+	struct cvmx_ciu_int_sum1_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_int_sum1_cn63xx {
+		u64 rst : 1;
+		u64 reserved_57_62 : 6;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 srio1 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_37_45 : 9;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_6_17 : 12;
+		u64 wdog : 6;
+	} cn63xx;
+	struct cvmx_ciu_int_sum1_cn63xx cn63xxp1;
+	struct cvmx_ciu_int_sum1_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_int_sum1_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_int_sum1_cn70xx cn70xxp1;
+	struct cvmx_ciu_int_sum1_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_37_46 : 10;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_int_sum1 cvmx_ciu_int_sum1_t;
+
+/**
+ * cvmx_ciu_intr_slowdown
+ */
+union cvmx_ciu_intr_slowdown {
+	u64 u64;
+	struct cvmx_ciu_intr_slowdown_s {
+		u64 reserved_3_63 : 61;
+		u64 ctl : 3;
+	} s;
+	struct cvmx_ciu_intr_slowdown_s cn70xx;
+	struct cvmx_ciu_intr_slowdown_s cn70xxp1;
+};
+
+typedef union cvmx_ciu_intr_slowdown cvmx_ciu_intr_slowdown_t;
+
+/**
+ * cvmx_ciu_mbox_clr#
+ */
+union cvmx_ciu_mbox_clrx {
+	u64 u64;
+	struct cvmx_ciu_mbox_clrx_s {
+		u64 reserved_32_63 : 32;
+		u64 bits : 32;
+	} s;
+	struct cvmx_ciu_mbox_clrx_s cn30xx;
+	struct cvmx_ciu_mbox_clrx_s cn31xx;
+	struct cvmx_ciu_mbox_clrx_s cn38xx;
+	struct cvmx_ciu_mbox_clrx_s cn38xxp2;
+	struct cvmx_ciu_mbox_clrx_s cn50xx;
+	struct cvmx_ciu_mbox_clrx_s cn52xx;
+	struct cvmx_ciu_mbox_clrx_s cn52xxp1;
+	struct cvmx_ciu_mbox_clrx_s cn56xx;
+	struct cvmx_ciu_mbox_clrx_s cn56xxp1;
+	struct cvmx_ciu_mbox_clrx_s cn58xx;
+	struct cvmx_ciu_mbox_clrx_s cn58xxp1;
+	struct cvmx_ciu_mbox_clrx_s cn61xx;
+	struct cvmx_ciu_mbox_clrx_s cn63xx;
+	struct cvmx_ciu_mbox_clrx_s cn63xxp1;
+	struct cvmx_ciu_mbox_clrx_s cn66xx;
+	struct cvmx_ciu_mbox_clrx_s cn68xx;
+	struct cvmx_ciu_mbox_clrx_s cn68xxp1;
+	struct cvmx_ciu_mbox_clrx_s cn70xx;
+	struct cvmx_ciu_mbox_clrx_s cn70xxp1;
+	struct cvmx_ciu_mbox_clrx_s cnf71xx;
+};
+
+typedef union cvmx_ciu_mbox_clrx cvmx_ciu_mbox_clrx_t;
+
+/**
+ * cvmx_ciu_mbox_set#
+ */
+union cvmx_ciu_mbox_setx {
+	u64 u64;
+	struct cvmx_ciu_mbox_setx_s {
+		u64 reserved_32_63 : 32;
+		u64 bits : 32;
+	} s;
+	struct cvmx_ciu_mbox_setx_s cn30xx;
+	struct cvmx_ciu_mbox_setx_s cn31xx;
+	struct cvmx_ciu_mbox_setx_s cn38xx;
+	struct cvmx_ciu_mbox_setx_s cn38xxp2;
+	struct cvmx_ciu_mbox_setx_s cn50xx;
+	struct cvmx_ciu_mbox_setx_s cn52xx;
+	struct cvmx_ciu_mbox_setx_s cn52xxp1;
+	struct cvmx_ciu_mbox_setx_s cn56xx;
+	struct cvmx_ciu_mbox_setx_s cn56xxp1;
+	struct cvmx_ciu_mbox_setx_s cn58xx;
+	struct cvmx_ciu_mbox_setx_s cn58xxp1;
+	struct cvmx_ciu_mbox_setx_s cn61xx;
+	struct cvmx_ciu_mbox_setx_s cn63xx;
+	struct cvmx_ciu_mbox_setx_s cn63xxp1;
+	struct cvmx_ciu_mbox_setx_s cn66xx;
+	struct cvmx_ciu_mbox_setx_s cn68xx;
+	struct cvmx_ciu_mbox_setx_s cn68xxp1;
+	struct cvmx_ciu_mbox_setx_s cn70xx;
+	struct cvmx_ciu_mbox_setx_s cn70xxp1;
+	struct cvmx_ciu_mbox_setx_s cnf71xx;
+};
+
+typedef union cvmx_ciu_mbox_setx cvmx_ciu_mbox_setx_t;
+
+/**
+ * cvmx_ciu_nmi
+ */
+union cvmx_ciu_nmi {
+	u64 u64;
+	struct cvmx_ciu_nmi_s {
+		u64 reserved_32_63 : 32;
+		u64 nmi : 32;
+	} s;
+	struct cvmx_ciu_nmi_cn30xx {
+		u64 reserved_1_63 : 63;
+		u64 nmi : 1;
+	} cn30xx;
+	struct cvmx_ciu_nmi_cn31xx {
+		u64 reserved_2_63 : 62;
+		u64 nmi : 2;
+	} cn31xx;
+	struct cvmx_ciu_nmi_cn38xx {
+		u64 reserved_16_63 : 48;
+		u64 nmi : 16;
+	} cn38xx;
+	struct cvmx_ciu_nmi_cn38xx cn38xxp2;
+	struct cvmx_ciu_nmi_cn31xx cn50xx;
+	struct cvmx_ciu_nmi_cn52xx {
+		u64 reserved_4_63 : 60;
+		u64 nmi : 4;
+	} cn52xx;
+	struct cvmx_ciu_nmi_cn52xx cn52xxp1;
+	struct cvmx_ciu_nmi_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 nmi : 12;
+	} cn56xx;
+	struct cvmx_ciu_nmi_cn56xx cn56xxp1;
+	struct cvmx_ciu_nmi_cn38xx cn58xx;
+	struct cvmx_ciu_nmi_cn38xx cn58xxp1;
+	struct cvmx_ciu_nmi_cn52xx cn61xx;
+	struct cvmx_ciu_nmi_cn63xx {
+		u64 reserved_6_63 : 58;
+		u64 nmi : 6;
+	} cn63xx;
+	struct cvmx_ciu_nmi_cn63xx cn63xxp1;
+	struct cvmx_ciu_nmi_cn66xx {
+		u64 reserved_10_63 : 54;
+		u64 nmi : 10;
+	} cn66xx;
+	struct cvmx_ciu_nmi_s cn68xx;
+	struct cvmx_ciu_nmi_s cn68xxp1;
+	struct cvmx_ciu_nmi_cn52xx cn70xx;
+	struct cvmx_ciu_nmi_cn52xx cn70xxp1;
+	struct cvmx_ciu_nmi_cn52xx cnf71xx;
+};
+
+typedef union cvmx_ciu_nmi cvmx_ciu_nmi_t;
+
+/**
+ * cvmx_ciu_pci_inta
+ */
+union cvmx_ciu_pci_inta {
+	u64 u64;
+	struct cvmx_ciu_pci_inta_s {
+		u64 reserved_2_63 : 62;
+		u64 intr : 2;
+	} s;
+	struct cvmx_ciu_pci_inta_s cn30xx;
+	struct cvmx_ciu_pci_inta_s cn31xx;
+	struct cvmx_ciu_pci_inta_s cn38xx;
+	struct cvmx_ciu_pci_inta_s cn38xxp2;
+	struct cvmx_ciu_pci_inta_s cn50xx;
+	struct cvmx_ciu_pci_inta_s cn52xx;
+	struct cvmx_ciu_pci_inta_s cn52xxp1;
+	struct cvmx_ciu_pci_inta_s cn56xx;
+	struct cvmx_ciu_pci_inta_s cn56xxp1;
+	struct cvmx_ciu_pci_inta_s cn58xx;
+	struct cvmx_ciu_pci_inta_s cn58xxp1;
+	struct cvmx_ciu_pci_inta_s cn61xx;
+	struct cvmx_ciu_pci_inta_s cn63xx;
+	struct cvmx_ciu_pci_inta_s cn63xxp1;
+	struct cvmx_ciu_pci_inta_s cn66xx;
+	struct cvmx_ciu_pci_inta_s cn68xx;
+	struct cvmx_ciu_pci_inta_s cn68xxp1;
+	struct cvmx_ciu_pci_inta_s cn70xx;
+	struct cvmx_ciu_pci_inta_s cn70xxp1;
+	struct cvmx_ciu_pci_inta_s cnf71xx;
+};
+
+typedef union cvmx_ciu_pci_inta cvmx_ciu_pci_inta_t;
+
+/**
+ * cvmx_ciu_pp_bist_stat
+ */
+union cvmx_ciu_pp_bist_stat {
+	u64 u64;
+	struct cvmx_ciu_pp_bist_stat_s {
+		u64 reserved_32_63 : 32;
+		u64 pp_bist : 32;
+	} s;
+	struct cvmx_ciu_pp_bist_stat_s cn68xx;
+	struct cvmx_ciu_pp_bist_stat_s cn68xxp1;
+};
+
+typedef union cvmx_ciu_pp_bist_stat cvmx_ciu_pp_bist_stat_t;
+
+/**
+ * cvmx_ciu_pp_dbg
+ */
+union cvmx_ciu_pp_dbg {
+	u64 u64;
+	struct cvmx_ciu_pp_dbg_s {
+		u64 reserved_48_63 : 16;
+		u64 ppdbg : 48;
+	} s;
+	struct cvmx_ciu_pp_dbg_cn30xx {
+		u64 reserved_1_63 : 63;
+		u64 ppdbg : 1;
+	} cn30xx;
+	struct cvmx_ciu_pp_dbg_cn31xx {
+		u64 reserved_2_63 : 62;
+		u64 ppdbg : 2;
+	} cn31xx;
+	struct cvmx_ciu_pp_dbg_cn38xx {
+		u64 reserved_16_63 : 48;
+		u64 ppdbg : 16;
+	} cn38xx;
+	struct cvmx_ciu_pp_dbg_cn38xx cn38xxp2;
+	struct cvmx_ciu_pp_dbg_cn31xx cn50xx;
+	struct cvmx_ciu_pp_dbg_cn52xx {
+		u64 reserved_4_63 : 60;
+		u64 ppdbg : 4;
+	} cn52xx;
+	struct cvmx_ciu_pp_dbg_cn52xx cn52xxp1;
+	struct cvmx_ciu_pp_dbg_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 ppdbg : 12;
+	} cn56xx;
+	struct cvmx_ciu_pp_dbg_cn56xx cn56xxp1;
+	struct cvmx_ciu_pp_dbg_cn38xx cn58xx;
+	struct cvmx_ciu_pp_dbg_cn38xx cn58xxp1;
+	struct cvmx_ciu_pp_dbg_cn52xx cn61xx;
+	struct cvmx_ciu_pp_dbg_cn63xx {
+		u64 reserved_6_63 : 58;
+		u64 ppdbg : 6;
+	} cn63xx;
+	struct cvmx_ciu_pp_dbg_cn63xx cn63xxp1;
+	struct cvmx_ciu_pp_dbg_cn66xx {
+		u64 reserved_10_63 : 54;
+		u64 ppdbg : 10;
+	} cn66xx;
+	struct cvmx_ciu_pp_dbg_cn68xx {
+		u64 reserved_32_63 : 32;
+		u64 ppdbg : 32;
+	} cn68xx;
+	struct cvmx_ciu_pp_dbg_cn68xx cn68xxp1;
+	struct cvmx_ciu_pp_dbg_cn52xx cn70xx;
+	struct cvmx_ciu_pp_dbg_cn52xx cn70xxp1;
+	struct cvmx_ciu_pp_dbg_cn38xx cn73xx;
+	struct cvmx_ciu_pp_dbg_s cn78xx;
+	struct cvmx_ciu_pp_dbg_s cn78xxp1;
+	struct cvmx_ciu_pp_dbg_cn52xx cnf71xx;
+	struct cvmx_ciu_pp_dbg_cn38xx cnf75xx;
+};
+
+typedef union cvmx_ciu_pp_dbg cvmx_ciu_pp_dbg_t;
+
+/**
+ * cvmx_ciu_pp_poke#
+ *
+ * CIU_PP_POKE for CIU_WDOG
+ *
+ */
+union cvmx_ciu_pp_pokex {
+	u64 u64;
+	struct cvmx_ciu_pp_pokex_s {
+		u64 poke : 64;
+	} s;
+	struct cvmx_ciu_pp_pokex_s cn30xx;
+	struct cvmx_ciu_pp_pokex_s cn31xx;
+	struct cvmx_ciu_pp_pokex_s cn38xx;
+	struct cvmx_ciu_pp_pokex_s cn38xxp2;
+	struct cvmx_ciu_pp_pokex_s cn50xx;
+	struct cvmx_ciu_pp_pokex_s cn52xx;
+	struct cvmx_ciu_pp_pokex_s cn52xxp1;
+	struct cvmx_ciu_pp_pokex_s cn56xx;
+	struct cvmx_ciu_pp_pokex_s cn56xxp1;
+	struct cvmx_ciu_pp_pokex_s cn58xx;
+	struct cvmx_ciu_pp_pokex_s cn58xxp1;
+	struct cvmx_ciu_pp_pokex_s cn61xx;
+	struct cvmx_ciu_pp_pokex_s cn63xx;
+	struct cvmx_ciu_pp_pokex_s cn63xxp1;
+	struct cvmx_ciu_pp_pokex_s cn66xx;
+	struct cvmx_ciu_pp_pokex_s cn68xx;
+	struct cvmx_ciu_pp_pokex_s cn68xxp1;
+	struct cvmx_ciu_pp_pokex_s cn70xx;
+	struct cvmx_ciu_pp_pokex_s cn70xxp1;
+	struct cvmx_ciu_pp_pokex_cn73xx {
+		u64 reserved_1_63 : 63;
+		u64 poke : 1;
+	} cn73xx;
+	struct cvmx_ciu_pp_pokex_cn73xx cn78xx;
+	struct cvmx_ciu_pp_pokex_cn73xx cn78xxp1;
+	struct cvmx_ciu_pp_pokex_s cnf71xx;
+	struct cvmx_ciu_pp_pokex_cn73xx cnf75xx;
+};
+
+typedef union cvmx_ciu_pp_pokex cvmx_ciu_pp_pokex_t;
+
+/**
+ * cvmx_ciu_pp_rst
+ *
+ * This register contains the reset control for each core. A 1 holds a core in reset, 0 release
+ * from reset. It resets to all ones when REMOTE_BOOT is enabled or all ones excluding bit 0 when
+ * REMOTE_BOOT is disabled. Writes to this register should occur only if the CIU_PP_RST_PENDING
+ * register is cleared.
+ */
+union cvmx_ciu_pp_rst {
+	u64 u64;
+	struct cvmx_ciu_pp_rst_s {
+		u64 reserved_48_63 : 16;
+		u64 rst : 47;
+		u64 rst0 : 1;
+	} s;
+	struct cvmx_ciu_pp_rst_cn30xx {
+		u64 reserved_1_63 : 63;
+		u64 rst0 : 1;
+	} cn30xx;
+	struct cvmx_ciu_pp_rst_cn31xx {
+		u64 reserved_2_63 : 62;
+		u64 rst : 1;
+		u64 rst0 : 1;
+	} cn31xx;
+	struct cvmx_ciu_pp_rst_cn38xx {
+		u64 reserved_16_63 : 48;
+		u64 rst : 15;
+		u64 rst0 : 1;
+	} cn38xx;
+	struct cvmx_ciu_pp_rst_cn38xx cn38xxp2;
+	struct cvmx_ciu_pp_rst_cn31xx cn50xx;
+	struct cvmx_ciu_pp_rst_cn52xx {
+		u64 reserved_4_63 : 60;
+		u64 rst : 3;
+		u64 rst0 : 1;
+	} cn52xx;
+	struct cvmx_ciu_pp_rst_cn52xx cn52xxp1;
+	struct cvmx_ciu_pp_rst_cn56xx {
+		u64 reserved_12_63 : 52;
+		u64 rst : 11;
+		u64 rst0 : 1;
+	} cn56xx;
+	struct cvmx_ciu_pp_rst_cn56xx cn56xxp1;
+	struct cvmx_ciu_pp_rst_cn38xx cn58xx;
+	struct cvmx_ciu_pp_rst_cn38xx cn58xxp1;
+	struct cvmx_ciu_pp_rst_cn52xx cn61xx;
+	struct cvmx_ciu_pp_rst_cn63xx {
+		u64 reserved_6_63 : 58;
+		u64 rst : 5;
+		u64 rst0 : 1;
+	} cn63xx;
+	struct cvmx_ciu_pp_rst_cn63xx cn63xxp1;
+	struct cvmx_ciu_pp_rst_cn66xx {
+		u64 reserved_10_63 : 54;
+		u64 rst : 9;
+		u64 rst0 : 1;
+	} cn66xx;
+	struct cvmx_ciu_pp_rst_cn68xx {
+		u64 reserved_32_63 : 32;
+		u64 rst : 31;
+		u64 rst0 : 1;
+	} cn68xx;
+	struct cvmx_ciu_pp_rst_cn68xx cn68xxp1;
+	struct cvmx_ciu_pp_rst_cn52xx cn70xx;
+	struct cvmx_ciu_pp_rst_cn52xx cn70xxp1;
+	struct cvmx_ciu_pp_rst_cn38xx cn73xx;
+	struct cvmx_ciu_pp_rst_s cn78xx;
+	struct cvmx_ciu_pp_rst_s cn78xxp1;
+	struct cvmx_ciu_pp_rst_cn52xx cnf71xx;
+	struct cvmx_ciu_pp_rst_cn38xx cnf75xx;
+};
+
+typedef union cvmx_ciu_pp_rst cvmx_ciu_pp_rst_t;
+
+/**
+ * cvmx_ciu_pp_rst_pending
+ *
+ * This register contains the reset status for each core.
+ *
+ */
+union cvmx_ciu_pp_rst_pending {
+	u64 u64;
+	struct cvmx_ciu_pp_rst_pending_s {
+		u64 reserved_48_63 : 16;
+		u64 pend : 48;
+	} s;
+	struct cvmx_ciu_pp_rst_pending_s cn70xx;
+	struct cvmx_ciu_pp_rst_pending_s cn70xxp1;
+	struct cvmx_ciu_pp_rst_pending_cn73xx {
+		u64 reserved_16_63 : 48;
+		u64 pend : 16;
+	} cn73xx;
+	struct cvmx_ciu_pp_rst_pending_s cn78xx;
+	struct cvmx_ciu_pp_rst_pending_s cn78xxp1;
+	struct cvmx_ciu_pp_rst_pending_cn73xx cnf75xx;
+};
+
+typedef union cvmx_ciu_pp_rst_pending cvmx_ciu_pp_rst_pending_t;
+
+/**
+ * cvmx_ciu_qlm0
+ *
+ * Notes:
+ * This register is only reset by cold reset.
+ *
+ */
+union cvmx_ciu_qlm0 {
+	u64 u64;
+	struct cvmx_ciu_qlm0_s {
+		u64 g2bypass : 1;
+		u64 reserved_53_62 : 10;
+		u64 g2deemph : 5;
+		u64 reserved_45_47 : 3;
+		u64 g2margin : 5;
+		u64 reserved_32_39 : 8;
+		u64 txbypass : 1;
+		u64 reserved_21_30 : 10;
+		u64 txdeemph : 5;
+		u64 reserved_13_15 : 3;
+		u64 txmargin : 5;
+		u64 reserved_4_7 : 4;
+		u64 lane_en : 4;
+	} s;
+	struct cvmx_ciu_qlm0_s cn61xx;
+	struct cvmx_ciu_qlm0_s cn63xx;
+	struct cvmx_ciu_qlm0_cn63xxp1 {
+		u64 reserved_32_63 : 32;
+		u64 txbypass : 1;
+		u64 reserved_20_30 : 11;
+		u64 txdeemph : 4;
+		u64 reserved_13_15 : 3;
+		u64 txmargin : 5;
+		u64 reserved_4_7 : 4;
+		u64 lane_en : 4;
+	} cn63xxp1;
+	struct cvmx_ciu_qlm0_s cn66xx;
+	struct cvmx_ciu_qlm0_cn68xx {
+		u64 reserved_32_63 : 32;
+		u64 txbypass : 1;
+		u64 reserved_21_30 : 10;
+		u64 txdeemph : 5;
+		u64 reserved_13_15 : 3;
+		u64 txmargin : 5;
+		u64 reserved_4_7 : 4;
+		u64 lane_en : 4;
+	} cn68xx;
+	struct cvmx_ciu_qlm0_cn68xx cn68xxp1;
+	struct cvmx_ciu_qlm0_s cnf71xx;
+};
+
+typedef union cvmx_ciu_qlm0 cvmx_ciu_qlm0_t;
+
+/**
+ * cvmx_ciu_qlm1
+ *
+ * Notes:
+ * This register is only reset by cold reset.
+ *
+ */
+union cvmx_ciu_qlm1 {
+	u64 u64;
+	struct cvmx_ciu_qlm1_s {
+		u64 g2bypass : 1;
+		u64 reserved_53_62 : 10;
+		u64 g2deemph : 5;
+		u64 reserved_45_47 : 3;
+		u64 g2margin : 5;
+		u64 reserved_32_39 : 8;
+		u64 txbypass : 1;
+		u64 reserved_21_30 : 10;
+		u64 txdeemph : 5;
+		u64 reserved_13_15 : 3;
+		u64 txmargin : 5;
+		u64 reserved_4_7 : 4;
+		u64 lane_en : 4;
+	} s;
+	struct cvmx_ciu_qlm1_s cn61xx;
+	struct cvmx_ciu_qlm1_s cn63xx;
+	struct cvmx_ciu_qlm1_cn63xxp1 {
+		u64 reserved_32_63 : 32;
+		u64 txbypass : 1;
+		u64 reserved_20_30 : 11;
+		u64 txdeemph : 4;
+		u64 reserved_13_15 : 3;
+		u64 txmargin : 5;
+		u64 reserved_4_7 : 4;
+		u64 lane_en : 4;
+	} cn63xxp1;
+	struct cvmx_ciu_qlm1_s cn66xx;
+	struct cvmx_ciu_qlm1_s cn68xx;
+	struct cvmx_ciu_qlm1_s cn68xxp1;
+	struct cvmx_ciu_qlm1_s cnf71xx;
+};
+
+typedef union cvmx_ciu_qlm1 cvmx_ciu_qlm1_t;
+
+/**
+ * cvmx_ciu_qlm2
+ *
+ * Notes:
+ * This register is only reset by cold reset.
+ *
+ */
+union cvmx_ciu_qlm2 {
+	u64 u64;
+	struct cvmx_ciu_qlm2_s {
+		u64 g2bypass : 1;
+		u64 reserved_53_62 : 10;
+		u64 g2deemph : 5;
+		u64 reserved_45_47 : 3;
+		u64 g2margin : 5;
+		u64 reserved_32_39 : 8;
+		u64 txbypass : 1;
+		u64 reserved_21_30 : 10;
+		u64 txdeemph : 5;
+		u64 reserved_13_15 : 3;
+		u64 txmargin : 5;
+		u64 reserved_4_7 : 4;
+		u64 lane_en : 4;
+	} s;
+	struct cvmx_ciu_qlm2_cn61xx {
+		u64 reserved_32_63 : 32;
+		u64 txbypass : 1;
+		u64 reserved_21_30 : 10;
+		u64 txdeemph : 5;
+		u64 reserved_13_15 : 3;
+		u64 txmargin : 5;
+		u64 reserved_4_7 : 4;
+		u64 lane_en : 4;
+	} cn61xx;
+	struct cvmx_ciu_qlm2_cn61xx cn63xx;
+	struct cvmx_ciu_qlm2_cn63xxp1 {
+		u64 reserved_32_63 : 32;
+		u64 txbypass : 1;
+		u64 reserved_20_30 : 11;
+		u64 txdeemph : 4;
+		u64 reserved_13_15 : 3;
+		u64 txmargin : 5;
+		u64 reserved_4_7 : 4;
+		u64 lane_en : 4;
+	} cn63xxp1;
+	struct cvmx_ciu_qlm2_cn61xx cn66xx;
+	struct cvmx_ciu_qlm2_s cn68xx;
+	struct cvmx_ciu_qlm2_s cn68xxp1;
+	struct cvmx_ciu_qlm2_cn61xx cnf71xx;
+};
+
+typedef union cvmx_ciu_qlm2 cvmx_ciu_qlm2_t;
+
+/**
+ * cvmx_ciu_qlm3
+ *
+ * Notes:
+ * This register is only reset by cold reset.
+ *
+ */
+union cvmx_ciu_qlm3 {
+	u64 u64;
+	struct cvmx_ciu_qlm3_s {
+		u64 g2bypass : 1;
+		u64 reserved_53_62 : 10;
+		u64 g2deemph : 5;
+		u64 reserved_45_47 : 3;
+		u64 g2margin : 5;
+		u64 reserved_32_39 : 8;
+		u64 txbypass : 1;
+		u64 reserved_21_30 : 10;
+		u64 txdeemph : 5;
+		u64 reserved_13_15 : 3;
+		u64 txmargin : 5;
+		u64 reserved_4_7 : 4;
+		u64 lane_en : 4;
+	} s;
+	struct cvmx_ciu_qlm3_s cn68xx;
+	struct cvmx_ciu_qlm3_s cn68xxp1;
+};
+
+typedef union cvmx_ciu_qlm3 cvmx_ciu_qlm3_t;
+
+/**
+ * cvmx_ciu_qlm4
+ *
+ * Notes:
+ * This register is only reset by cold reset.
+ *
+ */
+union cvmx_ciu_qlm4 {
+	u64 u64;
+	struct cvmx_ciu_qlm4_s {
+		u64 g2bypass : 1;
+		u64 reserved_53_62 : 10;
+		u64 g2deemph : 5;
+		u64 reserved_45_47 : 3;
+		u64 g2margin : 5;
+		u64 reserved_32_39 : 8;
+		u64 txbypass : 1;
+		u64 reserved_21_30 : 10;
+		u64 txdeemph : 5;
+		u64 reserved_13_15 : 3;
+		u64 txmargin : 5;
+		u64 reserved_4_7 : 4;
+		u64 lane_en : 4;
+	} s;
+	struct cvmx_ciu_qlm4_s cn68xx;
+	struct cvmx_ciu_qlm4_s cn68xxp1;
+};
+
+typedef union cvmx_ciu_qlm4 cvmx_ciu_qlm4_t;
+
+/**
+ * cvmx_ciu_qlm_dcok
+ */
+union cvmx_ciu_qlm_dcok {
+	u64 u64;
+	struct cvmx_ciu_qlm_dcok_s {
+		u64 reserved_4_63 : 60;
+		u64 qlm_dcok : 4;
+	} s;
+	struct cvmx_ciu_qlm_dcok_cn52xx {
+		u64 reserved_2_63 : 62;
+		u64 qlm_dcok : 2;
+	} cn52xx;
+	struct cvmx_ciu_qlm_dcok_cn52xx cn52xxp1;
+	struct cvmx_ciu_qlm_dcok_s cn56xx;
+	struct cvmx_ciu_qlm_dcok_s cn56xxp1;
+};
+
+typedef union cvmx_ciu_qlm_dcok cvmx_ciu_qlm_dcok_t;
+
+/**
+ * cvmx_ciu_qlm_jtgc
+ */
+union cvmx_ciu_qlm_jtgc {
+	u64 u64;
+	struct cvmx_ciu_qlm_jtgc_s {
+		u64 reserved_17_63 : 47;
+		u64 bypass_ext : 1;
+		u64 reserved_11_15 : 5;
+		u64 clk_div : 3;
+		u64 reserved_7_7 : 1;
+		u64 mux_sel : 3;
+		u64 bypass : 4;
+	} s;
+	struct cvmx_ciu_qlm_jtgc_cn52xx {
+		u64 reserved_11_63 : 53;
+		u64 clk_div : 3;
+		u64 reserved_5_7 : 3;
+		u64 mux_sel : 1;
+		u64 reserved_2_3 : 2;
+		u64 bypass : 2;
+	} cn52xx;
+	struct cvmx_ciu_qlm_jtgc_cn52xx cn52xxp1;
+	struct cvmx_ciu_qlm_jtgc_cn56xx {
+		u64 reserved_11_63 : 53;
+		u64 clk_div : 3;
+		u64 reserved_6_7 : 2;
+		u64 mux_sel : 2;
+		u64 bypass : 4;
+	} cn56xx;
+	struct cvmx_ciu_qlm_jtgc_cn56xx cn56xxp1;
+	struct cvmx_ciu_qlm_jtgc_cn61xx {
+		u64 reserved_11_63 : 53;
+		u64 clk_div : 3;
+		u64 reserved_6_7 : 2;
+		u64 mux_sel : 2;
+		u64 reserved_3_3 : 1;
+		u64 bypass : 3;
+	} cn61xx;
+	struct cvmx_ciu_qlm_jtgc_cn61xx cn63xx;
+	struct cvmx_ciu_qlm_jtgc_cn61xx cn63xxp1;
+	struct cvmx_ciu_qlm_jtgc_cn61xx cn66xx;
+	struct cvmx_ciu_qlm_jtgc_s cn68xx;
+	struct cvmx_ciu_qlm_jtgc_s cn68xxp1;
+	struct cvmx_ciu_qlm_jtgc_cn61xx cnf71xx;
+};
+
+typedef union cvmx_ciu_qlm_jtgc cvmx_ciu_qlm_jtgc_t;
+
+/**
+ * cvmx_ciu_qlm_jtgd
+ */
+union cvmx_ciu_qlm_jtgd {
+	u64 u64;
+	struct cvmx_ciu_qlm_jtgd_s {
+		u64 capture : 1;
+		u64 shift : 1;
+		u64 update : 1;
+		u64 reserved_45_60 : 16;
+		u64 select : 5;
+		u64 reserved_37_39 : 3;
+		u64 shft_cnt : 5;
+		u64 shft_reg : 32;
+	} s;
+	struct cvmx_ciu_qlm_jtgd_cn52xx {
+		u64 capture : 1;
+		u64 shift : 1;
+		u64 update : 1;
+		u64 reserved_42_60 : 19;
+		u64 select : 2;
+		u64 reserved_37_39 : 3;
+		u64 shft_cnt : 5;
+		u64 shft_reg : 32;
+	} cn52xx;
+	struct cvmx_ciu_qlm_jtgd_cn52xx cn52xxp1;
+	struct cvmx_ciu_qlm_jtgd_cn56xx {
+		u64 capture : 1;
+		u64 shift : 1;
+		u64 update : 1;
+		u64 reserved_44_60 : 17;
+		u64 select : 4;
+		u64 reserved_37_39 : 3;
+		u64 shft_cnt : 5;
+		u64 shft_reg : 32;
+	} cn56xx;
+	struct cvmx_ciu_qlm_jtgd_cn56xxp1 {
+		u64 capture : 1;
+		u64 shift : 1;
+		u64 update : 1;
+		u64 reserved_37_60 : 24;
+		u64 shft_cnt : 5;
+		u64 shft_reg : 32;
+	} cn56xxp1;
+	struct cvmx_ciu_qlm_jtgd_cn61xx {
+		u64 capture : 1;
+		u64 shift : 1;
+		u64 update : 1;
+		u64 reserved_43_60 : 18;
+		u64 select : 3;
+		u64 reserved_37_39 : 3;
+		u64 shft_cnt : 5;
+		u64 shft_reg : 32;
+	} cn61xx;
+	struct cvmx_ciu_qlm_jtgd_cn61xx cn63xx;
+	struct cvmx_ciu_qlm_jtgd_cn61xx cn63xxp1;
+	struct cvmx_ciu_qlm_jtgd_cn61xx cn66xx;
+	struct cvmx_ciu_qlm_jtgd_s cn68xx;
+	struct cvmx_ciu_qlm_jtgd_s cn68xxp1;
+	struct cvmx_ciu_qlm_jtgd_cn61xx cnf71xx;
+};
+
+typedef union cvmx_ciu_qlm_jtgd cvmx_ciu_qlm_jtgd_t;
+
+/**
+ * cvmx_ciu_soft_bist
+ */
+union cvmx_ciu_soft_bist {
+	u64 u64;
+	struct cvmx_ciu_soft_bist_s {
+		u64 reserved_1_63 : 63;
+		u64 soft_bist : 1;
+	} s;
+	struct cvmx_ciu_soft_bist_s cn30xx;
+	struct cvmx_ciu_soft_bist_s cn31xx;
+	struct cvmx_ciu_soft_bist_s cn38xx;
+	struct cvmx_ciu_soft_bist_s cn38xxp2;
+	struct cvmx_ciu_soft_bist_s cn50xx;
+	struct cvmx_ciu_soft_bist_s cn52xx;
+	struct cvmx_ciu_soft_bist_s cn52xxp1;
+	struct cvmx_ciu_soft_bist_s cn56xx;
+	struct cvmx_ciu_soft_bist_s cn56xxp1;
+	struct cvmx_ciu_soft_bist_s cn58xx;
+	struct cvmx_ciu_soft_bist_s cn58xxp1;
+	struct cvmx_ciu_soft_bist_s cn61xx;
+	struct cvmx_ciu_soft_bist_s cn63xx;
+	struct cvmx_ciu_soft_bist_s cn63xxp1;
+	struct cvmx_ciu_soft_bist_s cn66xx;
+	struct cvmx_ciu_soft_bist_s cn68xx;
+	struct cvmx_ciu_soft_bist_s cn68xxp1;
+	struct cvmx_ciu_soft_bist_s cn70xx;
+	struct cvmx_ciu_soft_bist_s cn70xxp1;
+	struct cvmx_ciu_soft_bist_s cnf71xx;
+};
+
+typedef union cvmx_ciu_soft_bist cvmx_ciu_soft_bist_t;
+
+/**
+ * cvmx_ciu_soft_prst
+ */
+union cvmx_ciu_soft_prst {
+	u64 u64;
+	struct cvmx_ciu_soft_prst_s {
+		u64 reserved_3_63 : 61;
+		u64 host64 : 1;
+		u64 npi : 1;
+		u64 soft_prst : 1;
+	} s;
+	struct cvmx_ciu_soft_prst_s cn30xx;
+	struct cvmx_ciu_soft_prst_s cn31xx;
+	struct cvmx_ciu_soft_prst_s cn38xx;
+	struct cvmx_ciu_soft_prst_s cn38xxp2;
+	struct cvmx_ciu_soft_prst_s cn50xx;
+	struct cvmx_ciu_soft_prst_cn52xx {
+		u64 reserved_1_63 : 63;
+		u64 soft_prst : 1;
+	} cn52xx;
+	struct cvmx_ciu_soft_prst_cn52xx cn52xxp1;
+	struct cvmx_ciu_soft_prst_cn52xx cn56xx;
+	struct cvmx_ciu_soft_prst_cn52xx cn56xxp1;
+	struct cvmx_ciu_soft_prst_s cn58xx;
+	struct cvmx_ciu_soft_prst_s cn58xxp1;
+	struct cvmx_ciu_soft_prst_cn52xx cn61xx;
+	struct cvmx_ciu_soft_prst_cn52xx cn63xx;
+	struct cvmx_ciu_soft_prst_cn52xx cn63xxp1;
+	struct cvmx_ciu_soft_prst_cn52xx cn66xx;
+	struct cvmx_ciu_soft_prst_cn52xx cn68xx;
+	struct cvmx_ciu_soft_prst_cn52xx cn68xxp1;
+	struct cvmx_ciu_soft_prst_cn52xx cnf71xx;
+};
+
+typedef union cvmx_ciu_soft_prst cvmx_ciu_soft_prst_t;
+
+/**
+ * cvmx_ciu_soft_prst1
+ */
+union cvmx_ciu_soft_prst1 {
+	u64 u64;
+	struct cvmx_ciu_soft_prst1_s {
+		u64 reserved_1_63 : 63;
+		u64 soft_prst : 1;
+	} s;
+	struct cvmx_ciu_soft_prst1_s cn52xx;
+	struct cvmx_ciu_soft_prst1_s cn52xxp1;
+	struct cvmx_ciu_soft_prst1_s cn56xx;
+	struct cvmx_ciu_soft_prst1_s cn56xxp1;
+	struct cvmx_ciu_soft_prst1_s cn61xx;
+	struct cvmx_ciu_soft_prst1_s cn63xx;
+	struct cvmx_ciu_soft_prst1_s cn63xxp1;
+	struct cvmx_ciu_soft_prst1_s cn66xx;
+	struct cvmx_ciu_soft_prst1_s cn68xx;
+	struct cvmx_ciu_soft_prst1_s cn68xxp1;
+	struct cvmx_ciu_soft_prst1_s cnf71xx;
+};
+
+typedef union cvmx_ciu_soft_prst1 cvmx_ciu_soft_prst1_t;
+
+/**
+ * cvmx_ciu_soft_prst2
+ */
+union cvmx_ciu_soft_prst2 {
+	u64 u64;
+	struct cvmx_ciu_soft_prst2_s {
+		u64 reserved_1_63 : 63;
+		u64 soft_prst : 1;
+	} s;
+	struct cvmx_ciu_soft_prst2_s cn66xx;
+};
+
+typedef union cvmx_ciu_soft_prst2 cvmx_ciu_soft_prst2_t;
+
+/**
+ * cvmx_ciu_soft_prst3
+ */
+union cvmx_ciu_soft_prst3 {
+	u64 u64;
+	struct cvmx_ciu_soft_prst3_s {
+		u64 reserved_1_63 : 63;
+		u64 soft_prst : 1;
+	} s;
+	struct cvmx_ciu_soft_prst3_s cn66xx;
+};
+
+typedef union cvmx_ciu_soft_prst3 cvmx_ciu_soft_prst3_t;
+
+/**
+ * cvmx_ciu_soft_rst
+ */
+union cvmx_ciu_soft_rst {
+	u64 u64;
+	struct cvmx_ciu_soft_rst_s {
+		u64 reserved_1_63 : 63;
+		u64 soft_rst : 1;
+	} s;
+	struct cvmx_ciu_soft_rst_s cn30xx;
+	struct cvmx_ciu_soft_rst_s cn31xx;
+	struct cvmx_ciu_soft_rst_s cn38xx;
+	struct cvmx_ciu_soft_rst_s cn38xxp2;
+	struct cvmx_ciu_soft_rst_s cn50xx;
+	struct cvmx_ciu_soft_rst_s cn52xx;
+	struct cvmx_ciu_soft_rst_s cn52xxp1;
+	struct cvmx_ciu_soft_rst_s cn56xx;
+	struct cvmx_ciu_soft_rst_s cn56xxp1;
+	struct cvmx_ciu_soft_rst_s cn58xx;
+	struct cvmx_ciu_soft_rst_s cn58xxp1;
+	struct cvmx_ciu_soft_rst_s cn61xx;
+	struct cvmx_ciu_soft_rst_s cn63xx;
+	struct cvmx_ciu_soft_rst_s cn63xxp1;
+	struct cvmx_ciu_soft_rst_s cn66xx;
+	struct cvmx_ciu_soft_rst_s cn68xx;
+	struct cvmx_ciu_soft_rst_s cn68xxp1;
+	struct cvmx_ciu_soft_rst_s cnf71xx;
+};
+
+typedef union cvmx_ciu_soft_rst cvmx_ciu_soft_rst_t;
+
+/**
+ * cvmx_ciu_sum1_io#_int
+ *
+ * CIU_SUM1_IO0_INT is for PEM0, CIU_SUM1_IO1_INT is reserved.
+ *
+ */
+union cvmx_ciu_sum1_iox_int {
+	u64 u64;
+	struct cvmx_ciu_sum1_iox_int_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 reserved_10_16 : 7;
+		u64 wdog : 10;
+	} s;
+	struct cvmx_ciu_sum1_iox_int_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_sum1_iox_int_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_sum1_iox_int_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_sum1_iox_int_cn70xx cn70xxp1;
+	struct cvmx_ciu_sum1_iox_int_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_41_46 : 6;
+		u64 dpi_dma : 1;
+		u64 reserved_37_39 : 3;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_sum1_iox_int cvmx_ciu_sum1_iox_int_t;
+
+/**
+ * cvmx_ciu_sum1_pp#_ip2
+ *
+ * SUM1 becomes per IPx in o65/6 and afterwards. Only Field <40> DPI_DMA will have
+ * different value per PP(IP) for  $CIU_SUM1_PPx_IPy, and <40> DPI_DMA will always
+ * be zero for  $CIU_SUM1_IOX_INT. All other fields ([63:41] and [39:0]) values  are idential for
+ * different PPs, same value as $CIU_INT_SUM1.
+ * Write to any IRQ's PTP fields will clear PTP for all IRQ's PTP field.
+ */
+union cvmx_ciu_sum1_ppx_ip2 {
+	u64 u64;
+	struct cvmx_ciu_sum1_ppx_ip2_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 reserved_10_16 : 7;
+		u64 wdog : 10;
+	} s;
+	struct cvmx_ciu_sum1_ppx_ip2_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_sum1_ppx_ip2_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_sum1_ppx_ip2_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_sum1_ppx_ip2_cn70xx cn70xxp1;
+	struct cvmx_ciu_sum1_ppx_ip2_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_41_46 : 6;
+		u64 dpi_dma : 1;
+		u64 reserved_37_39 : 3;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_sum1_ppx_ip2 cvmx_ciu_sum1_ppx_ip2_t;
+
+/**
+ * cvmx_ciu_sum1_pp#_ip3
+ *
+ * Notes:
+ * SUM1 becomes per IPx in o65/6 and afterwards. Only Field <40> DPI_DMA will have
+ * different value per PP(IP) for  $CIU_SUM1_PPx_IPy, and <40> DPI_DMA will always
+ * be zero for  $CIU_SUM1_IOX_INT. All other fields ([63:41] and [39:0]) values  are idential for
+ * different PPs, same value as $CIU_INT_SUM1.
+ * Write to any IRQ's PTP fields will clear PTP for all IRQ's PTP field.
+ */
+union cvmx_ciu_sum1_ppx_ip3 {
+	u64 u64;
+	struct cvmx_ciu_sum1_ppx_ip3_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 reserved_10_16 : 7;
+		u64 wdog : 10;
+	} s;
+	struct cvmx_ciu_sum1_ppx_ip3_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_sum1_ppx_ip3_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_sum1_ppx_ip3_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_sum1_ppx_ip3_cn70xx cn70xxp1;
+	struct cvmx_ciu_sum1_ppx_ip3_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_41_46 : 6;
+		u64 dpi_dma : 1;
+		u64 reserved_37_39 : 3;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_sum1_ppx_ip3 cvmx_ciu_sum1_ppx_ip3_t;
+
+/**
+ * cvmx_ciu_sum1_pp#_ip4
+ *
+ * Notes:
+ * SUM1 becomes per IPx in o65/6 and afterwards. Only Field <40> DPI_DMA will have
+ * different value per PP(IP) for  $CIU_SUM1_PPx_IPy, and <40> DPI_DMA will always
+ * be zero for  $CIU_SUM1_IOX_INT. All other fields ([63:41] and [39:0]) values  are idential for
+ * different PPs, same value as $CIU_INT_SUM1.
+ * Write to any IRQ's PTP fields will clear PTP for all IRQ's PTP field.
+ */
+union cvmx_ciu_sum1_ppx_ip4 {
+	u64 u64;
+	struct cvmx_ciu_sum1_ppx_ip4_s {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 usb1 : 1;
+		u64 reserved_10_16 : 7;
+		u64 wdog : 10;
+	} s;
+	struct cvmx_ciu_sum1_ppx_ip4_cn61xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_4_17 : 14;
+		u64 wdog : 4;
+	} cn61xx;
+	struct cvmx_ciu_sum1_ppx_ip4_cn66xx {
+		u64 rst : 1;
+		u64 reserved_62_62 : 1;
+		u64 srio3 : 1;
+		u64 srio2 : 1;
+		u64 reserved_57_59 : 3;
+		u64 dfm : 1;
+		u64 reserved_53_55 : 3;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 srio0 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_38_45 : 8;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 zip : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 mii1 : 1;
+		u64 reserved_10_17 : 8;
+		u64 wdog : 10;
+	} cn66xx;
+	struct cvmx_ciu_sum1_ppx_ip4_cn70xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_51_51 : 1;
+		u64 pem2 : 1;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 agl : 1;
+		u64 reserved_41_45 : 5;
+		u64 dpi_dma : 1;
+		u64 reserved_38_39 : 2;
+		u64 agx1 : 1;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 dfa : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_18_18 : 1;
+		u64 usb1 : 1;
+		u64 reserved_4_16 : 13;
+		u64 wdog : 4;
+	} cn70xx;
+	struct cvmx_ciu_sum1_ppx_ip4_cn70xx cn70xxp1;
+	struct cvmx_ciu_sum1_ppx_ip4_cnf71xx {
+		u64 rst : 1;
+		u64 reserved_53_62 : 10;
+		u64 lmc0 : 1;
+		u64 reserved_50_51 : 2;
+		u64 pem1 : 1;
+		u64 pem0 : 1;
+		u64 ptp : 1;
+		u64 reserved_41_46 : 6;
+		u64 dpi_dma : 1;
+		u64 reserved_37_39 : 3;
+		u64 agx0 : 1;
+		u64 dpi : 1;
+		u64 sli : 1;
+		u64 usb : 1;
+		u64 reserved_32_32 : 1;
+		u64 key : 1;
+		u64 rad : 1;
+		u64 tim : 1;
+		u64 reserved_28_28 : 1;
+		u64 pko : 1;
+		u64 pip : 1;
+		u64 ipd : 1;
+		u64 l2c : 1;
+		u64 pow : 1;
+		u64 fpa : 1;
+		u64 iob : 1;
+		u64 mio : 1;
+		u64 nand : 1;
+		u64 reserved_4_18 : 15;
+		u64 wdog : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_sum1_ppx_ip4 cvmx_ciu_sum1_ppx_ip4_t;
+
+/**
+ * cvmx_ciu_sum2_io#_int
+ *
+ * CIU_SUM2_IO0_INT is for PEM0, CIU_SUM2_IO1_INT is reserved.
+ *
+ */
+union cvmx_ciu_sum2_iox_int {
+	u64 u64;
+	struct cvmx_ciu_sum2_iox_int_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_sum2_iox_int_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_sum2_iox_int_cn61xx cn66xx;
+	struct cvmx_ciu_sum2_iox_int_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_sum2_iox_int_cn70xx cn70xxp1;
+	struct cvmx_ciu_sum2_iox_int_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_sum2_iox_int cvmx_ciu_sum2_iox_int_t;
+
+/**
+ * cvmx_ciu_sum2_pp#_ip2
+ *
+ * Only TIMER field may have different value per PP(IP).
+ * All other fields  values  are idential for different PPs.
+ */
+union cvmx_ciu_sum2_ppx_ip2 {
+	u64 u64;
+	struct cvmx_ciu_sum2_ppx_ip2_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_sum2_ppx_ip2_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_sum2_ppx_ip2_cn61xx cn66xx;
+	struct cvmx_ciu_sum2_ppx_ip2_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_sum2_ppx_ip2_cn70xx cn70xxp1;
+	struct cvmx_ciu_sum2_ppx_ip2_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_sum2_ppx_ip2 cvmx_ciu_sum2_ppx_ip2_t;
+
+/**
+ * cvmx_ciu_sum2_pp#_ip3
+ *
+ * Notes:
+ * These SUM2 CSR's did not exist prior to pass 1.2. CIU_TIM4-9 did not exist prior to pass 1.2.
+ *
+ */
+union cvmx_ciu_sum2_ppx_ip3 {
+	u64 u64;
+	struct cvmx_ciu_sum2_ppx_ip3_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_sum2_ppx_ip3_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_sum2_ppx_ip3_cn61xx cn66xx;
+	struct cvmx_ciu_sum2_ppx_ip3_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_sum2_ppx_ip3_cn70xx cn70xxp1;
+	struct cvmx_ciu_sum2_ppx_ip3_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_sum2_ppx_ip3 cvmx_ciu_sum2_ppx_ip3_t;
+
+/**
+ * cvmx_ciu_sum2_pp#_ip4
+ *
+ * Notes:
+ * These SUM2 CSR's did not exist prior to pass 1.2. CIU_TIM4-9 did not exist prior to pass 1.2.
+ *
+ */
+union cvmx_ciu_sum2_ppx_ip4 {
+	u64 u64;
+	struct cvmx_ciu_sum2_ppx_ip4_s {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_15_15 : 1;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_ciu_sum2_ppx_ip4_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_ciu_sum2_ppx_ip4_cn61xx cn66xx;
+	struct cvmx_ciu_sum2_ppx_ip4_cn70xx {
+		u64 reserved_20_63 : 44;
+		u64 bch : 1;
+		u64 agl_drp : 1;
+		u64 ocla : 1;
+		u64 sata : 1;
+		u64 reserved_10_15 : 6;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_ciu_sum2_ppx_ip4_cn70xx cn70xxp1;
+	struct cvmx_ciu_sum2_ppx_ip4_cnf71xx {
+		u64 reserved_15_63 : 49;
+		u64 endor : 2;
+		u64 eoi : 1;
+		u64 reserved_10_11 : 2;
+		u64 timer : 6;
+		u64 reserved_0_3 : 4;
+	} cnf71xx;
+};
+
+typedef union cvmx_ciu_sum2_ppx_ip4 cvmx_ciu_sum2_ppx_ip4_t;
+
+/**
+ * cvmx_ciu_tim#
+ *
+ * Notes:
+ * CIU_TIM4-9 did not exist prior to pass 1.2
+ *
+ */
+union cvmx_ciu_timx {
+	u64 u64;
+	struct cvmx_ciu_timx_s {
+		u64 reserved_37_63 : 27;
+		u64 one_shot : 1;
+		u64 len : 36;
+	} s;
+	struct cvmx_ciu_timx_s cn30xx;
+	struct cvmx_ciu_timx_s cn31xx;
+	struct cvmx_ciu_timx_s cn38xx;
+	struct cvmx_ciu_timx_s cn38xxp2;
+	struct cvmx_ciu_timx_s cn50xx;
+	struct cvmx_ciu_timx_s cn52xx;
+	struct cvmx_ciu_timx_s cn52xxp1;
+	struct cvmx_ciu_timx_s cn56xx;
+	struct cvmx_ciu_timx_s cn56xxp1;
+	struct cvmx_ciu_timx_s cn58xx;
+	struct cvmx_ciu_timx_s cn58xxp1;
+	struct cvmx_ciu_timx_s cn61xx;
+	struct cvmx_ciu_timx_s cn63xx;
+	struct cvmx_ciu_timx_s cn63xxp1;
+	struct cvmx_ciu_timx_s cn66xx;
+	struct cvmx_ciu_timx_s cn68xx;
+	struct cvmx_ciu_timx_s cn68xxp1;
+	struct cvmx_ciu_timx_s cn70xx;
+	struct cvmx_ciu_timx_s cn70xxp1;
+	struct cvmx_ciu_timx_s cnf71xx;
+};
+
+typedef union cvmx_ciu_timx cvmx_ciu_timx_t;
+
+/**
+ * cvmx_ciu_tim_multi_cast
+ *
+ * Notes:
+ * This register does not exist prior to pass 1.2 silicon. Those earlier chip passes operate as if
+ * EN==0.
+ */
+union cvmx_ciu_tim_multi_cast {
+	u64 u64;
+	struct cvmx_ciu_tim_multi_cast_s {
+		u64 reserved_1_63 : 63;
+		u64 en : 1;
+	} s;
+	struct cvmx_ciu_tim_multi_cast_s cn61xx;
+	struct cvmx_ciu_tim_multi_cast_s cn66xx;
+	struct cvmx_ciu_tim_multi_cast_s cn70xx;
+	struct cvmx_ciu_tim_multi_cast_s cn70xxp1;
+	struct cvmx_ciu_tim_multi_cast_s cnf71xx;
+};
+
+typedef union cvmx_ciu_tim_multi_cast cvmx_ciu_tim_multi_cast_t;
+
+/**
+ * cvmx_ciu_wdog#
+ */
+union cvmx_ciu_wdogx {
+	u64 u64;
+	struct cvmx_ciu_wdogx_s {
+		u64 reserved_46_63 : 18;
+		u64 gstopen : 1;
+		u64 dstop : 1;
+		u64 cnt : 24;
+		u64 len : 16;
+		u64 state : 2;
+		u64 mode : 2;
+	} s;
+	struct cvmx_ciu_wdogx_s cn30xx;
+	struct cvmx_ciu_wdogx_s cn31xx;
+	struct cvmx_ciu_wdogx_s cn38xx;
+	struct cvmx_ciu_wdogx_s cn38xxp2;
+	struct cvmx_ciu_wdogx_s cn50xx;
+	struct cvmx_ciu_wdogx_s cn52xx;
+	struct cvmx_ciu_wdogx_s cn52xxp1;
+	struct cvmx_ciu_wdogx_s cn56xx;
+	struct cvmx_ciu_wdogx_s cn56xxp1;
+	struct cvmx_ciu_wdogx_s cn58xx;
+	struct cvmx_ciu_wdogx_s cn58xxp1;
+	struct cvmx_ciu_wdogx_s cn61xx;
+	struct cvmx_ciu_wdogx_s cn63xx;
+	struct cvmx_ciu_wdogx_s cn63xxp1;
+	struct cvmx_ciu_wdogx_s cn66xx;
+	struct cvmx_ciu_wdogx_s cn68xx;
+	struct cvmx_ciu_wdogx_s cn68xxp1;
+	struct cvmx_ciu_wdogx_s cn70xx;
+	struct cvmx_ciu_wdogx_s cn70xxp1;
+	struct cvmx_ciu_wdogx_s cn73xx;
+	struct cvmx_ciu_wdogx_s cn78xx;
+	struct cvmx_ciu_wdogx_s cn78xxp1;
+	struct cvmx_ciu_wdogx_s cnf71xx;
+	struct cvmx_ciu_wdogx_s cnf75xx;
+};
+
+typedef union cvmx_ciu_wdogx cvmx_ciu_wdogx_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-cmd-queue.h b/arch/mips/mach-octeon/include/mach/cvmx-cmd-queue.h
new file mode 100644
index 0000000..ddc2943
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-cmd-queue.h
@@ -0,0 +1,441 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Support functions for managing command queues used for
+ * various hardware blocks.
+ *
+ * The common command queue infrastructure abstracts out the
+ * software necessary for adding to Octeon's chained queue
+ * structures. These structures are used for commands to the
+ * PKO, ZIP, DFA, RAID, HNA, and DMA engine blocks. Although each
+ * hardware unit takes commands and CSRs of different types,
+ * they all use basic linked command buffers to store the
+ * pending request. In general, users of the CVMX API don't
+ * call cvmx-cmd-queue functions directly. Instead the hardware
+ * unit specific wrapper should be used. The wrappers perform
+ * unit specific validation and CSR writes to submit the
+ * commands.
+ *
+ * Even though most software will never directly interact with
+ * cvmx-cmd-queue, knowledge of its internal workings can help
+ * in diagnosing performance problems and help with debugging.
+ *
+ * Command queue pointers are stored in a global named block
+ * called "cvmx_cmd_queues". Except for the PKO queues, each
+ * hardware queue is stored in its own cache line to reduce SMP
+ * contention on spin locks. The PKO queues are stored such that
+ * every 16th queue is next to each other in memory. This scheme
+ * allows for queues being in separate cache lines when there
+ * are low number of queues per port. With 16 queues per port,
+ * the first queue for each port is in the same cache area. The
+ * second queues for each port are in another area, etc. This
+ * allows software to implement very efficient lockless PKO with
+ * 16 queues per port using a minimum of cache lines per core.
+ * All queues for a given core will be isolated in the same
+ * cache area.
+ *
+ * In addition to the memory pointer layout, cvmx-cmd-queue
+ * provides an optimized fair ll/sc locking mechanism for the
+ * queues. The lock uses a "ticket / now serving" model to
+ * maintain fair order on contended locks. In addition, it uses
+ * predicted locking time to limit cache contention. When a core
+ * know it must wait in line for a lock, it spins on the
+ * internal cycle counter to completely eliminate any causes of
+ * bus traffic.
+ */
+
+#ifndef __CVMX_CMD_QUEUE_H__
+#define __CVMX_CMD_QUEUE_H__
+
+/**
+ * By default we disable the max depth support. Most programs
+ * don't use it and it slows down the command queue processing
+ * significantly.
+ */
+#ifndef CVMX_CMD_QUEUE_ENABLE_MAX_DEPTH
+#define CVMX_CMD_QUEUE_ENABLE_MAX_DEPTH 0
+#endif
+
+/**
+ * Enumeration representing all hardware blocks that use command
+ * queues. Each hardware block has up to 65536 sub identifiers for
+ * multiple command queues. Not all chips support all hardware
+ * units.
+ */
+typedef enum {
+	CVMX_CMD_QUEUE_PKO_BASE = 0x00000,
+#define CVMX_CMD_QUEUE_PKO(queue)                                                                  \
+	((cvmx_cmd_queue_id_t)(CVMX_CMD_QUEUE_PKO_BASE + (0xffff & (queue))))
+	CVMX_CMD_QUEUE_ZIP = 0x10000,
+#define CVMX_CMD_QUEUE_ZIP_QUE(queue)                                                              \
+	((cvmx_cmd_queue_id_t)(CVMX_CMD_QUEUE_ZIP + (0xffff & (queue))))
+	CVMX_CMD_QUEUE_DFA = 0x20000,
+	CVMX_CMD_QUEUE_RAID = 0x30000,
+	CVMX_CMD_QUEUE_DMA_BASE = 0x40000,
+#define CVMX_CMD_QUEUE_DMA(queue)                                                                  \
+	((cvmx_cmd_queue_id_t)(CVMX_CMD_QUEUE_DMA_BASE + (0xffff & (queue))))
+	CVMX_CMD_QUEUE_BCH = 0x50000,
+#define CVMX_CMD_QUEUE_BCH(queue) ((cvmx_cmd_queue_id_t)(CVMX_CMD_QUEUE_BCH + (0xffff & (queue))))
+	CVMX_CMD_QUEUE_HNA = 0x60000,
+	CVMX_CMD_QUEUE_END = 0x70000,
+} cvmx_cmd_queue_id_t;
+
+#define CVMX_CMD_QUEUE_ZIP3_QUE(node, queue)                                                       \
+	((cvmx_cmd_queue_id_t)((node) << 24 | CVMX_CMD_QUEUE_ZIP | (0xffff & (queue))))
+
+/**
+ * Command write operations can fail if the command queue needs
+ * a new buffer and the associated FPA pool is empty. It can also
+ * fail if the number of queued command words reaches the maximum
+ * set at initialization.
+ */
+typedef enum {
+	CVMX_CMD_QUEUE_SUCCESS = 0,
+	CVMX_CMD_QUEUE_NO_MEMORY = -1,
+	CVMX_CMD_QUEUE_FULL = -2,
+	CVMX_CMD_QUEUE_INVALID_PARAM = -3,
+	CVMX_CMD_QUEUE_ALREADY_SETUP = -4,
+} cvmx_cmd_queue_result_t;
+
+typedef struct {
+	/* First 64-bit word: */
+	u64 fpa_pool : 16;
+	u64 base_paddr : 48;
+	s32 index;
+	u16 max_depth;
+	u16 pool_size_m1;
+} __cvmx_cmd_queue_state_t;
+
+/**
+ * command-queue locking uses a fair ticket spinlock algo,
+ * with 64-bit tickets for endianness-neutrality and
+ * counter overflow protection.
+ * Lock is free when both counters are of equal value.
+ */
+typedef struct {
+	u64 ticket;
+	u64 now_serving;
+} __cvmx_cmd_queue_lock_t;
+
+/**
+ * @INTERNAL
+ * This structure contains the global state of all command queues.
+ * It is stored in a bootmem named block and shared by all
+ * applications running on Octeon. Tickets are stored in a different
+ * cache line that queue information to reduce the contention on the
+ * ll/sc used to get a ticket. If this is not the case, the update
+ * of queue state causes the ll/sc to fail quite often.
+ */
+typedef struct {
+	__cvmx_cmd_queue_lock_t lock[(CVMX_CMD_QUEUE_END >> 16) * 256];
+	__cvmx_cmd_queue_state_t state[(CVMX_CMD_QUEUE_END >> 16) * 256];
+} __cvmx_cmd_queue_all_state_t;
+
+extern __cvmx_cmd_queue_all_state_t *__cvmx_cmd_queue_state_ptrs[CVMX_MAX_NODES];
+
+/**
+ * @INTERNAL
+ * Internal function to handle the corner cases
+ * of adding command words to a queue when the current
+ * block is getting full.
+ */
+cvmx_cmd_queue_result_t __cvmx_cmd_queue_write_raw(cvmx_cmd_queue_id_t queue_id,
+						   __cvmx_cmd_queue_state_t *qptr, int cmd_count,
+						   const u64 *cmds);
+
+/**
+ * Initialize a command queue for use. The initial FPA buffer is
+ * allocated and the hardware unit is configured to point to the
+ * new command queue.
+ *
+ * @param queue_id  Hardware command queue to initialize.
+ * @param max_depth Maximum outstanding commands that can be queued.
+ * @param fpa_pool  FPA pool the command queues should come from.
+ * @param pool_size Size of each buffer in the FPA pool (bytes)
+ *
+ * @return CVMX_CMD_QUEUE_SUCCESS or a failure code
+ */
+cvmx_cmd_queue_result_t cvmx_cmd_queue_initialize(cvmx_cmd_queue_id_t queue_id, int max_depth,
+						  int fpa_pool, int pool_size);
+
+/**
+ * Shutdown a queue a free it's command buffers to the FPA. The
+ * hardware connected to the queue must be stopped before this
+ * function is called.
+ *
+ * @param queue_id Queue to shutdown
+ *
+ * @return CVMX_CMD_QUEUE_SUCCESS or a failure code
+ */
+cvmx_cmd_queue_result_t cvmx_cmd_queue_shutdown(cvmx_cmd_queue_id_t queue_id);
+
+/**
+ * Return the number of command words pending in the queue. This
+ * function may be relatively slow for some hardware units.
+ *
+ * @param queue_id Hardware command queue to query
+ *
+ * @return Number of outstanding commands
+ */
+int cvmx_cmd_queue_length(cvmx_cmd_queue_id_t queue_id);
+
+/**
+ * Return the command buffer to be written to. The purpose of this
+ * function is to allow CVMX routine access to the low level buffer
+ * for initial hardware setup. User applications should not call this
+ * function directly.
+ *
+ * @param queue_id Command queue to query
+ *
+ * @return Command buffer or NULL on failure
+ */
+void *cvmx_cmd_queue_buffer(cvmx_cmd_queue_id_t queue_id);
+
+/**
+ * @INTERNAL
+ * Retrieve or allocate command queue state named block
+ */
+cvmx_cmd_queue_result_t __cvmx_cmd_queue_init_state_ptr(unsigned int node);
+
+/**
+ * @INTERNAL
+ * Get the index into the state arrays for the supplied queue id.
+ *
+ * @param queue_id Queue ID to get an index for
+ *
+ * @return Index into the state arrays
+ */
+static inline unsigned int __cvmx_cmd_queue_get_index(cvmx_cmd_queue_id_t queue_id)
+{
+	/* Warning: This code currently only works with devices that have 256
+	 * queues or less.  Devices with more than 16 queues are laid out in
+	 * memory to allow cores quick access to every 16th queue. This reduces
+	 * cache thrashing when you are running 16 queues per port to support
+	 * lockless operation
+	 */
+	unsigned int unit = (queue_id >> 16) & 0xff;
+	unsigned int q = (queue_id >> 4) & 0xf;
+	unsigned int core = queue_id & 0xf;
+
+	return (unit << 8) | (core << 4) | q;
+}
+
+static inline int __cvmx_cmd_queue_get_node(cvmx_cmd_queue_id_t queue_id)
+{
+	unsigned int node = queue_id >> 24;
+	return node;
+}
+
+/**
+ * @INTERNAL
+ * Lock the supplied queue so nobody else is updating it at the same
+ * time as us.
+ *
+ * @param queue_id Queue ID to lock
+ *
+ */
+static inline void __cvmx_cmd_queue_lock(cvmx_cmd_queue_id_t queue_id)
+{
+}
+
+/**
+ * @INTERNAL
+ * Unlock the queue, flushing all writes.
+ *
+ * @param queue_id Queue ID to lock
+ *
+ */
+static inline void __cvmx_cmd_queue_unlock(cvmx_cmd_queue_id_t queue_id)
+{
+	CVMX_SYNCWS; /* nudge out the unlock. */
+}
+
+/**
+ * @INTERNAL
+ * Initialize a command-queue lock to "unlocked" state.
+ */
+static inline void __cvmx_cmd_queue_lock_init(cvmx_cmd_queue_id_t queue_id)
+{
+	unsigned int index = __cvmx_cmd_queue_get_index(queue_id);
+	unsigned int node = __cvmx_cmd_queue_get_node(queue_id);
+
+	__cvmx_cmd_queue_state_ptrs[node]->lock[index] = (__cvmx_cmd_queue_lock_t){ 0, 0 };
+	CVMX_SYNCWS;
+}
+
+/**
+ * @INTERNAL
+ * Get the queue state structure for the given queue id
+ *
+ * @param queue_id Queue id to get
+ *
+ * @return Queue structure or NULL on failure
+ */
+static inline __cvmx_cmd_queue_state_t *__cvmx_cmd_queue_get_state(cvmx_cmd_queue_id_t queue_id)
+{
+	unsigned int index;
+	unsigned int node;
+	__cvmx_cmd_queue_state_t *qptr;
+
+	node = __cvmx_cmd_queue_get_node(queue_id);
+	index = __cvmx_cmd_queue_get_index(queue_id);
+
+	if (cvmx_unlikely(!__cvmx_cmd_queue_state_ptrs[node]))
+		__cvmx_cmd_queue_init_state_ptr(node);
+
+	qptr = &__cvmx_cmd_queue_state_ptrs[node]->state[index];
+	return qptr;
+}
+
+/**
+ * Write an arbitrary number of command words to a command queue.
+ * This is a generic function; the fixed number of command word
+ * functions yield higher performance.
+ *
+ * @param queue_id  Hardware command queue to write to
+ * @param use_locking
+ *                  Use internal locking to ensure exclusive access for queue
+ *                  updates. If you don't use this locking you must ensure
+ *                  exclusivity some other way. Locking is strongly recommended.
+ * @param cmd_count Number of command words to write
+ * @param cmds      Array of commands to write
+ *
+ * @return CVMX_CMD_QUEUE_SUCCESS or a failure code
+ */
+static inline cvmx_cmd_queue_result_t
+cvmx_cmd_queue_write(cvmx_cmd_queue_id_t queue_id, bool use_locking, int cmd_count, const u64 *cmds)
+{
+	cvmx_cmd_queue_result_t ret = CVMX_CMD_QUEUE_SUCCESS;
+	u64 *cmd_ptr;
+
+	__cvmx_cmd_queue_state_t *qptr = __cvmx_cmd_queue_get_state(queue_id);
+
+	/* Make sure nobody else is updating the same queue */
+	if (cvmx_likely(use_locking))
+		__cvmx_cmd_queue_lock(queue_id);
+
+	/* Most of the time there is lots of free words in current block */
+	if (cvmx_unlikely((qptr->index + cmd_count) >= qptr->pool_size_m1)) {
+		/* The rare case when nearing end of block */
+		ret = __cvmx_cmd_queue_write_raw(queue_id, qptr, cmd_count, cmds);
+	} else {
+		cmd_ptr = (u64 *)cvmx_phys_to_ptr((u64)qptr->base_paddr);
+		/* Loop easy for compiler to unroll for the likely case */
+		while (cmd_count > 0) {
+			cmd_ptr[qptr->index++] = *cmds++;
+			cmd_count--;
+		}
+	}
+
+	/* All updates are complete. Release the lock and return */
+	if (cvmx_likely(use_locking))
+		__cvmx_cmd_queue_unlock(queue_id);
+	else
+		CVMX_SYNCWS;
+
+	return ret;
+}
+
+/**
+ * Simple function to write two command words to a command queue.
+ *
+ * @param queue_id Hardware command queue to write to
+ * @param use_locking
+ *                 Use internal locking to ensure exclusive access for queue
+ *                 updates. If you don't use this locking you must ensure
+ *                 exclusivity some other way. Locking is strongly recommended.
+ * @param cmd1     Command
+ * @param cmd2     Command
+ *
+ * @return CVMX_CMD_QUEUE_SUCCESS or a failure code
+ */
+static inline cvmx_cmd_queue_result_t cvmx_cmd_queue_write2(cvmx_cmd_queue_id_t queue_id,
+							    bool use_locking, u64 cmd1, u64 cmd2)
+{
+	cvmx_cmd_queue_result_t ret = CVMX_CMD_QUEUE_SUCCESS;
+	u64 *cmd_ptr;
+
+	__cvmx_cmd_queue_state_t *qptr = __cvmx_cmd_queue_get_state(queue_id);
+
+	/* Make sure nobody else is updating the same queue */
+	if (cvmx_likely(use_locking))
+		__cvmx_cmd_queue_lock(queue_id);
+
+	if (cvmx_unlikely((qptr->index + 2) >= qptr->pool_size_m1)) {
+		/* The rare case when nearing end of block */
+		u64 cmds[2];
+
+		cmds[0] = cmd1;
+		cmds[1] = cmd2;
+		ret = __cvmx_cmd_queue_write_raw(queue_id, qptr, 2, cmds);
+	} else {
+		/* Likely case to work fast */
+		cmd_ptr = (u64 *)cvmx_phys_to_ptr((u64)qptr->base_paddr);
+		cmd_ptr += qptr->index;
+		qptr->index += 2;
+		cmd_ptr[0] = cmd1;
+		cmd_ptr[1] = cmd2;
+	}
+
+	/* All updates are complete. Release the lock and return */
+	if (cvmx_likely(use_locking))
+		__cvmx_cmd_queue_unlock(queue_id);
+	else
+		CVMX_SYNCWS;
+
+	return ret;
+}
+
+/**
+ * Simple function to write three command words to a command queue.
+ *
+ * @param queue_id Hardware command queue to write to
+ * @param use_locking
+ *                 Use internal locking to ensure exclusive access for queue
+ *                 updates. If you don't use this locking you must ensure
+ *                 exclusivity some other way. Locking is strongly recommended.
+ * @param cmd1     Command
+ * @param cmd2     Command
+ * @param cmd3     Command
+ *
+ * @return CVMX_CMD_QUEUE_SUCCESS or a failure code
+ */
+static inline cvmx_cmd_queue_result_t
+cvmx_cmd_queue_write3(cvmx_cmd_queue_id_t queue_id, bool use_locking, u64 cmd1, u64 cmd2, u64 cmd3)
+{
+	cvmx_cmd_queue_result_t ret = CVMX_CMD_QUEUE_SUCCESS;
+	__cvmx_cmd_queue_state_t *qptr = __cvmx_cmd_queue_get_state(queue_id);
+	u64 *cmd_ptr;
+
+	/* Make sure nobody else is updating the same queue */
+	if (cvmx_likely(use_locking))
+		__cvmx_cmd_queue_lock(queue_id);
+
+	if (cvmx_unlikely((qptr->index + 3) >= qptr->pool_size_m1)) {
+		/* Most of the time there is lots of free words in current block */
+		u64 cmds[3];
+
+		cmds[0] = cmd1;
+		cmds[1] = cmd2;
+		cmds[2] = cmd3;
+		ret = __cvmx_cmd_queue_write_raw(queue_id, qptr, 3, cmds);
+	} else {
+		cmd_ptr = (u64 *)cvmx_phys_to_ptr((u64)qptr->base_paddr);
+		cmd_ptr += qptr->index;
+		qptr->index += 3;
+		cmd_ptr[0] = cmd1;
+		cmd_ptr[1] = cmd2;
+		cmd_ptr[2] = cmd3;
+	}
+
+	/* All updates are complete. Release the lock and return */
+	if (cvmx_likely(use_locking))
+		__cvmx_cmd_queue_unlock(queue_id);
+	else
+		CVMX_SYNCWS;
+
+	return ret;
+}
+
+#endif /* __CVMX_CMD_QUEUE_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-coremask.h b/arch/mips/mach-octeon/include/mach/cvmx-coremask.h
index c34ff46..314b6d9 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-coremask.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-coremask.h
@@ -741,8 +741,9 @@
 
 static inline void cvmx_coremask_dprint(const struct cvmx_coremask *pcm)
 {
-	if (IS_ENABLED(DEBUG))
-		cvmx_coremask_print(pcm);
+#if defined(DEBUG)
+	cvmx_coremask_print(pcm);
+#endif
 }
 
 struct cvmx_coremask *octeon_get_available_coremask(struct cvmx_coremask *pcm);
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-csr-enums.h b/arch/mips/mach-octeon/include/mach/cvmx-csr-enums.h
new file mode 100644
index 0000000..a8625b4
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-csr-enums.h
@@ -0,0 +1,87 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Definitions for enumerations used with Octeon CSRs.
+ */
+
+#ifndef __CVMX_CSR_ENUMS_H__
+#define __CVMX_CSR_ENUMS_H__
+
+typedef enum {
+	CVMX_IPD_OPC_MODE_STT = 0LL,
+	CVMX_IPD_OPC_MODE_STF = 1LL,
+	CVMX_IPD_OPC_MODE_STF1_STT = 2LL,
+	CVMX_IPD_OPC_MODE_STF2_STT = 3LL
+} cvmx_ipd_mode_t;
+
+/**
+ * Enumeration representing the amount of packet processing
+ * and validation performed by the input hardware.
+ */
+typedef enum {
+	CVMX_PIP_PORT_CFG_MODE_NONE = 0ull,
+	CVMX_PIP_PORT_CFG_MODE_SKIPL2 = 1ull,
+	CVMX_PIP_PORT_CFG_MODE_SKIPIP = 2ull
+} cvmx_pip_port_parse_mode_t;
+
+/**
+ * This enumeration controls how a QoS watcher matches a packet.
+ *
+ * @deprecated  This enumeration was used with cvmx_pip_config_watcher which has
+ *              been deprecated.
+ */
+typedef enum {
+	CVMX_PIP_QOS_WATCH_DISABLE = 0ull,
+	CVMX_PIP_QOS_WATCH_PROTNH = 1ull,
+	CVMX_PIP_QOS_WATCH_TCP = 2ull,
+	CVMX_PIP_QOS_WATCH_UDP = 3ull
+} cvmx_pip_qos_watch_types;
+
+/**
+ * This enumeration is used in PIP tag config to control how
+ * POW tags are generated by the hardware.
+ */
+typedef enum {
+	CVMX_PIP_TAG_MODE_TUPLE = 0ull,
+	CVMX_PIP_TAG_MODE_MASK = 1ull,
+	CVMX_PIP_TAG_MODE_IP_OR_MASK = 2ull,
+	CVMX_PIP_TAG_MODE_TUPLE_XOR_MASK = 3ull
+} cvmx_pip_tag_mode_t;
+
+/**
+ * Tag type definitions
+ */
+typedef enum {
+	CVMX_POW_TAG_TYPE_ORDERED = 0L,
+	CVMX_POW_TAG_TYPE_ATOMIC = 1L,
+	CVMX_POW_TAG_TYPE_NULL = 2L,
+	CVMX_POW_TAG_TYPE_NULL_NULL = 3L
+} cvmx_pow_tag_type_t;
+
+/**
+ * LCR bits 0 and 1 control the number of bits per character. See the following table for encodings:
+ *
+ * - 00 = 5 bits (bits 0-4 sent)
+ * - 01 = 6 bits (bits 0-5 sent)
+ * - 10 = 7 bits (bits 0-6 sent)
+ * - 11 = 8 bits (all bits sent)
+ */
+typedef enum {
+	CVMX_UART_BITS5 = 0,
+	CVMX_UART_BITS6 = 1,
+	CVMX_UART_BITS7 = 2,
+	CVMX_UART_BITS8 = 3
+} cvmx_uart_bits_t;
+
+typedef enum {
+	CVMX_UART_IID_NONE = 1,
+	CVMX_UART_IID_RX_ERROR = 6,
+	CVMX_UART_IID_RX_DATA = 4,
+	CVMX_UART_IID_RX_TIMEOUT = 12,
+	CVMX_UART_IID_TX_EMPTY = 2,
+	CVMX_UART_IID_MODEM = 0,
+	CVMX_UART_IID_BUSY = 7
+} cvmx_uart_iid_t;
+
+#endif /* __CVMX_CSR_ENUMS_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-csr.h b/arch/mips/mach-octeon/include/mach/cvmx-csr.h
new file mode 100644
index 0000000..730d54b
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-csr.h
@@ -0,0 +1,78 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) address and type definitions for
+ * Octoen.
+ */
+
+#ifndef __CVMX_CSR_H__
+#define __CVMX_CSR_H__
+
+#include "cvmx-csr-enums.h"
+#include "cvmx-pip-defs.h"
+
+typedef cvmx_pip_prt_cfgx_t cvmx_pip_port_cfg_t;
+
+/* The CSRs for bootbus region zero used to be independent of the
+    other 1-7. As of SDK 1.7.0 these were combined. These macros
+    are for backwards compactability */
+#define CVMX_MIO_BOOT_REG_CFG0 CVMX_MIO_BOOT_REG_CFGX(0)
+#define CVMX_MIO_BOOT_REG_TIM0 CVMX_MIO_BOOT_REG_TIMX(0)
+
+/* The CN3XXX and CN58XX chips used to not have a LMC number
+    passed to the address macros. These are here to supply backwards
+    compatibility with old code. Code should really use the new addresses
+    with bus arguments for support on other chips */
+#define CVMX_LMC_BIST_CTL	  CVMX_LMCX_BIST_CTL(0)
+#define CVMX_LMC_BIST_RESULT	  CVMX_LMCX_BIST_RESULT(0)
+#define CVMX_LMC_COMP_CTL	  CVMX_LMCX_COMP_CTL(0)
+#define CVMX_LMC_CTL		  CVMX_LMCX_CTL(0)
+#define CVMX_LMC_CTL1		  CVMX_LMCX_CTL1(0)
+#define CVMX_LMC_DCLK_CNT_HI	  CVMX_LMCX_DCLK_CNT_HI(0)
+#define CVMX_LMC_DCLK_CNT_LO	  CVMX_LMCX_DCLK_CNT_LO(0)
+#define CVMX_LMC_DCLK_CTL	  CVMX_LMCX_DCLK_CTL(0)
+#define CVMX_LMC_DDR2_CTL	  CVMX_LMCX_DDR2_CTL(0)
+#define CVMX_LMC_DELAY_CFG	  CVMX_LMCX_DELAY_CFG(0)
+#define CVMX_LMC_DLL_CTL	  CVMX_LMCX_DLL_CTL(0)
+#define CVMX_LMC_DUAL_MEMCFG	  CVMX_LMCX_DUAL_MEMCFG(0)
+#define CVMX_LMC_ECC_SYND	  CVMX_LMCX_ECC_SYND(0)
+#define CVMX_LMC_FADR		  CVMX_LMCX_FADR(0)
+#define CVMX_LMC_IFB_CNT_HI	  CVMX_LMCX_IFB_CNT_HI(0)
+#define CVMX_LMC_IFB_CNT_LO	  CVMX_LMCX_IFB_CNT_LO(0)
+#define CVMX_LMC_MEM_CFG0	  CVMX_LMCX_MEM_CFG0(0)
+#define CVMX_LMC_MEM_CFG1	  CVMX_LMCX_MEM_CFG1(0)
+#define CVMX_LMC_OPS_CNT_HI	  CVMX_LMCX_OPS_CNT_HI(0)
+#define CVMX_LMC_OPS_CNT_LO	  CVMX_LMCX_OPS_CNT_LO(0)
+#define CVMX_LMC_PLL_BWCTL	  CVMX_LMCX_PLL_BWCTL(0)
+#define CVMX_LMC_PLL_CTL	  CVMX_LMCX_PLL_CTL(0)
+#define CVMX_LMC_PLL_STATUS	  CVMX_LMCX_PLL_STATUS(0)
+#define CVMX_LMC_READ_LEVEL_CTL	  CVMX_LMCX_READ_LEVEL_CTL(0)
+#define CVMX_LMC_READ_LEVEL_DBG	  CVMX_LMCX_READ_LEVEL_DBG(0)
+#define CVMX_LMC_READ_LEVEL_RANKX CVMX_LMCX_READ_LEVEL_RANKX(0)
+#define CVMX_LMC_RODT_COMP_CTL	  CVMX_LMCX_RODT_COMP_CTL(0)
+#define CVMX_LMC_RODT_CTL	  CVMX_LMCX_RODT_CTL(0)
+#define CVMX_LMC_WODT_CTL	  CVMX_LMCX_WODT_CTL0(0)
+#define CVMX_LMC_WODT_CTL0	  CVMX_LMCX_WODT_CTL0(0)
+#define CVMX_LMC_WODT_CTL1	  CVMX_LMCX_WODT_CTL1(0)
+
+/* The CN3XXX and CN58XX chips used to not have a TWSI bus number
+    passed to the address macros. These are here to supply backwards
+    compatibility with old code. Code should really use the new addresses
+    with bus arguments for support on other chips */
+#define CVMX_MIO_TWS_INT	 CVMX_MIO_TWSX_INT(0)
+#define CVMX_MIO_TWS_SW_TWSI	 CVMX_MIO_TWSX_SW_TWSI(0)
+#define CVMX_MIO_TWS_SW_TWSI_EXT CVMX_MIO_TWSX_SW_TWSI_EXT(0)
+#define CVMX_MIO_TWS_TWSI_SW	 CVMX_MIO_TWSX_TWSI_SW(0)
+
+/* The CN3XXX and CN58XX chips used to not have a SMI/MDIO bus number
+    passed to the address macros. These are here to supply backwards
+    compatibility with old code. Code should really use the new addresses
+    with bus arguments for support on other chips */
+#define CVMX_SMI_CLK	CVMX_SMIX_CLK(0)
+#define CVMX_SMI_CMD	CVMX_SMIX_CMD(0)
+#define CVMX_SMI_EN	CVMX_SMIX_EN(0)
+#define CVMX_SMI_RD_DAT CVMX_SMIX_RD_DAT(0)
+#define CVMX_SMI_WR_DAT CVMX_SMIX_WR_DAT(0)
+
+#endif /* __CVMX_CSR_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-dbg-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-dbg-defs.h
new file mode 100644
index 0000000..9f91fee
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-dbg-defs.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon dbg.
+ */
+
+#ifndef __CVMX_DBG_DEFS_H__
+#define __CVMX_DBG_DEFS_H__
+
+#define CVMX_DBG_DATA (0x00011F00000001E8ull)
+
+/**
+ * cvmx_dbg_data
+ *
+ * DBG_DATA = Debug Data Register
+ *
+ * Value returned on the debug-data lines from the RSLs
+ */
+union cvmx_dbg_data {
+	u64 u64;
+	struct cvmx_dbg_data_s {
+		u64 reserved_23_63 : 41;
+		u64 c_mul : 5;
+		u64 dsel_ext : 1;
+		u64 data : 17;
+	} s;
+};
+
+typedef union cvmx_dbg_data cvmx_dbg_data_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-dpi-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-dpi-defs.h
new file mode 100644
index 0000000..6809894
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-dpi-defs.h
@@ -0,0 +1,1460 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon dpi.
+ */
+
+#ifndef __CVMX_DPI_DEFS_H__
+#define __CVMX_DPI_DEFS_H__
+
+#define CVMX_DPI_BIST_STATUS		     (0x0001DF0000000000ull)
+#define CVMX_DPI_CTL			     (0x0001DF0000000040ull)
+#define CVMX_DPI_DMAX_COUNTS(offset)	     (0x0001DF0000000300ull + ((offset) & 7) * 8)
+#define CVMX_DPI_DMAX_DBELL(offset)	     (0x0001DF0000000200ull + ((offset) & 7) * 8)
+#define CVMX_DPI_DMAX_ERR_RSP_STATUS(offset) (0x0001DF0000000A80ull + ((offset) & 7) * 8)
+#define CVMX_DPI_DMAX_IBUFF_SADDR(offset)    (0x0001DF0000000280ull + ((offset) & 7) * 8)
+#define CVMX_DPI_DMAX_IFLIGHT(offset)	     (0x0001DF0000000A00ull + ((offset) & 7) * 8)
+#define CVMX_DPI_DMAX_NADDR(offset)	     (0x0001DF0000000380ull + ((offset) & 7) * 8)
+#define CVMX_DPI_DMAX_REQBNK0(offset)	     (0x0001DF0000000400ull + ((offset) & 7) * 8)
+#define CVMX_DPI_DMAX_REQBNK1(offset)	     (0x0001DF0000000480ull + ((offset) & 7) * 8)
+#define CVMX_DPI_DMAX_REQQ_CTL(offset)	     (0x0001DF0000000180ull + ((offset) & 7) * 8)
+#define CVMX_DPI_DMA_CONTROL		     (0x0001DF0000000048ull)
+#define CVMX_DPI_DMA_ENGX_EN(offset)	     (0x0001DF0000000080ull + ((offset) & 7) * 8)
+static inline u64 CVMX_DPI_DMA_PPX_CNT(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001DF0000000B00ull + (offset) * 8;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001DF0000000B00ull + (offset) * 8;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001DF0000000C00ull + (offset) * 8;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001DF0000000C00ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001DF0000000C00ull + (offset) * 8;
+	}
+	return 0x0001DF0000000C00ull + (offset) * 8;
+}
+
+#define CVMX_DPI_DMA_PP_INT	      (0x0001DF0000000038ull)
+#define CVMX_DPI_ECC_CTL	      (0x0001DF0000000018ull)
+#define CVMX_DPI_ECC_INT	      (0x0001DF0000000020ull)
+#define CVMX_DPI_ENGX_BUF(offset)     (0x0001DF0000000880ull + ((offset) & 7) * 8)
+#define CVMX_DPI_INFO_REG	      (0x0001DF0000000980ull)
+#define CVMX_DPI_INT_EN		      (0x0001DF0000000010ull)
+#define CVMX_DPI_INT_REG	      (0x0001DF0000000008ull)
+#define CVMX_DPI_NCBX_CFG(offset)     (0x0001DF0000000800ull)
+#define CVMX_DPI_NCB_CTL	      (0x0001DF0000000028ull)
+#define CVMX_DPI_PINT_INFO	      (0x0001DF0000000830ull)
+#define CVMX_DPI_PKT_ERR_RSP	      (0x0001DF0000000078ull)
+#define CVMX_DPI_REQ_ERR_RSP	      (0x0001DF0000000058ull)
+#define CVMX_DPI_REQ_ERR_RSP_EN	      (0x0001DF0000000068ull)
+#define CVMX_DPI_REQ_ERR_RST	      (0x0001DF0000000060ull)
+#define CVMX_DPI_REQ_ERR_RST_EN	      (0x0001DF0000000070ull)
+#define CVMX_DPI_REQ_ERR_SKIP_COMP    (0x0001DF0000000838ull)
+#define CVMX_DPI_REQ_GBL_EN	      (0x0001DF0000000050ull)
+#define CVMX_DPI_SLI_PRTX_CFG(offset) (0x0001DF0000000900ull + ((offset) & 3) * 8)
+static inline u64 CVMX_DPI_SLI_PRTX_ERR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001DF0000000920ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001DF0000000920ull + (offset) * 8;
+		return 0x0001DF0000000920ull + (offset) * 8;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+
+		if (OCTEON_IS_MODEL(OCTEON_CN68XX_PASS1))
+			return 0x0001DF0000000928ull + (offset) * 8;
+
+		if (OCTEON_IS_MODEL(OCTEON_CN68XX_PASS2))
+			return 0x0001DF0000000920ull + (offset) * 8;
+		return 0x0001DF0000000920ull + (offset) * 8;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0001DF0000000920ull + (offset) * 8;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001DF0000000928ull + (offset) * 8;
+	}
+	return 0x0001DF0000000920ull + (offset) * 8;
+}
+
+#define CVMX_DPI_SLI_PRTX_ERR_INFO(offset) (0x0001DF0000000940ull + ((offset) & 3) * 8)
+#define CVMX_DPI_SRIO_RX_BELLX(offset)	   (0x0001DF0000080200ull + ((offset) & 31) * 8)
+#define CVMX_DPI_SRIO_RX_BELL_SEQX(offset) (0x0001DF0000080400ull + ((offset) & 31) * 8)
+#define CVMX_DPI_SWA_Q_VMID		   (0x0001DF0000000030ull)
+
+/**
+ * cvmx_dpi_bist_status
+ *
+ * This is the built-in self-test (BIST) status register. Each bit is the BIST result of an
+ * individual memory (per bit, 0 = pass and 1 = fail).
+ */
+union cvmx_dpi_bist_status {
+	u64 u64;
+	struct cvmx_dpi_bist_status_s {
+		u64 reserved_57_63 : 7;
+		u64 bist : 57;
+	} s;
+	struct cvmx_dpi_bist_status_cn61xx {
+		u64 reserved_47_63 : 17;
+		u64 bist : 47;
+	} cn61xx;
+	struct cvmx_dpi_bist_status_cn63xx {
+		u64 reserved_45_63 : 19;
+		u64 bist : 45;
+	} cn63xx;
+	struct cvmx_dpi_bist_status_cn63xxp1 {
+		u64 reserved_37_63 : 27;
+		u64 bist : 37;
+	} cn63xxp1;
+	struct cvmx_dpi_bist_status_cn61xx cn66xx;
+	struct cvmx_dpi_bist_status_cn63xx cn68xx;
+	struct cvmx_dpi_bist_status_cn63xx cn68xxp1;
+	struct cvmx_dpi_bist_status_cn61xx cn70xx;
+	struct cvmx_dpi_bist_status_cn61xx cn70xxp1;
+	struct cvmx_dpi_bist_status_s cn73xx;
+	struct cvmx_dpi_bist_status_s cn78xx;
+	struct cvmx_dpi_bist_status_cn78xxp1 {
+		u64 reserved_51_63 : 13;
+		u64 bist : 51;
+	} cn78xxp1;
+	struct cvmx_dpi_bist_status_cn61xx cnf71xx;
+	struct cvmx_dpi_bist_status_s cnf75xx;
+};
+
+typedef union cvmx_dpi_bist_status cvmx_dpi_bist_status_t;
+
+/**
+ * cvmx_dpi_ctl
+ *
+ * This register provides the enable bit for the DMA and packet state machines.
+ *
+ */
+union cvmx_dpi_ctl {
+	u64 u64;
+	struct cvmx_dpi_ctl_s {
+		u64 reserved_2_63 : 62;
+		u64 clk : 1;
+		u64 en : 1;
+	} s;
+	struct cvmx_dpi_ctl_cn61xx {
+		u64 reserved_1_63 : 63;
+		u64 en : 1;
+	} cn61xx;
+	struct cvmx_dpi_ctl_s cn63xx;
+	struct cvmx_dpi_ctl_s cn63xxp1;
+	struct cvmx_dpi_ctl_s cn66xx;
+	struct cvmx_dpi_ctl_s cn68xx;
+	struct cvmx_dpi_ctl_s cn68xxp1;
+	struct cvmx_dpi_ctl_cn61xx cn70xx;
+	struct cvmx_dpi_ctl_cn61xx cn70xxp1;
+	struct cvmx_dpi_ctl_cn61xx cn73xx;
+	struct cvmx_dpi_ctl_cn61xx cn78xx;
+	struct cvmx_dpi_ctl_cn61xx cn78xxp1;
+	struct cvmx_dpi_ctl_cn61xx cnf71xx;
+	struct cvmx_dpi_ctl_cn61xx cnf75xx;
+};
+
+typedef union cvmx_dpi_ctl cvmx_dpi_ctl_t;
+
+/**
+ * cvmx_dpi_dma#_counts
+ *
+ * These registers provide values for determining the number of instructions in the local
+ * instruction FIFO.
+ */
+union cvmx_dpi_dmax_counts {
+	u64 u64;
+	struct cvmx_dpi_dmax_counts_s {
+		u64 reserved_39_63 : 25;
+		u64 fcnt : 7;
+		u64 dbell : 32;
+	} s;
+	struct cvmx_dpi_dmax_counts_s cn61xx;
+	struct cvmx_dpi_dmax_counts_s cn63xx;
+	struct cvmx_dpi_dmax_counts_s cn63xxp1;
+	struct cvmx_dpi_dmax_counts_s cn66xx;
+	struct cvmx_dpi_dmax_counts_s cn68xx;
+	struct cvmx_dpi_dmax_counts_s cn68xxp1;
+	struct cvmx_dpi_dmax_counts_s cn70xx;
+	struct cvmx_dpi_dmax_counts_s cn70xxp1;
+	struct cvmx_dpi_dmax_counts_s cn73xx;
+	struct cvmx_dpi_dmax_counts_s cn78xx;
+	struct cvmx_dpi_dmax_counts_s cn78xxp1;
+	struct cvmx_dpi_dmax_counts_s cnf71xx;
+	struct cvmx_dpi_dmax_counts_s cnf75xx;
+};
+
+typedef union cvmx_dpi_dmax_counts cvmx_dpi_dmax_counts_t;
+
+/**
+ * cvmx_dpi_dma#_dbell
+ *
+ * This is the door bell register for the eight DMA instruction queues.
+ *
+ */
+union cvmx_dpi_dmax_dbell {
+	u64 u64;
+	struct cvmx_dpi_dmax_dbell_s {
+		u64 reserved_16_63 : 48;
+		u64 dbell : 16;
+	} s;
+	struct cvmx_dpi_dmax_dbell_s cn61xx;
+	struct cvmx_dpi_dmax_dbell_s cn63xx;
+	struct cvmx_dpi_dmax_dbell_s cn63xxp1;
+	struct cvmx_dpi_dmax_dbell_s cn66xx;
+	struct cvmx_dpi_dmax_dbell_s cn68xx;
+	struct cvmx_dpi_dmax_dbell_s cn68xxp1;
+	struct cvmx_dpi_dmax_dbell_s cn70xx;
+	struct cvmx_dpi_dmax_dbell_s cn70xxp1;
+	struct cvmx_dpi_dmax_dbell_s cn73xx;
+	struct cvmx_dpi_dmax_dbell_s cn78xx;
+	struct cvmx_dpi_dmax_dbell_s cn78xxp1;
+	struct cvmx_dpi_dmax_dbell_s cnf71xx;
+	struct cvmx_dpi_dmax_dbell_s cnf75xx;
+};
+
+typedef union cvmx_dpi_dmax_dbell cvmx_dpi_dmax_dbell_t;
+
+/**
+ * cvmx_dpi_dma#_err_rsp_status
+ */
+union cvmx_dpi_dmax_err_rsp_status {
+	u64 u64;
+	struct cvmx_dpi_dmax_err_rsp_status_s {
+		u64 reserved_6_63 : 58;
+		u64 status : 6;
+	} s;
+	struct cvmx_dpi_dmax_err_rsp_status_s cn61xx;
+	struct cvmx_dpi_dmax_err_rsp_status_s cn66xx;
+	struct cvmx_dpi_dmax_err_rsp_status_s cn68xx;
+	struct cvmx_dpi_dmax_err_rsp_status_s cn68xxp1;
+	struct cvmx_dpi_dmax_err_rsp_status_s cn70xx;
+	struct cvmx_dpi_dmax_err_rsp_status_s cn70xxp1;
+	struct cvmx_dpi_dmax_err_rsp_status_s cn73xx;
+	struct cvmx_dpi_dmax_err_rsp_status_s cn78xx;
+	struct cvmx_dpi_dmax_err_rsp_status_s cn78xxp1;
+	struct cvmx_dpi_dmax_err_rsp_status_s cnf71xx;
+	struct cvmx_dpi_dmax_err_rsp_status_s cnf75xx;
+};
+
+typedef union cvmx_dpi_dmax_err_rsp_status cvmx_dpi_dmax_err_rsp_status_t;
+
+/**
+ * cvmx_dpi_dma#_ibuff_saddr
+ *
+ * These registers provide the address to start reading instructions for the eight DMA
+ * instruction queues.
+ */
+union cvmx_dpi_dmax_ibuff_saddr {
+	u64 u64;
+	struct cvmx_dpi_dmax_ibuff_saddr_s {
+		u64 reserved_62_63 : 2;
+		u64 csize : 14;
+		u64 reserved_0_47 : 48;
+	} s;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn61xx {
+		u64 reserved_62_63 : 2;
+		u64 csize : 14;
+		u64 reserved_41_47 : 7;
+		u64 idle : 1;
+		u64 reserved_36_39 : 4;
+		u64 saddr : 29;
+		u64 reserved_0_6 : 7;
+	} cn61xx;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn61xx cn63xx;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn61xx cn63xxp1;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn61xx cn66xx;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn68xx {
+		u64 reserved_62_63 : 2;
+		u64 csize : 14;
+		u64 reserved_41_47 : 7;
+		u64 idle : 1;
+		u64 saddr : 33;
+		u64 reserved_0_6 : 7;
+	} cn68xx;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn68xx cn68xxp1;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn61xx cn70xx;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn61xx cn70xxp1;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn73xx {
+		u64 idle : 1;
+		u64 reserved_62_62 : 1;
+		u64 csize : 14;
+		u64 reserved_42_47 : 6;
+		u64 saddr : 35;
+		u64 reserved_0_6 : 7;
+	} cn73xx;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn73xx cn78xx;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn73xx cn78xxp1;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn61xx cnf71xx;
+	struct cvmx_dpi_dmax_ibuff_saddr_cn73xx cnf75xx;
+};
+
+typedef union cvmx_dpi_dmax_ibuff_saddr cvmx_dpi_dmax_ibuff_saddr_t;
+
+/**
+ * cvmx_dpi_dma#_iflight
+ */
+union cvmx_dpi_dmax_iflight {
+	u64 u64;
+	struct cvmx_dpi_dmax_iflight_s {
+		u64 reserved_3_63 : 61;
+		u64 cnt : 3;
+	} s;
+	struct cvmx_dpi_dmax_iflight_s cn61xx;
+	struct cvmx_dpi_dmax_iflight_s cn66xx;
+	struct cvmx_dpi_dmax_iflight_s cn68xx;
+	struct cvmx_dpi_dmax_iflight_s cn68xxp1;
+	struct cvmx_dpi_dmax_iflight_s cn70xx;
+	struct cvmx_dpi_dmax_iflight_s cn70xxp1;
+	struct cvmx_dpi_dmax_iflight_s cn73xx;
+	struct cvmx_dpi_dmax_iflight_s cn78xx;
+	struct cvmx_dpi_dmax_iflight_s cn78xxp1;
+	struct cvmx_dpi_dmax_iflight_s cnf71xx;
+	struct cvmx_dpi_dmax_iflight_s cnf75xx;
+};
+
+typedef union cvmx_dpi_dmax_iflight cvmx_dpi_dmax_iflight_t;
+
+/**
+ * cvmx_dpi_dma#_naddr
+ *
+ * These registers provide the L2C addresses to read the next Ichunk data.
+ *
+ */
+union cvmx_dpi_dmax_naddr {
+	u64 u64;
+	struct cvmx_dpi_dmax_naddr_s {
+		u64 reserved_42_63 : 22;
+		u64 addr : 42;
+	} s;
+	struct cvmx_dpi_dmax_naddr_cn61xx {
+		u64 reserved_36_63 : 28;
+		u64 addr : 36;
+	} cn61xx;
+	struct cvmx_dpi_dmax_naddr_cn61xx cn63xx;
+	struct cvmx_dpi_dmax_naddr_cn61xx cn63xxp1;
+	struct cvmx_dpi_dmax_naddr_cn61xx cn66xx;
+	struct cvmx_dpi_dmax_naddr_cn68xx {
+		u64 reserved_40_63 : 24;
+		u64 addr : 40;
+	} cn68xx;
+	struct cvmx_dpi_dmax_naddr_cn68xx cn68xxp1;
+	struct cvmx_dpi_dmax_naddr_cn61xx cn70xx;
+	struct cvmx_dpi_dmax_naddr_cn61xx cn70xxp1;
+	struct cvmx_dpi_dmax_naddr_s cn73xx;
+	struct cvmx_dpi_dmax_naddr_s cn78xx;
+	struct cvmx_dpi_dmax_naddr_s cn78xxp1;
+	struct cvmx_dpi_dmax_naddr_cn61xx cnf71xx;
+	struct cvmx_dpi_dmax_naddr_s cnf75xx;
+};
+
+typedef union cvmx_dpi_dmax_naddr cvmx_dpi_dmax_naddr_t;
+
+/**
+ * cvmx_dpi_dma#_reqbnk0
+ *
+ * These registers provide the current contents of the request state machine, bank 0.
+ *
+ */
+union cvmx_dpi_dmax_reqbnk0 {
+	u64 u64;
+	struct cvmx_dpi_dmax_reqbnk0_s {
+		u64 state : 64;
+	} s;
+	struct cvmx_dpi_dmax_reqbnk0_s cn61xx;
+	struct cvmx_dpi_dmax_reqbnk0_s cn63xx;
+	struct cvmx_dpi_dmax_reqbnk0_s cn63xxp1;
+	struct cvmx_dpi_dmax_reqbnk0_s cn66xx;
+	struct cvmx_dpi_dmax_reqbnk0_s cn68xx;
+	struct cvmx_dpi_dmax_reqbnk0_s cn68xxp1;
+	struct cvmx_dpi_dmax_reqbnk0_s cn70xx;
+	struct cvmx_dpi_dmax_reqbnk0_s cn70xxp1;
+	struct cvmx_dpi_dmax_reqbnk0_s cn73xx;
+	struct cvmx_dpi_dmax_reqbnk0_s cn78xx;
+	struct cvmx_dpi_dmax_reqbnk0_s cn78xxp1;
+	struct cvmx_dpi_dmax_reqbnk0_s cnf71xx;
+	struct cvmx_dpi_dmax_reqbnk0_s cnf75xx;
+};
+
+typedef union cvmx_dpi_dmax_reqbnk0 cvmx_dpi_dmax_reqbnk0_t;
+
+/**
+ * cvmx_dpi_dma#_reqbnk1
+ *
+ * These registers provide the current contents of the request state machine, bank 1.
+ *
+ */
+union cvmx_dpi_dmax_reqbnk1 {
+	u64 u64;
+	struct cvmx_dpi_dmax_reqbnk1_s {
+		u64 state : 64;
+	} s;
+	struct cvmx_dpi_dmax_reqbnk1_s cn61xx;
+	struct cvmx_dpi_dmax_reqbnk1_s cn63xx;
+	struct cvmx_dpi_dmax_reqbnk1_s cn63xxp1;
+	struct cvmx_dpi_dmax_reqbnk1_s cn66xx;
+	struct cvmx_dpi_dmax_reqbnk1_s cn68xx;
+	struct cvmx_dpi_dmax_reqbnk1_s cn68xxp1;
+	struct cvmx_dpi_dmax_reqbnk1_s cn70xx;
+	struct cvmx_dpi_dmax_reqbnk1_s cn70xxp1;
+	struct cvmx_dpi_dmax_reqbnk1_s cn73xx;
+	struct cvmx_dpi_dmax_reqbnk1_s cn78xx;
+	struct cvmx_dpi_dmax_reqbnk1_s cn78xxp1;
+	struct cvmx_dpi_dmax_reqbnk1_s cnf71xx;
+	struct cvmx_dpi_dmax_reqbnk1_s cnf75xx;
+};
+
+typedef union cvmx_dpi_dmax_reqbnk1 cvmx_dpi_dmax_reqbnk1_t;
+
+/**
+ * cvmx_dpi_dma#_reqq_ctl
+ *
+ * This register contains the control bits for transactions on the eight request queues.
+ *
+ */
+union cvmx_dpi_dmax_reqq_ctl {
+	u64 u64;
+	struct cvmx_dpi_dmax_reqq_ctl_s {
+		u64 reserved_9_63 : 55;
+		u64 st_cmd : 1;
+		u64 reserved_2_7 : 6;
+		u64 ld_cmd : 2;
+	} s;
+	struct cvmx_dpi_dmax_reqq_ctl_s cn73xx;
+	struct cvmx_dpi_dmax_reqq_ctl_s cn78xx;
+	struct cvmx_dpi_dmax_reqq_ctl_s cn78xxp1;
+	struct cvmx_dpi_dmax_reqq_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dpi_dmax_reqq_ctl cvmx_dpi_dmax_reqq_ctl_t;
+
+/**
+ * cvmx_dpi_dma_control
+ *
+ * This register controls the operation of DMA input and output.
+ *
+ */
+union cvmx_dpi_dma_control {
+	u64 u64;
+	struct cvmx_dpi_dma_control_s {
+		u64 reserved_62_63 : 2;
+		u64 dici_mode : 1;
+		u64 pkt_en1 : 1;
+		u64 ffp_dis : 1;
+		u64 commit_mode : 1;
+		u64 pkt_hp : 1;
+		u64 pkt_en : 1;
+		u64 reserved_54_55 : 2;
+		u64 dma_enb : 6;
+		u64 wqecsdis : 1;
+		u64 wqecsoff : 7;
+		u64 zbwcsen : 1;
+		u64 wqecsmode : 2;
+		u64 reserved_35_36 : 2;
+		u64 ncb_tag : 1;
+		u64 b0_lend : 1;
+		u64 reserved_20_32 : 13;
+		u64 o_add1 : 1;
+		u64 o_ro : 1;
+		u64 o_ns : 1;
+		u64 o_es : 2;
+		u64 o_mode : 1;
+		u64 reserved_0_13 : 14;
+	} s;
+	struct cvmx_dpi_dma_control_cn61xx {
+		u64 reserved_62_63 : 2;
+		u64 dici_mode : 1;
+		u64 pkt_en1 : 1;
+		u64 ffp_dis : 1;
+		u64 commit_mode : 1;
+		u64 pkt_hp : 1;
+		u64 pkt_en : 1;
+		u64 reserved_54_55 : 2;
+		u64 dma_enb : 6;
+		u64 reserved_34_47 : 14;
+		u64 b0_lend : 1;
+		u64 dwb_denb : 1;
+		u64 dwb_ichk : 9;
+		u64 fpa_que : 3;
+		u64 o_add1 : 1;
+		u64 o_ro : 1;
+		u64 o_ns : 1;
+		u64 o_es : 2;
+		u64 o_mode : 1;
+		u64 reserved_0_13 : 14;
+	} cn61xx;
+	struct cvmx_dpi_dma_control_cn63xx {
+		u64 reserved_61_63 : 3;
+		u64 pkt_en1 : 1;
+		u64 ffp_dis : 1;
+		u64 commit_mode : 1;
+		u64 pkt_hp : 1;
+		u64 pkt_en : 1;
+		u64 reserved_54_55 : 2;
+		u64 dma_enb : 6;
+		u64 reserved_34_47 : 14;
+		u64 b0_lend : 1;
+		u64 dwb_denb : 1;
+		u64 dwb_ichk : 9;
+		u64 fpa_que : 3;
+		u64 o_add1 : 1;
+		u64 o_ro : 1;
+		u64 o_ns : 1;
+		u64 o_es : 2;
+		u64 o_mode : 1;
+		u64 reserved_0_13 : 14;
+	} cn63xx;
+	struct cvmx_dpi_dma_control_cn63xxp1 {
+		u64 reserved_59_63 : 5;
+		u64 commit_mode : 1;
+		u64 pkt_hp : 1;
+		u64 pkt_en : 1;
+		u64 reserved_54_55 : 2;
+		u64 dma_enb : 6;
+		u64 reserved_34_47 : 14;
+		u64 b0_lend : 1;
+		u64 dwb_denb : 1;
+		u64 dwb_ichk : 9;
+		u64 fpa_que : 3;
+		u64 o_add1 : 1;
+		u64 o_ro : 1;
+		u64 o_ns : 1;
+		u64 o_es : 2;
+		u64 o_mode : 1;
+		u64 reserved_0_13 : 14;
+	} cn63xxp1;
+	struct cvmx_dpi_dma_control_cn63xx cn66xx;
+	struct cvmx_dpi_dma_control_cn61xx cn68xx;
+	struct cvmx_dpi_dma_control_cn63xx cn68xxp1;
+	struct cvmx_dpi_dma_control_cn61xx cn70xx;
+	struct cvmx_dpi_dma_control_cn61xx cn70xxp1;
+	struct cvmx_dpi_dma_control_cn73xx {
+		u64 reserved_60_63 : 4;
+		u64 ffp_dis : 1;
+		u64 commit_mode : 1;
+		u64 reserved_57_57 : 1;
+		u64 pkt_en : 1;
+		u64 reserved_54_55 : 2;
+		u64 dma_enb : 6;
+		u64 wqecsdis : 1;
+		u64 wqecsoff : 7;
+		u64 zbwcsen : 1;
+		u64 wqecsmode : 2;
+		u64 reserved_35_36 : 2;
+		u64 ncb_tag : 1;
+		u64 b0_lend : 1;
+		u64 ldwb : 1;
+		u64 aura_ichk : 12;
+		u64 o_add1 : 1;
+		u64 o_ro : 1;
+		u64 o_ns : 1;
+		u64 o_es : 2;
+		u64 o_mode : 1;
+		u64 reserved_0_13 : 14;
+	} cn73xx;
+	struct cvmx_dpi_dma_control_cn73xx cn78xx;
+	struct cvmx_dpi_dma_control_cn73xx cn78xxp1;
+	struct cvmx_dpi_dma_control_cn61xx cnf71xx;
+	struct cvmx_dpi_dma_control_cn73xx cnf75xx;
+};
+
+typedef union cvmx_dpi_dma_control cvmx_dpi_dma_control_t;
+
+/**
+ * cvmx_dpi_dma_eng#_en
+ *
+ * These registers provide control for the DMA engines.
+ *
+ */
+union cvmx_dpi_dma_engx_en {
+	u64 u64;
+	struct cvmx_dpi_dma_engx_en_s {
+		u64 reserved_39_63 : 25;
+		u64 eng_molr : 7;
+		u64 reserved_8_31 : 24;
+		u64 qen : 8;
+	} s;
+	struct cvmx_dpi_dma_engx_en_cn61xx {
+		u64 reserved_8_63 : 56;
+		u64 qen : 8;
+	} cn61xx;
+	struct cvmx_dpi_dma_engx_en_cn61xx cn63xx;
+	struct cvmx_dpi_dma_engx_en_cn61xx cn63xxp1;
+	struct cvmx_dpi_dma_engx_en_cn61xx cn66xx;
+	struct cvmx_dpi_dma_engx_en_cn61xx cn68xx;
+	struct cvmx_dpi_dma_engx_en_cn61xx cn68xxp1;
+	struct cvmx_dpi_dma_engx_en_cn61xx cn70xx;
+	struct cvmx_dpi_dma_engx_en_cn61xx cn70xxp1;
+	struct cvmx_dpi_dma_engx_en_s cn73xx;
+	struct cvmx_dpi_dma_engx_en_s cn78xx;
+	struct cvmx_dpi_dma_engx_en_s cn78xxp1;
+	struct cvmx_dpi_dma_engx_en_cn61xx cnf71xx;
+	struct cvmx_dpi_dma_engx_en_s cnf75xx;
+};
+
+typedef union cvmx_dpi_dma_engx_en cvmx_dpi_dma_engx_en_t;
+
+/**
+ * cvmx_dpi_dma_pp#_cnt
+ *
+ * DPI_DMA_PP[0..3]_CNT  = DMA per PP Instr Done Counter
+ * When DMA Instruction Completion Interrupt Mode DPI_DMA_CONTROL.DICI_MODE is enabled, every dma
+ * instruction
+ * that has the WQP=0 and a PTR value of 1..4 will incremrement DPI_DMA_PPx_CNT value-1 counter.
+ * Instructions with WQP=0 and PTR values higher then 0x3F will still send a zero byte write.
+ * Hardware reserves that values 5..63 for future use and will treat them as a PTR of 0 and do
+ * nothing.
+ */
+union cvmx_dpi_dma_ppx_cnt {
+	u64 u64;
+	struct cvmx_dpi_dma_ppx_cnt_s {
+		u64 reserved_16_63 : 48;
+		u64 cnt : 16;
+	} s;
+	struct cvmx_dpi_dma_ppx_cnt_s cn61xx;
+	struct cvmx_dpi_dma_ppx_cnt_s cn68xx;
+	struct cvmx_dpi_dma_ppx_cnt_s cn70xx;
+	struct cvmx_dpi_dma_ppx_cnt_s cn70xxp1;
+	struct cvmx_dpi_dma_ppx_cnt_s cn73xx;
+	struct cvmx_dpi_dma_ppx_cnt_s cn78xx;
+	struct cvmx_dpi_dma_ppx_cnt_s cn78xxp1;
+	struct cvmx_dpi_dma_ppx_cnt_s cnf71xx;
+	struct cvmx_dpi_dma_ppx_cnt_s cnf75xx;
+};
+
+typedef union cvmx_dpi_dma_ppx_cnt cvmx_dpi_dma_ppx_cnt_t;
+
+/**
+ * cvmx_dpi_dma_pp_int
+ */
+union cvmx_dpi_dma_pp_int {
+	u64 u64;
+	struct cvmx_dpi_dma_pp_int_s {
+		u64 reserved_48_63 : 16;
+		u64 complete : 48;
+	} s;
+	struct cvmx_dpi_dma_pp_int_cn73xx {
+		u64 reserved_16_63 : 48;
+		u64 complete : 16;
+	} cn73xx;
+	struct cvmx_dpi_dma_pp_int_s cn78xx;
+	struct cvmx_dpi_dma_pp_int_s cn78xxp1;
+	struct cvmx_dpi_dma_pp_int_cn73xx cnf75xx;
+};
+
+typedef union cvmx_dpi_dma_pp_int cvmx_dpi_dma_pp_int_t;
+
+/**
+ * cvmx_dpi_ecc_ctl
+ *
+ * This register allows inserting ECC errors for testing.
+ *
+ */
+union cvmx_dpi_ecc_ctl {
+	u64 u64;
+	struct cvmx_dpi_ecc_ctl_s {
+		u64 reserved_33_63 : 31;
+		u64 ram_cdis : 1;
+		u64 reserved_17_31 : 15;
+		u64 ram_flip1 : 1;
+		u64 reserved_1_15 : 15;
+		u64 ram_flip0 : 1;
+	} s;
+	struct cvmx_dpi_ecc_ctl_s cn73xx;
+	struct cvmx_dpi_ecc_ctl_s cn78xx;
+	struct cvmx_dpi_ecc_ctl_s cn78xxp1;
+	struct cvmx_dpi_ecc_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dpi_ecc_ctl cvmx_dpi_ecc_ctl_t;
+
+/**
+ * cvmx_dpi_ecc_int
+ *
+ * This register contains ECC error interrupt summary bits.
+ *
+ */
+union cvmx_dpi_ecc_int {
+	u64 u64;
+	struct cvmx_dpi_ecc_int_s {
+		u64 reserved_47_63 : 17;
+		u64 ram_sbe : 15;
+		u64 reserved_15_31 : 17;
+		u64 ram_dbe : 15;
+	} s;
+	struct cvmx_dpi_ecc_int_s cn73xx;
+	struct cvmx_dpi_ecc_int_s cn78xx;
+	struct cvmx_dpi_ecc_int_s cn78xxp1;
+	struct cvmx_dpi_ecc_int_s cnf75xx;
+};
+
+typedef union cvmx_dpi_ecc_int cvmx_dpi_ecc_int_t;
+
+/**
+ * cvmx_dpi_eng#_buf
+ *
+ * Notes:
+ * The total amount of storage allocated to the 6 DPI DMA engines (via DPI_ENG*_BUF[BLKS]) must not exceed 8KB.
+ *
+ */
+union cvmx_dpi_engx_buf {
+	u64 u64;
+	struct cvmx_dpi_engx_buf_s {
+		u64 reserved_38_63 : 26;
+		u64 compblks : 6;
+		u64 reserved_10_31 : 22;
+		u64 base : 6;
+		u64 blks : 4;
+	} s;
+	struct cvmx_dpi_engx_buf_cn61xx {
+		u64 reserved_37_63 : 27;
+		u64 compblks : 5;
+		u64 reserved_9_31 : 23;
+		u64 base : 5;
+		u64 blks : 4;
+	} cn61xx;
+	struct cvmx_dpi_engx_buf_cn63xx {
+		u64 reserved_8_63 : 56;
+		u64 base : 4;
+		u64 blks : 4;
+	} cn63xx;
+	struct cvmx_dpi_engx_buf_cn63xx cn63xxp1;
+	struct cvmx_dpi_engx_buf_cn61xx cn66xx;
+	struct cvmx_dpi_engx_buf_cn61xx cn68xx;
+	struct cvmx_dpi_engx_buf_cn61xx cn68xxp1;
+	struct cvmx_dpi_engx_buf_cn61xx cn70xx;
+	struct cvmx_dpi_engx_buf_cn61xx cn70xxp1;
+	struct cvmx_dpi_engx_buf_s cn73xx;
+	struct cvmx_dpi_engx_buf_s cn78xx;
+	struct cvmx_dpi_engx_buf_s cn78xxp1;
+	struct cvmx_dpi_engx_buf_cn61xx cnf71xx;
+	struct cvmx_dpi_engx_buf_s cnf75xx;
+};
+
+typedef union cvmx_dpi_engx_buf cvmx_dpi_engx_buf_t;
+
+/**
+ * cvmx_dpi_info_reg
+ */
+union cvmx_dpi_info_reg {
+	u64 u64;
+	struct cvmx_dpi_info_reg_s {
+		u64 reserved_8_63 : 56;
+		u64 ffp : 4;
+		u64 reserved_2_3 : 2;
+		u64 ncb : 1;
+		u64 rsl : 1;
+	} s;
+	struct cvmx_dpi_info_reg_s cn61xx;
+	struct cvmx_dpi_info_reg_s cn63xx;
+	struct cvmx_dpi_info_reg_cn63xxp1 {
+		u64 reserved_2_63 : 62;
+		u64 ncb : 1;
+		u64 rsl : 1;
+	} cn63xxp1;
+	struct cvmx_dpi_info_reg_s cn66xx;
+	struct cvmx_dpi_info_reg_s cn68xx;
+	struct cvmx_dpi_info_reg_s cn68xxp1;
+	struct cvmx_dpi_info_reg_s cn70xx;
+	struct cvmx_dpi_info_reg_s cn70xxp1;
+	struct cvmx_dpi_info_reg_s cn73xx;
+	struct cvmx_dpi_info_reg_s cn78xx;
+	struct cvmx_dpi_info_reg_s cn78xxp1;
+	struct cvmx_dpi_info_reg_s cnf71xx;
+	struct cvmx_dpi_info_reg_s cnf75xx;
+};
+
+typedef union cvmx_dpi_info_reg cvmx_dpi_info_reg_t;
+
+/**
+ * cvmx_dpi_int_en
+ */
+union cvmx_dpi_int_en {
+	u64 u64;
+	struct cvmx_dpi_int_en_s {
+		u64 reserved_28_63 : 36;
+		u64 sprt3_rst : 1;
+		u64 sprt2_rst : 1;
+		u64 sprt1_rst : 1;
+		u64 sprt0_rst : 1;
+		u64 reserved_23_23 : 1;
+		u64 req_badfil : 1;
+		u64 req_inull : 1;
+		u64 req_anull : 1;
+		u64 req_undflw : 1;
+		u64 req_ovrflw : 1;
+		u64 req_badlen : 1;
+		u64 req_badadr : 1;
+		u64 dmadbo : 8;
+		u64 reserved_2_7 : 6;
+		u64 nfovr : 1;
+		u64 nderr : 1;
+	} s;
+	struct cvmx_dpi_int_en_s cn61xx;
+	struct cvmx_dpi_int_en_cn63xx {
+		u64 reserved_26_63 : 38;
+		u64 sprt1_rst : 1;
+		u64 sprt0_rst : 1;
+		u64 reserved_23_23 : 1;
+		u64 req_badfil : 1;
+		u64 req_inull : 1;
+		u64 req_anull : 1;
+		u64 req_undflw : 1;
+		u64 req_ovrflw : 1;
+		u64 req_badlen : 1;
+		u64 req_badadr : 1;
+		u64 dmadbo : 8;
+		u64 reserved_2_7 : 6;
+		u64 nfovr : 1;
+		u64 nderr : 1;
+	} cn63xx;
+	struct cvmx_dpi_int_en_cn63xx cn63xxp1;
+	struct cvmx_dpi_int_en_s cn66xx;
+	struct cvmx_dpi_int_en_cn63xx cn68xx;
+	struct cvmx_dpi_int_en_cn63xx cn68xxp1;
+	struct cvmx_dpi_int_en_cn70xx {
+		u64 reserved_28_63 : 36;
+		u64 sprt3_rst : 1;
+		u64 sprt2_rst : 1;
+		u64 sprt1_rst : 1;
+		u64 sprt0_rst : 1;
+		u64 reserved_23_23 : 1;
+		u64 req_badfil : 1;
+		u64 req_inull : 1;
+		u64 req_anull : 1;
+		u64 req_undflw : 1;
+		u64 req_ovrflw : 1;
+		u64 req_badlen : 1;
+		u64 req_badadr : 1;
+		u64 dmadbo : 8;
+		u64 reserved_7_2 : 6;
+		u64 nfovr : 1;
+		u64 nderr : 1;
+	} cn70xx;
+	struct cvmx_dpi_int_en_cn70xx cn70xxp1;
+	struct cvmx_dpi_int_en_s cnf71xx;
+};
+
+typedef union cvmx_dpi_int_en cvmx_dpi_int_en_t;
+
+/**
+ * cvmx_dpi_int_reg
+ *
+ * This register contains error flags for DPI.
+ *
+ */
+union cvmx_dpi_int_reg {
+	u64 u64;
+	struct cvmx_dpi_int_reg_s {
+		u64 reserved_28_63 : 36;
+		u64 sprt3_rst : 1;
+		u64 sprt2_rst : 1;
+		u64 sprt1_rst : 1;
+		u64 sprt0_rst : 1;
+		u64 reserved_23_23 : 1;
+		u64 req_badfil : 1;
+		u64 req_inull : 1;
+		u64 req_anull : 1;
+		u64 req_undflw : 1;
+		u64 req_ovrflw : 1;
+		u64 req_badlen : 1;
+		u64 req_badadr : 1;
+		u64 dmadbo : 8;
+		u64 reserved_2_7 : 6;
+		u64 nfovr : 1;
+		u64 nderr : 1;
+	} s;
+	struct cvmx_dpi_int_reg_s cn61xx;
+	struct cvmx_dpi_int_reg_cn63xx {
+		u64 reserved_26_63 : 38;
+		u64 sprt1_rst : 1;
+		u64 sprt0_rst : 1;
+		u64 reserved_23_23 : 1;
+		u64 req_badfil : 1;
+		u64 req_inull : 1;
+		u64 req_anull : 1;
+		u64 req_undflw : 1;
+		u64 req_ovrflw : 1;
+		u64 req_badlen : 1;
+		u64 req_badadr : 1;
+		u64 dmadbo : 8;
+		u64 reserved_2_7 : 6;
+		u64 nfovr : 1;
+		u64 nderr : 1;
+	} cn63xx;
+	struct cvmx_dpi_int_reg_cn63xx cn63xxp1;
+	struct cvmx_dpi_int_reg_s cn66xx;
+	struct cvmx_dpi_int_reg_cn63xx cn68xx;
+	struct cvmx_dpi_int_reg_cn63xx cn68xxp1;
+	struct cvmx_dpi_int_reg_s cn70xx;
+	struct cvmx_dpi_int_reg_s cn70xxp1;
+	struct cvmx_dpi_int_reg_cn73xx {
+		u64 reserved_23_63 : 41;
+		u64 req_badfil : 1;
+		u64 req_inull : 1;
+		u64 req_anull : 1;
+		u64 req_undflw : 1;
+		u64 req_ovrflw : 1;
+		u64 req_badlen : 1;
+		u64 req_badadr : 1;
+		u64 dmadbo : 8;
+		u64 reserved_2_7 : 6;
+		u64 nfovr : 1;
+		u64 nderr : 1;
+	} cn73xx;
+	struct cvmx_dpi_int_reg_cn73xx cn78xx;
+	struct cvmx_dpi_int_reg_s cn78xxp1;
+	struct cvmx_dpi_int_reg_s cnf71xx;
+	struct cvmx_dpi_int_reg_cn73xx cnf75xx;
+};
+
+typedef union cvmx_dpi_int_reg cvmx_dpi_int_reg_t;
+
+/**
+ * cvmx_dpi_ncb#_cfg
+ */
+union cvmx_dpi_ncbx_cfg {
+	u64 u64;
+	struct cvmx_dpi_ncbx_cfg_s {
+		u64 reserved_6_63 : 58;
+		u64 molr : 6;
+	} s;
+	struct cvmx_dpi_ncbx_cfg_s cn61xx;
+	struct cvmx_dpi_ncbx_cfg_s cn66xx;
+	struct cvmx_dpi_ncbx_cfg_s cn68xx;
+	struct cvmx_dpi_ncbx_cfg_s cn70xx;
+	struct cvmx_dpi_ncbx_cfg_s cn70xxp1;
+	struct cvmx_dpi_ncbx_cfg_s cn73xx;
+	struct cvmx_dpi_ncbx_cfg_s cn78xx;
+	struct cvmx_dpi_ncbx_cfg_s cn78xxp1;
+	struct cvmx_dpi_ncbx_cfg_s cnf71xx;
+	struct cvmx_dpi_ncbx_cfg_s cnf75xx;
+};
+
+typedef union cvmx_dpi_ncbx_cfg cvmx_dpi_ncbx_cfg_t;
+
+/**
+ * cvmx_dpi_ncb_ctl
+ *
+ * This register chooses which NCB interface DPI uses for L2/DRAM reads/writes.
+ *
+ */
+union cvmx_dpi_ncb_ctl {
+	u64 u64;
+	struct cvmx_dpi_ncb_ctl_s {
+		u64 reserved_25_63 : 39;
+		u64 ncbsel_prt_xor_dis : 1;
+		u64 reserved_21_23 : 3;
+		u64 ncbsel_zbw : 1;
+		u64 reserved_17_19 : 3;
+		u64 ncbsel_req : 1;
+		u64 reserved_13_15 : 3;
+		u64 ncbsel_dst : 1;
+		u64 reserved_9_11 : 3;
+		u64 ncbsel_src : 1;
+		u64 reserved_1_7 : 7;
+		u64 prt : 1;
+	} s;
+	struct cvmx_dpi_ncb_ctl_cn73xx {
+		u64 reserved_25_63 : 39;
+		u64 ncbsel_prt_xor_dis : 1;
+		u64 reserved_21_23 : 3;
+		u64 ncbsel_zbw : 1;
+		u64 reserved_17_19 : 3;
+		u64 ncbsel_req : 1;
+		u64 reserved_13_15 : 3;
+		u64 ncbsel_dst : 1;
+		u64 reserved_9_11 : 3;
+		u64 ncbsel_src : 1;
+		u64 reserved_0_7 : 8;
+	} cn73xx;
+	struct cvmx_dpi_ncb_ctl_s cn78xx;
+	struct cvmx_dpi_ncb_ctl_s cn78xxp1;
+	struct cvmx_dpi_ncb_ctl_cn73xx cnf75xx;
+};
+
+typedef union cvmx_dpi_ncb_ctl cvmx_dpi_ncb_ctl_t;
+
+/**
+ * cvmx_dpi_pint_info
+ *
+ * This register provides DPI packet interrupt information.
+ *
+ */
+union cvmx_dpi_pint_info {
+	u64 u64;
+	struct cvmx_dpi_pint_info_s {
+		u64 reserved_14_63 : 50;
+		u64 iinfo : 6;
+		u64 reserved_6_7 : 2;
+		u64 sinfo : 6;
+	} s;
+	struct cvmx_dpi_pint_info_s cn61xx;
+	struct cvmx_dpi_pint_info_s cn63xx;
+	struct cvmx_dpi_pint_info_s cn63xxp1;
+	struct cvmx_dpi_pint_info_s cn66xx;
+	struct cvmx_dpi_pint_info_s cn68xx;
+	struct cvmx_dpi_pint_info_s cn68xxp1;
+	struct cvmx_dpi_pint_info_s cn70xx;
+	struct cvmx_dpi_pint_info_s cn70xxp1;
+	struct cvmx_dpi_pint_info_s cn73xx;
+	struct cvmx_dpi_pint_info_s cn78xx;
+	struct cvmx_dpi_pint_info_s cn78xxp1;
+	struct cvmx_dpi_pint_info_s cnf71xx;
+	struct cvmx_dpi_pint_info_s cnf75xx;
+};
+
+typedef union cvmx_dpi_pint_info cvmx_dpi_pint_info_t;
+
+/**
+ * cvmx_dpi_pkt_err_rsp
+ */
+union cvmx_dpi_pkt_err_rsp {
+	u64 u64;
+	struct cvmx_dpi_pkt_err_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 pkterr : 1;
+	} s;
+	struct cvmx_dpi_pkt_err_rsp_s cn61xx;
+	struct cvmx_dpi_pkt_err_rsp_s cn63xx;
+	struct cvmx_dpi_pkt_err_rsp_s cn63xxp1;
+	struct cvmx_dpi_pkt_err_rsp_s cn66xx;
+	struct cvmx_dpi_pkt_err_rsp_s cn68xx;
+	struct cvmx_dpi_pkt_err_rsp_s cn68xxp1;
+	struct cvmx_dpi_pkt_err_rsp_s cn70xx;
+	struct cvmx_dpi_pkt_err_rsp_s cn70xxp1;
+	struct cvmx_dpi_pkt_err_rsp_s cn73xx;
+	struct cvmx_dpi_pkt_err_rsp_s cn78xx;
+	struct cvmx_dpi_pkt_err_rsp_s cn78xxp1;
+	struct cvmx_dpi_pkt_err_rsp_s cnf71xx;
+	struct cvmx_dpi_pkt_err_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dpi_pkt_err_rsp cvmx_dpi_pkt_err_rsp_t;
+
+/**
+ * cvmx_dpi_req_err_rsp
+ */
+union cvmx_dpi_req_err_rsp {
+	u64 u64;
+	struct cvmx_dpi_req_err_rsp_s {
+		u64 reserved_8_63 : 56;
+		u64 qerr : 8;
+	} s;
+	struct cvmx_dpi_req_err_rsp_s cn61xx;
+	struct cvmx_dpi_req_err_rsp_s cn63xx;
+	struct cvmx_dpi_req_err_rsp_s cn63xxp1;
+	struct cvmx_dpi_req_err_rsp_s cn66xx;
+	struct cvmx_dpi_req_err_rsp_s cn68xx;
+	struct cvmx_dpi_req_err_rsp_s cn68xxp1;
+	struct cvmx_dpi_req_err_rsp_s cn70xx;
+	struct cvmx_dpi_req_err_rsp_s cn70xxp1;
+	struct cvmx_dpi_req_err_rsp_s cn73xx;
+	struct cvmx_dpi_req_err_rsp_s cn78xx;
+	struct cvmx_dpi_req_err_rsp_s cn78xxp1;
+	struct cvmx_dpi_req_err_rsp_s cnf71xx;
+	struct cvmx_dpi_req_err_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dpi_req_err_rsp cvmx_dpi_req_err_rsp_t;
+
+/**
+ * cvmx_dpi_req_err_rsp_en
+ */
+union cvmx_dpi_req_err_rsp_en {
+	u64 u64;
+	struct cvmx_dpi_req_err_rsp_en_s {
+		u64 reserved_8_63 : 56;
+		u64 en : 8;
+	} s;
+	struct cvmx_dpi_req_err_rsp_en_s cn61xx;
+	struct cvmx_dpi_req_err_rsp_en_s cn63xx;
+	struct cvmx_dpi_req_err_rsp_en_s cn63xxp1;
+	struct cvmx_dpi_req_err_rsp_en_s cn66xx;
+	struct cvmx_dpi_req_err_rsp_en_s cn68xx;
+	struct cvmx_dpi_req_err_rsp_en_s cn68xxp1;
+	struct cvmx_dpi_req_err_rsp_en_s cn70xx;
+	struct cvmx_dpi_req_err_rsp_en_s cn70xxp1;
+	struct cvmx_dpi_req_err_rsp_en_s cn73xx;
+	struct cvmx_dpi_req_err_rsp_en_s cn78xx;
+	struct cvmx_dpi_req_err_rsp_en_s cn78xxp1;
+	struct cvmx_dpi_req_err_rsp_en_s cnf71xx;
+	struct cvmx_dpi_req_err_rsp_en_s cnf75xx;
+};
+
+typedef union cvmx_dpi_req_err_rsp_en cvmx_dpi_req_err_rsp_en_t;
+
+/**
+ * cvmx_dpi_req_err_rst
+ */
+union cvmx_dpi_req_err_rst {
+	u64 u64;
+	struct cvmx_dpi_req_err_rst_s {
+		u64 reserved_8_63 : 56;
+		u64 qerr : 8;
+	} s;
+	struct cvmx_dpi_req_err_rst_s cn61xx;
+	struct cvmx_dpi_req_err_rst_s cn63xx;
+	struct cvmx_dpi_req_err_rst_s cn63xxp1;
+	struct cvmx_dpi_req_err_rst_s cn66xx;
+	struct cvmx_dpi_req_err_rst_s cn68xx;
+	struct cvmx_dpi_req_err_rst_s cn68xxp1;
+	struct cvmx_dpi_req_err_rst_s cn70xx;
+	struct cvmx_dpi_req_err_rst_s cn70xxp1;
+	struct cvmx_dpi_req_err_rst_s cn73xx;
+	struct cvmx_dpi_req_err_rst_s cn78xx;
+	struct cvmx_dpi_req_err_rst_s cn78xxp1;
+	struct cvmx_dpi_req_err_rst_s cnf71xx;
+	struct cvmx_dpi_req_err_rst_s cnf75xx;
+};
+
+typedef union cvmx_dpi_req_err_rst cvmx_dpi_req_err_rst_t;
+
+/**
+ * cvmx_dpi_req_err_rst_en
+ */
+union cvmx_dpi_req_err_rst_en {
+	u64 u64;
+	struct cvmx_dpi_req_err_rst_en_s {
+		u64 reserved_8_63 : 56;
+		u64 en : 8;
+	} s;
+	struct cvmx_dpi_req_err_rst_en_s cn61xx;
+	struct cvmx_dpi_req_err_rst_en_s cn63xx;
+	struct cvmx_dpi_req_err_rst_en_s cn63xxp1;
+	struct cvmx_dpi_req_err_rst_en_s cn66xx;
+	struct cvmx_dpi_req_err_rst_en_s cn68xx;
+	struct cvmx_dpi_req_err_rst_en_s cn68xxp1;
+	struct cvmx_dpi_req_err_rst_en_s cn70xx;
+	struct cvmx_dpi_req_err_rst_en_s cn70xxp1;
+	struct cvmx_dpi_req_err_rst_en_s cn73xx;
+	struct cvmx_dpi_req_err_rst_en_s cn78xx;
+	struct cvmx_dpi_req_err_rst_en_s cn78xxp1;
+	struct cvmx_dpi_req_err_rst_en_s cnf71xx;
+	struct cvmx_dpi_req_err_rst_en_s cnf75xx;
+};
+
+typedef union cvmx_dpi_req_err_rst_en cvmx_dpi_req_err_rst_en_t;
+
+/**
+ * cvmx_dpi_req_err_skip_comp
+ */
+union cvmx_dpi_req_err_skip_comp {
+	u64 u64;
+	struct cvmx_dpi_req_err_skip_comp_s {
+		u64 reserved_24_63 : 40;
+		u64 en_rst : 8;
+		u64 reserved_8_15 : 8;
+		u64 en_rsp : 8;
+	} s;
+	struct cvmx_dpi_req_err_skip_comp_s cn61xx;
+	struct cvmx_dpi_req_err_skip_comp_s cn66xx;
+	struct cvmx_dpi_req_err_skip_comp_s cn68xx;
+	struct cvmx_dpi_req_err_skip_comp_s cn68xxp1;
+	struct cvmx_dpi_req_err_skip_comp_s cn70xx;
+	struct cvmx_dpi_req_err_skip_comp_s cn70xxp1;
+	struct cvmx_dpi_req_err_skip_comp_s cn73xx;
+	struct cvmx_dpi_req_err_skip_comp_s cn78xx;
+	struct cvmx_dpi_req_err_skip_comp_s cn78xxp1;
+	struct cvmx_dpi_req_err_skip_comp_s cnf71xx;
+	struct cvmx_dpi_req_err_skip_comp_s cnf75xx;
+};
+
+typedef union cvmx_dpi_req_err_skip_comp cvmx_dpi_req_err_skip_comp_t;
+
+/**
+ * cvmx_dpi_req_gbl_en
+ */
+union cvmx_dpi_req_gbl_en {
+	u64 u64;
+	struct cvmx_dpi_req_gbl_en_s {
+		u64 reserved_8_63 : 56;
+		u64 qen : 8;
+	} s;
+	struct cvmx_dpi_req_gbl_en_s cn61xx;
+	struct cvmx_dpi_req_gbl_en_s cn63xx;
+	struct cvmx_dpi_req_gbl_en_s cn63xxp1;
+	struct cvmx_dpi_req_gbl_en_s cn66xx;
+	struct cvmx_dpi_req_gbl_en_s cn68xx;
+	struct cvmx_dpi_req_gbl_en_s cn68xxp1;
+	struct cvmx_dpi_req_gbl_en_s cn70xx;
+	struct cvmx_dpi_req_gbl_en_s cn70xxp1;
+	struct cvmx_dpi_req_gbl_en_s cn73xx;
+	struct cvmx_dpi_req_gbl_en_s cn78xx;
+	struct cvmx_dpi_req_gbl_en_s cn78xxp1;
+	struct cvmx_dpi_req_gbl_en_s cnf71xx;
+	struct cvmx_dpi_req_gbl_en_s cnf75xx;
+};
+
+typedef union cvmx_dpi_req_gbl_en cvmx_dpi_req_gbl_en_t;
+
+/**
+ * cvmx_dpi_sli_prt#_cfg
+ *
+ * This register configures the max read request size, max payload size, and max number of SLI
+ * tags in use. Indexed by SLI_PORT_E.
+ */
+union cvmx_dpi_sli_prtx_cfg {
+	u64 u64;
+	struct cvmx_dpi_sli_prtx_cfg_s {
+		u64 reserved_29_63 : 35;
+		u64 ncbsel : 1;
+		u64 reserved_25_27 : 3;
+		u64 halt : 1;
+		u64 qlm_cfg : 4;
+		u64 reserved_17_19 : 3;
+		u64 rd_mode : 1;
+		u64 reserved_15_15 : 1;
+		u64 molr : 7;
+		u64 mps_lim : 1;
+		u64 reserved_5_6 : 2;
+		u64 mps : 1;
+		u64 mrrs_lim : 1;
+		u64 reserved_2_2 : 1;
+		u64 mrrs : 2;
+	} s;
+	struct cvmx_dpi_sli_prtx_cfg_cn61xx {
+		u64 reserved_25_63 : 39;
+		u64 halt : 1;
+		u64 qlm_cfg : 4;
+		u64 reserved_17_19 : 3;
+		u64 rd_mode : 1;
+		u64 reserved_14_15 : 2;
+		u64 molr : 6;
+		u64 mps_lim : 1;
+		u64 reserved_5_6 : 2;
+		u64 mps : 1;
+		u64 mrrs_lim : 1;
+		u64 reserved_2_2 : 1;
+		u64 mrrs : 2;
+	} cn61xx;
+	struct cvmx_dpi_sli_prtx_cfg_cn63xx {
+		u64 reserved_25_63 : 39;
+		u64 halt : 1;
+		u64 reserved_21_23 : 3;
+		u64 qlm_cfg : 1;
+		u64 reserved_17_19 : 3;
+		u64 rd_mode : 1;
+		u64 reserved_14_15 : 2;
+		u64 molr : 6;
+		u64 mps_lim : 1;
+		u64 reserved_5_6 : 2;
+		u64 mps : 1;
+		u64 mrrs_lim : 1;
+		u64 reserved_2_2 : 1;
+		u64 mrrs : 2;
+	} cn63xx;
+	struct cvmx_dpi_sli_prtx_cfg_cn63xx cn63xxp1;
+	struct cvmx_dpi_sli_prtx_cfg_cn61xx cn66xx;
+	struct cvmx_dpi_sli_prtx_cfg_cn63xx cn68xx;
+	struct cvmx_dpi_sli_prtx_cfg_cn63xx cn68xxp1;
+	struct cvmx_dpi_sli_prtx_cfg_cn70xx {
+		u64 reserved_25_63 : 39;
+		u64 halt : 1;
+		u64 reserved_17_23 : 7;
+		u64 rd_mode : 1;
+		u64 reserved_14_15 : 2;
+		u64 molr : 6;
+		u64 mps_lim : 1;
+		u64 reserved_5_6 : 2;
+		u64 mps : 1;
+		u64 mrrs_lim : 1;
+		u64 reserved_2_2 : 1;
+		u64 mrrs : 2;
+	} cn70xx;
+	struct cvmx_dpi_sli_prtx_cfg_cn70xx cn70xxp1;
+	struct cvmx_dpi_sli_prtx_cfg_cn73xx {
+		u64 reserved_29_63 : 35;
+		u64 ncbsel : 1;
+		u64 reserved_25_27 : 3;
+		u64 halt : 1;
+		u64 reserved_21_23 : 3;
+		u64 qlm_cfg : 1;
+		u64 reserved_17_19 : 3;
+		u64 rd_mode : 1;
+		u64 reserved_15_15 : 1;
+		u64 molr : 7;
+		u64 mps_lim : 1;
+		u64 reserved_5_6 : 2;
+		u64 mps : 1;
+		u64 mrrs_lim : 1;
+		u64 reserved_2_2 : 1;
+		u64 mrrs : 2;
+	} cn73xx;
+	struct cvmx_dpi_sli_prtx_cfg_cn73xx cn78xx;
+	struct cvmx_dpi_sli_prtx_cfg_cn73xx cn78xxp1;
+	struct cvmx_dpi_sli_prtx_cfg_cn61xx cnf71xx;
+	struct cvmx_dpi_sli_prtx_cfg_cn73xx cnf75xx;
+};
+
+typedef union cvmx_dpi_sli_prtx_cfg cvmx_dpi_sli_prtx_cfg_t;
+
+/**
+ * cvmx_dpi_sli_prt#_err
+ *
+ * This register logs the address associated with the reported SLI error response.
+ * Indexed by SLI_PORT_E.
+ */
+union cvmx_dpi_sli_prtx_err {
+	u64 u64;
+	struct cvmx_dpi_sli_prtx_err_s {
+		u64 addr : 61;
+		u64 reserved_0_2 : 3;
+	} s;
+	struct cvmx_dpi_sli_prtx_err_s cn61xx;
+	struct cvmx_dpi_sli_prtx_err_s cn63xx;
+	struct cvmx_dpi_sli_prtx_err_s cn63xxp1;
+	struct cvmx_dpi_sli_prtx_err_s cn66xx;
+	struct cvmx_dpi_sli_prtx_err_s cn68xx;
+	struct cvmx_dpi_sli_prtx_err_s cn68xxp1;
+	struct cvmx_dpi_sli_prtx_err_s cn70xx;
+	struct cvmx_dpi_sli_prtx_err_s cn70xxp1;
+	struct cvmx_dpi_sli_prtx_err_s cn73xx;
+	struct cvmx_dpi_sli_prtx_err_s cn78xx;
+	struct cvmx_dpi_sli_prtx_err_s cn78xxp1;
+	struct cvmx_dpi_sli_prtx_err_s cnf71xx;
+	struct cvmx_dpi_sli_prtx_err_s cnf75xx;
+};
+
+typedef union cvmx_dpi_sli_prtx_err cvmx_dpi_sli_prtx_err_t;
+
+/**
+ * cvmx_dpi_sli_prt#_err_info
+ *
+ * This register logs information associated with the reported SLI error response.
+ * Indexed by SLI_PORT_E.
+ */
+union cvmx_dpi_sli_prtx_err_info {
+	u64 u64;
+	struct cvmx_dpi_sli_prtx_err_info_s {
+		u64 reserved_9_63 : 55;
+		u64 lock : 1;
+		u64 reserved_5_7 : 3;
+		u64 type : 1;
+		u64 reserved_3_3 : 1;
+		u64 reqq : 3;
+	} s;
+	struct cvmx_dpi_sli_prtx_err_info_s cn61xx;
+	struct cvmx_dpi_sli_prtx_err_info_s cn63xx;
+	struct cvmx_dpi_sli_prtx_err_info_s cn63xxp1;
+	struct cvmx_dpi_sli_prtx_err_info_s cn66xx;
+	struct cvmx_dpi_sli_prtx_err_info_s cn68xx;
+	struct cvmx_dpi_sli_prtx_err_info_s cn68xxp1;
+	struct cvmx_dpi_sli_prtx_err_info_s cn70xx;
+	struct cvmx_dpi_sli_prtx_err_info_s cn70xxp1;
+	struct cvmx_dpi_sli_prtx_err_info_cn73xx {
+		u64 reserved_32_63 : 32;
+		u64 pvf : 16;
+		u64 reserved_9_15 : 7;
+		u64 lock : 1;
+		u64 reserved_5_7 : 3;
+		u64 type : 1;
+		u64 reserved_3_3 : 1;
+		u64 reqq : 3;
+	} cn73xx;
+	struct cvmx_dpi_sli_prtx_err_info_cn73xx cn78xx;
+	struct cvmx_dpi_sli_prtx_err_info_cn78xxp1 {
+		u64 reserved_23_63 : 41;
+		u64 vf : 7;
+		u64 reserved_9_15 : 7;
+		u64 lock : 1;
+		u64 reserved_5_7 : 3;
+		u64 type : 1;
+		u64 reserved_3_3 : 1;
+		u64 reqq : 3;
+	} cn78xxp1;
+	struct cvmx_dpi_sli_prtx_err_info_s cnf71xx;
+	struct cvmx_dpi_sli_prtx_err_info_cn73xx cnf75xx;
+};
+
+typedef union cvmx_dpi_sli_prtx_err_info cvmx_dpi_sli_prtx_err_info_t;
+
+/**
+ * cvmx_dpi_srio_rx_bell#
+ *
+ * Reading this register pops an entry off the corresponding SRIO RX doorbell FIFO.
+ * The chip supports 16 FIFOs per SRIO interface for a total of 32 FIFOs/Registers.
+ * The MSB of the registers indicates the MAC while the 4 LSBs indicate the FIFO.
+ * Information on the doorbell allocation can be found in SRIO()_RX_BELL_CTRL.
+ */
+union cvmx_dpi_srio_rx_bellx {
+	u64 u64;
+	struct cvmx_dpi_srio_rx_bellx_s {
+		u64 reserved_48_63 : 16;
+		u64 data : 16;
+		u64 sid : 16;
+		u64 count : 8;
+		u64 reserved_5_7 : 3;
+		u64 dest_id : 1;
+		u64 id16 : 1;
+		u64 reserved_2_2 : 1;
+		u64 dpriority : 2;
+	} s;
+	struct cvmx_dpi_srio_rx_bellx_s cnf75xx;
+};
+
+typedef union cvmx_dpi_srio_rx_bellx cvmx_dpi_srio_rx_bellx_t;
+
+/**
+ * cvmx_dpi_srio_rx_bell_seq#
+ *
+ * This register contains the value of the sequence counter when the doorbell
+ * was received and a shadow copy of the Bell FIFO Count that can be read without
+ * emptying the FIFO.  This register must be read prior to corresponding
+ * DPI_SRIO_RX_BELL register to link the doorbell and sequence number.
+ *
+ * Information on the Doorbell Allocation can be found in SRIO()_RX_BELL_CTRL.
+ */
+union cvmx_dpi_srio_rx_bell_seqx {
+	u64 u64;
+	struct cvmx_dpi_srio_rx_bell_seqx_s {
+		u64 reserved_40_63 : 24;
+		u64 count : 8;
+		u64 sid : 32;
+	} s;
+	struct cvmx_dpi_srio_rx_bell_seqx_s cnf75xx;
+};
+
+typedef union cvmx_dpi_srio_rx_bell_seqx cvmx_dpi_srio_rx_bell_seqx_t;
+
+/**
+ * cvmx_dpi_swa_q_vmid
+ *
+ * Not used.
+ *
+ */
+union cvmx_dpi_swa_q_vmid {
+	u64 u64;
+	struct cvmx_dpi_swa_q_vmid_s {
+		u64 vmid7 : 8;
+		u64 vmid6 : 8;
+		u64 vmid5 : 8;
+		u64 vmid4 : 8;
+		u64 vmid3 : 8;
+		u64 vmid2 : 8;
+		u64 vmid1 : 8;
+		u64 vmid0 : 8;
+	} s;
+	struct cvmx_dpi_swa_q_vmid_s cn73xx;
+	struct cvmx_dpi_swa_q_vmid_s cn78xx;
+	struct cvmx_dpi_swa_q_vmid_s cn78xxp1;
+	struct cvmx_dpi_swa_q_vmid_s cnf75xx;
+};
+
+typedef union cvmx_dpi_swa_q_vmid cvmx_dpi_swa_q_vmid_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-dtx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-dtx-defs.h
new file mode 100644
index 0000000..afb581a
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-dtx-defs.h
@@ -0,0 +1,6962 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon dtx.
+ */
+
+#ifndef __CVMX_DTX_DEFS_H__
+#define __CVMX_DTX_DEFS_H__
+
+#define CVMX_DTX_AGL_BCST_RSP	       (0x00011800FE700080ull)
+#define CVMX_DTX_AGL_CTL	       (0x00011800FE700060ull)
+#define CVMX_DTX_AGL_DATX(offset)      (0x00011800FE700040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_AGL_ENAX(offset)      (0x00011800FE700020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_AGL_SELX(offset)      (0x00011800FE700000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ASE_BCST_RSP	       (0x00011800FE6E8080ull)
+#define CVMX_DTX_ASE_CTL	       (0x00011800FE6E8060ull)
+#define CVMX_DTX_ASE_DATX(offset)      (0x00011800FE6E8040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ASE_ENAX(offset)      (0x00011800FE6E8020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ASE_SELX(offset)      (0x00011800FE6E8000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BBX1I_BCST_RSP	       (0x00011800FED78080ull)
+#define CVMX_DTX_BBX1I_CTL	       (0x00011800FED78060ull)
+#define CVMX_DTX_BBX1I_DATX(offset)    (0x00011800FED78040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BBX1I_ENAX(offset)    (0x00011800FED78020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BBX1I_SELX(offset)    (0x00011800FED78000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BBX2I_BCST_RSP	       (0x00011800FED80080ull)
+#define CVMX_DTX_BBX2I_CTL	       (0x00011800FED80060ull)
+#define CVMX_DTX_BBX2I_DATX(offset)    (0x00011800FED80040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BBX2I_ENAX(offset)    (0x00011800FED80020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BBX2I_SELX(offset)    (0x00011800FED80000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BBX3I_BCST_RSP	       (0x00011800FED88080ull)
+#define CVMX_DTX_BBX3I_CTL	       (0x00011800FED88060ull)
+#define CVMX_DTX_BBX3I_DATX(offset)    (0x00011800FED88040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BBX3I_ENAX(offset)    (0x00011800FED88020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BBX3I_SELX(offset)    (0x00011800FED88000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BCH_BCST_RSP	       (0x00011800FE388080ull)
+#define CVMX_DTX_BCH_CTL	       (0x00011800FE388060ull)
+#define CVMX_DTX_BCH_DATX(offset)      (0x00011800FE388040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BCH_ENAX(offset)      (0x00011800FE388020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BCH_SELX(offset)      (0x00011800FE388000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BGXX_BCST_RSP(offset) (0x00011800FE700080ull + ((offset) & 7) * 32768)
+#define CVMX_DTX_BGXX_CTL(offset)      (0x00011800FE700060ull + ((offset) & 7) * 32768)
+#define CVMX_DTX_BGXX_DATX(offset, block_id)                                                       \
+	(0x00011800FE700040ull + (((offset) & 1) + ((block_id) & 7) * 0x1000ull) * 8)
+#define CVMX_DTX_BGXX_ENAX(offset, block_id)                                                       \
+	(0x00011800FE700020ull + (((offset) & 1) + ((block_id) & 7) * 0x1000ull) * 8)
+#define CVMX_DTX_BGXX_SELX(offset, block_id)                                                       \
+	(0x00011800FE700000ull + (((offset) & 1) + ((block_id) & 7) * 0x1000ull) * 8)
+#define CVMX_DTX_BROADCAST_CTL		(0x00011800FE7F0060ull)
+#define CVMX_DTX_BROADCAST_ENAX(offset) (0x00011800FE7F0020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BROADCAST_SELX(offset) (0x00011800FE7F0000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BTS_BCST_RSP		(0x00011800FE5B0080ull)
+#define CVMX_DTX_BTS_CTL		(0x00011800FE5B0060ull)
+#define CVMX_DTX_BTS_DATX(offset)	(0x00011800FE5B0040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BTS_ENAX(offset)	(0x00011800FE5B0020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_BTS_SELX(offset)	(0x00011800FE5B0000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_CIU_BCST_RSP		(0x00011800FE808080ull)
+#define CVMX_DTX_CIU_CTL		(0x00011800FE808060ull)
+#define CVMX_DTX_CIU_DATX(offset)	(0x00011800FE808040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_CIU_ENAX(offset)	(0x00011800FE808020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_CIU_SELX(offset)	(0x00011800FE808000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DENC_BCST_RSP		(0x00011800FED48080ull)
+#define CVMX_DTX_DENC_CTL		(0x00011800FED48060ull)
+#define CVMX_DTX_DENC_DATX(offset)	(0x00011800FED48040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DENC_ENAX(offset)	(0x00011800FED48020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DENC_SELX(offset)	(0x00011800FED48000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DFA_BCST_RSP		(0x00011800FE1B8080ull)
+#define CVMX_DTX_DFA_CTL		(0x00011800FE1B8060ull)
+#define CVMX_DTX_DFA_DATX(offset)	(0x00011800FE1B8040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DFA_ENAX(offset)	(0x00011800FE1B8020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DFA_SELX(offset)	(0x00011800FE1B8000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DLFE_BCST_RSP		(0x00011800FED18080ull)
+#define CVMX_DTX_DLFE_CTL		(0x00011800FED18060ull)
+#define CVMX_DTX_DLFE_DATX(offset)	(0x00011800FED18040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DLFE_ENAX(offset)	(0x00011800FED18020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DLFE_SELX(offset)	(0x00011800FED18000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DPI_BCST_RSP		(0x00011800FEEF8080ull)
+#define CVMX_DTX_DPI_CTL		(0x00011800FEEF8060ull)
+#define CVMX_DTX_DPI_DATX(offset)	(0x00011800FEEF8040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DPI_ENAX(offset)	(0x00011800FEEF8020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_DPI_SELX(offset)	(0x00011800FEEF8000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_FDEQX_BCST_RSP(offset) (0x00011800FED30080ull + ((offset) & 1) * 0x20000ull)
+#define CVMX_DTX_FDEQX_CTL(offset)	(0x00011800FED30060ull + ((offset) & 1) * 0x20000ull)
+#define CVMX_DTX_FDEQX_DATX(offset, block_id)                                                      \
+	(0x00011800FED30040ull + (((offset) & 1) + ((block_id) & 1) * 0x4000ull) * 8)
+#define CVMX_DTX_FDEQX_ENAX(offset, block_id)                                                      \
+	(0x00011800FED30020ull + (((offset) & 1) + ((block_id) & 1) * 0x4000ull) * 8)
+#define CVMX_DTX_FDEQX_SELX(offset, block_id)                                                      \
+	(0x00011800FED30000ull + (((offset) & 1) + ((block_id) & 1) * 0x4000ull) * 8)
+#define CVMX_DTX_FPA_BCST_RSP CVMX_DTX_FPA_BCST_RSP_FUNC()
+static inline u64 CVMX_DTX_FPA_BCST_RSP_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FE940080ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FE940080ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE940080ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE140080ull;
+	}
+	return 0x00011800FE940080ull;
+}
+
+#define CVMX_DTX_FPA_CTL CVMX_DTX_FPA_CTL_FUNC()
+static inline u64 CVMX_DTX_FPA_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FE940060ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FE940060ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE940060ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE140060ull;
+	}
+	return 0x00011800FE940060ull;
+}
+
+static inline u64 CVMX_DTX_FPA_DATX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FE940040ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FE940040ull + (offset) * 8;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE940040ull + (offset) * 8;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE140040ull + (offset) * 8;
+	}
+	return 0x00011800FE940040ull + (offset) * 8;
+}
+
+static inline u64 CVMX_DTX_FPA_ENAX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FE940020ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FE940020ull + (offset) * 8;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE940020ull + (offset) * 8;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE140020ull + (offset) * 8;
+	}
+	return 0x00011800FE940020ull + (offset) * 8;
+}
+
+static inline u64 CVMX_DTX_FPA_SELX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FE940000ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FE940000ull + (offset) * 8;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE940000ull + (offset) * 8;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE140000ull + (offset) * 8;
+	}
+	return 0x00011800FE940000ull + (offset) * 8;
+}
+
+#define CVMX_DTX_GMXX_BCST_RSP(offset) (0x00011800FE040080ull + ((offset) & 1) * 0x40000ull)
+#define CVMX_DTX_GMXX_CTL(offset)      (0x00011800FE040060ull + ((offset) & 1) * 0x40000ull)
+#define CVMX_DTX_GMXX_DATX(offset, block_id)                                                       \
+	(0x00011800FE040040ull + (((offset) & 1) + ((block_id) & 1) * 0x8000ull) * 8)
+#define CVMX_DTX_GMXX_ENAX(offset, block_id)                                                       \
+	(0x00011800FE040020ull + (((offset) & 1) + ((block_id) & 1) * 0x8000ull) * 8)
+#define CVMX_DTX_GMXX_SELX(offset, block_id)                                                       \
+	(0x00011800FE040000ull + (((offset) & 1) + ((block_id) & 1) * 0x8000ull) * 8)
+#define CVMX_DTX_GSERX_BCST_RSP(offset) (0x00011800FE480080ull + ((offset) & 15) * 32768)
+#define CVMX_DTX_GSERX_CTL(offset)	(0x00011800FE480060ull + ((offset) & 15) * 32768)
+#define CVMX_DTX_GSERX_DATX(offset, block_id)                                                      \
+	(0x00011800FE480040ull + (((offset) & 1) + ((block_id) & 15) * 0x1000ull) * 8)
+#define CVMX_DTX_GSERX_ENAX(offset, block_id)                                                      \
+	(0x00011800FE480020ull + (((offset) & 1) + ((block_id) & 15) * 0x1000ull) * 8)
+#define CVMX_DTX_GSERX_SELX(offset, block_id)                                                      \
+	(0x00011800FE480000ull + (((offset) & 1) + ((block_id) & 15) * 0x1000ull) * 8)
+#define CVMX_DTX_HNA_BCST_RSP		   (0x00011800FE238080ull)
+#define CVMX_DTX_HNA_CTL		   (0x00011800FE238060ull)
+#define CVMX_DTX_HNA_DATX(offset)	   (0x00011800FE238040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_HNA_ENAX(offset)	   (0x00011800FE238020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_HNA_SELX(offset)	   (0x00011800FE238000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ILA_BCST_RSP		   (0x00011800FE0B8080ull)
+#define CVMX_DTX_ILA_CTL		   (0x00011800FE0B8060ull)
+#define CVMX_DTX_ILA_DATX(offset)	   (0x00011800FE0B8040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ILA_ENAX(offset)	   (0x00011800FE0B8020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ILA_SELX(offset)	   (0x00011800FE0B8000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ILK_BCST_RSP		   (0x00011800FE0A0080ull)
+#define CVMX_DTX_ILK_CTL		   (0x00011800FE0A0060ull)
+#define CVMX_DTX_ILK_DATX(offset)	   (0x00011800FE0A0040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ILK_ENAX(offset)	   (0x00011800FE0A0020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ILK_SELX(offset)	   (0x00011800FE0A0000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IOBN_BCST_RSP		   (0x00011800FE780080ull)
+#define CVMX_DTX_IOBN_CTL		   (0x00011800FE780060ull)
+#define CVMX_DTX_IOBN_DATX(offset)	   (0x00011800FE780040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IOBN_ENAX(offset)	   (0x00011800FE780020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IOBN_SELX(offset)	   (0x00011800FE780000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IOBP_BCST_RSP		   (0x00011800FE7A0080ull)
+#define CVMX_DTX_IOBP_CTL		   (0x00011800FE7A0060ull)
+#define CVMX_DTX_IOBP_DATX(offset)	   (0x00011800FE7A0040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IOBP_ENAX(offset)	   (0x00011800FE7A0020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IOBP_SELX(offset)	   (0x00011800FE7A0000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IOB_BCST_RSP		   (0x00011800FE780080ull)
+#define CVMX_DTX_IOB_CTL		   (0x00011800FE780060ull)
+#define CVMX_DTX_IOB_DATX(offset)	   (0x00011800FE780040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IOB_ENAX(offset)	   (0x00011800FE780020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IOB_SELX(offset)	   (0x00011800FE780000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IPD_BCST_RSP		   (0x00011800FE278080ull)
+#define CVMX_DTX_IPD_CTL		   (0x00011800FE278060ull)
+#define CVMX_DTX_IPD_DATX(offset)	   (0x00011800FE278040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IPD_ENAX(offset)	   (0x00011800FE278020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_IPD_SELX(offset)	   (0x00011800FE278000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_KEY_BCST_RSP		   (0x00011800FE100080ull)
+#define CVMX_DTX_KEY_CTL		   (0x00011800FE100060ull)
+#define CVMX_DTX_KEY_DATX(offset)	   (0x00011800FE100040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_KEY_ENAX(offset)	   (0x00011800FE100020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_KEY_SELX(offset)	   (0x00011800FE100000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_L2C_CBCX_BCST_RSP(offset) (0x00011800FE420080ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_L2C_CBCX_CTL(offset)	   (0x00011800FE420060ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_L2C_CBCX_DATX(offset, block_id)                                                   \
+	(0x00011800FE420040ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_L2C_CBCX_ENAX(offset, block_id)                                                   \
+	(0x00011800FE420020ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_L2C_CBCX_SELX(offset, block_id)                                                   \
+	(0x00011800FE420000ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_L2C_MCIX_BCST_RSP(offset) (0x00011800FE2E0080ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_L2C_MCIX_CTL(offset)	   (0x00011800FE2E0060ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_L2C_MCIX_DATX(offset, block_id)                                                   \
+	(0x00011800FE2E0040ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_L2C_MCIX_ENAX(offset, block_id)                                                   \
+	(0x00011800FE2E0020ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_L2C_MCIX_SELX(offset, block_id)                                                   \
+	(0x00011800FE2E0000ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_L2C_TADX_BCST_RSP(offset) (0x00011800FE240080ull + ((offset) & 7) * 32768)
+#define CVMX_DTX_L2C_TADX_CTL(offset)	   (0x00011800FE240060ull + ((offset) & 7) * 32768)
+#define CVMX_DTX_L2C_TADX_DATX(offset, block_id)                                                   \
+	(0x00011800FE240040ull + (((offset) & 1) + ((block_id) & 7) * 0x1000ull) * 8)
+#define CVMX_DTX_L2C_TADX_ENAX(offset, block_id)                                                   \
+	(0x00011800FE240020ull + (((offset) & 1) + ((block_id) & 7) * 0x1000ull) * 8)
+#define CVMX_DTX_L2C_TADX_SELX(offset, block_id)                                                   \
+	(0x00011800FE240000ull + (((offset) & 1) + ((block_id) & 7) * 0x1000ull) * 8)
+#define CVMX_DTX_LAPX_BCST_RSP(offset) (0x00011800FE060080ull + ((offset) & 1) * 32768)
+#define CVMX_DTX_LAPX_CTL(offset)      (0x00011800FE060060ull + ((offset) & 1) * 32768)
+#define CVMX_DTX_LAPX_DATX(offset, block_id)                                                       \
+	(0x00011800FE060040ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_LAPX_ENAX(offset, block_id)                                                       \
+	(0x00011800FE060020ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_LAPX_SELX(offset, block_id)                                                       \
+	(0x00011800FE060000ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_LBK_BCST_RSP	       (0x00011800FE090080ull)
+#define CVMX_DTX_LBK_CTL	       (0x00011800FE090060ull)
+#define CVMX_DTX_LBK_DATX(offset)      (0x00011800FE090040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_LBK_ENAX(offset)      (0x00011800FE090020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_LBK_SELX(offset)      (0x00011800FE090000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_LMCX_BCST_RSP(offset) (0x00011800FE440080ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_LMCX_CTL(offset)      (0x00011800FE440060ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_LMCX_DATX(offset, block_id)                                                       \
+	(0x00011800FE440040ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_LMCX_ENAX(offset, block_id)                                                       \
+	(0x00011800FE440020ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_LMCX_SELX(offset, block_id)                                                       \
+	(0x00011800FE440000ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_MDBX_BCST_RSP(offset) (0x00011800FEC00080ull + ((offset) & 31) * 32768)
+#define CVMX_DTX_MDBX_CTL(offset)      (0x00011800FEC00060ull + ((offset) & 31) * 32768)
+#define CVMX_DTX_MDBX_DATX(offset, block_id)                                                       \
+	(0x00011800FEC00040ull + (((offset) & 1) + ((block_id) & 31) * 0x1000ull) * 8)
+#define CVMX_DTX_MDBX_ENAX(offset, block_id)                                                       \
+	(0x00011800FEC00020ull + (((offset) & 1) + ((block_id) & 31) * 0x1000ull) * 8)
+#define CVMX_DTX_MDBX_SELX(offset, block_id)                                                       \
+	(0x00011800FEC00000ull + (((offset) & 1) + ((block_id) & 31) * 0x1000ull) * 8)
+#define CVMX_DTX_MHBW_BCST_RSP		   (0x00011800FE598080ull)
+#define CVMX_DTX_MHBW_CTL		   (0x00011800FE598060ull)
+#define CVMX_DTX_MHBW_DATX(offset)	   (0x00011800FE598040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_MHBW_ENAX(offset)	   (0x00011800FE598020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_MHBW_SELX(offset)	   (0x00011800FE598000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_MIO_BCST_RSP		   (0x00011800FE000080ull)
+#define CVMX_DTX_MIO_CTL		   (0x00011800FE000060ull)
+#define CVMX_DTX_MIO_DATX(offset)	   (0x00011800FE000040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_MIO_ENAX(offset)	   (0x00011800FE000020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_MIO_SELX(offset)	   (0x00011800FE000000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_OCX_BOT_BCST_RSP	   (0x00011800FE198080ull)
+#define CVMX_DTX_OCX_BOT_CTL		   (0x00011800FE198060ull)
+#define CVMX_DTX_OCX_BOT_DATX(offset)	   (0x00011800FE198040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_OCX_BOT_ENAX(offset)	   (0x00011800FE198020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_OCX_BOT_SELX(offset)	   (0x00011800FE198000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_OCX_LNKX_BCST_RSP(offset) (0x00011800FE180080ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_OCX_LNKX_CTL(offset)	   (0x00011800FE180060ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_OCX_LNKX_DATX(offset, block_id)                                                   \
+	(0x00011800FE180040ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_OCX_LNKX_ENAX(offset, block_id)                                                   \
+	(0x00011800FE180020ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_OCX_LNKX_SELX(offset, block_id)                                                   \
+	(0x00011800FE180000ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_OCX_OLEX_BCST_RSP(offset) (0x00011800FE1A0080ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_OCX_OLEX_CTL(offset)	   (0x00011800FE1A0060ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_OCX_OLEX_DATX(offset, block_id)                                                   \
+	(0x00011800FE1A0040ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_OCX_OLEX_ENAX(offset, block_id)                                                   \
+	(0x00011800FE1A0020ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_OCX_OLEX_SELX(offset, block_id)                                                   \
+	(0x00011800FE1A0000ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_OCX_TOP_BCST_RSP     (0x00011800FE088080ull)
+#define CVMX_DTX_OCX_TOP_CTL	      (0x00011800FE088060ull)
+#define CVMX_DTX_OCX_TOP_DATX(offset) (0x00011800FE088040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_OCX_TOP_ENAX(offset) (0x00011800FE088020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_OCX_TOP_SELX(offset) (0x00011800FE088000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_OSM_BCST_RSP	      CVMX_DTX_OSM_BCST_RSP_FUNC()
+static inline u64 CVMX_DTX_OSM_BCST_RSP_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FE6E0080ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FE6E0080ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FEEE0080ull;
+	}
+	return 0x00011800FE6E0080ull;
+}
+
+#define CVMX_DTX_OSM_CTL CVMX_DTX_OSM_CTL_FUNC()
+static inline u64 CVMX_DTX_OSM_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FE6E0060ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FE6E0060ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FEEE0060ull;
+	}
+	return 0x00011800FE6E0060ull;
+}
+
+static inline u64 CVMX_DTX_OSM_DATX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FE6E0040ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FE6E0040ull + (offset) * 8;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FEEE0040ull + (offset) * 8;
+	}
+	return 0x00011800FE6E0040ull + (offset) * 8;
+}
+
+static inline u64 CVMX_DTX_OSM_ENAX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FE6E0020ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FE6E0020ull + (offset) * 8;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FEEE0020ull + (offset) * 8;
+	}
+	return 0x00011800FE6E0020ull + (offset) * 8;
+}
+
+static inline u64 CVMX_DTX_OSM_SELX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FE6E0000ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FE6E0000ull + (offset) * 8;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FEEE0000ull + (offset) * 8;
+	}
+	return 0x00011800FE6E0000ull + (offset) * 8;
+}
+
+#define CVMX_DTX_PCSX_BCST_RSP(offset) (0x00011800FE580080ull + ((offset) & 1) * 0x40000ull)
+#define CVMX_DTX_PCSX_CTL(offset)      (0x00011800FE580060ull + ((offset) & 1) * 0x40000ull)
+#define CVMX_DTX_PCSX_DATX(offset, block_id)                                                       \
+	(0x00011800FE580040ull + (((offset) & 1) + ((block_id) & 1) * 0x8000ull) * 8)
+#define CVMX_DTX_PCSX_ENAX(offset, block_id)                                                       \
+	(0x00011800FE580020ull + (((offset) & 1) + ((block_id) & 1) * 0x8000ull) * 8)
+#define CVMX_DTX_PCSX_SELX(offset, block_id)                                                       \
+	(0x00011800FE580000ull + (((offset) & 1) + ((block_id) & 1) * 0x8000ull) * 8)
+#define CVMX_DTX_PEMX_BCST_RSP(offset) (0x00011800FE600080ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_PEMX_CTL(offset)      (0x00011800FE600060ull + ((offset) & 3) * 32768)
+#define CVMX_DTX_PEMX_DATX(offset, block_id)                                                       \
+	(0x00011800FE600040ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_PEMX_ENAX(offset, block_id)                                                       \
+	(0x00011800FE600020ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_PEMX_SELX(offset, block_id)                                                       \
+	(0x00011800FE600000ull + (((offset) & 1) + ((block_id) & 3) * 0x1000ull) * 8)
+#define CVMX_DTX_PIP_BCST_RSP	      (0x00011800FE500080ull)
+#define CVMX_DTX_PIP_CTL	      (0x00011800FE500060ull)
+#define CVMX_DTX_PIP_DATX(offset)     (0x00011800FE500040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PIP_ENAX(offset)     (0x00011800FE500020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PIP_SELX(offset)     (0x00011800FE500000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PKI_PBE_BCST_RSP     (0x00011800FE228080ull)
+#define CVMX_DTX_PKI_PBE_CTL	      (0x00011800FE228060ull)
+#define CVMX_DTX_PKI_PBE_DATX(offset) (0x00011800FE228040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PKI_PBE_ENAX(offset) (0x00011800FE228020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PKI_PBE_SELX(offset) (0x00011800FE228000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PKI_PFE_BCST_RSP     (0x00011800FE220080ull)
+#define CVMX_DTX_PKI_PFE_CTL	      (0x00011800FE220060ull)
+#define CVMX_DTX_PKI_PFE_DATX(offset) (0x00011800FE220040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PKI_PFE_ENAX(offset) (0x00011800FE220020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PKI_PFE_SELX(offset) (0x00011800FE220000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PKI_PIX_BCST_RSP     (0x00011800FE230080ull)
+#define CVMX_DTX_PKI_PIX_CTL	      (0x00011800FE230060ull)
+#define CVMX_DTX_PKI_PIX_DATX(offset) (0x00011800FE230040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PKI_PIX_ENAX(offset) (0x00011800FE230020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PKI_PIX_SELX(offset) (0x00011800FE230000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PKO_BCST_RSP	      CVMX_DTX_PKO_BCST_RSP_FUNC()
+static inline u64 CVMX_DTX_PKO_BCST_RSP_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FEAA0080ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FEAA0080ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FEAA0080ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE280080ull;
+	}
+	return 0x00011800FEAA0080ull;
+}
+
+#define CVMX_DTX_PKO_CTL CVMX_DTX_PKO_CTL_FUNC()
+static inline u64 CVMX_DTX_PKO_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FEAA0060ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FEAA0060ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FEAA0060ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE280060ull;
+	}
+	return 0x00011800FEAA0060ull;
+}
+
+static inline u64 CVMX_DTX_PKO_DATX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FEAA0040ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FEAA0040ull + (offset) * 8;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FEAA0040ull + (offset) * 8;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE280040ull + (offset) * 8;
+	}
+	return 0x00011800FEAA0040ull + (offset) * 8;
+}
+
+static inline u64 CVMX_DTX_PKO_ENAX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FEAA0020ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FEAA0020ull + (offset) * 8;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FEAA0020ull + (offset) * 8;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE280020ull + (offset) * 8;
+	}
+	return 0x00011800FEAA0020ull + (offset) * 8;
+}
+
+static inline u64 CVMX_DTX_PKO_SELX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800FEAA0000ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800FEAA0000ull + (offset) * 8;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FEAA0000ull + (offset) * 8;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800FE280000ull + (offset) * 8;
+	}
+	return 0x00011800FEAA0000ull + (offset) * 8;
+}
+
+#define CVMX_DTX_PNBDX_BCST_RSP(offset) (0x00011800FED90080ull + ((offset) & 1) * 32768)
+#define CVMX_DTX_PNBDX_CTL(offset)	(0x00011800FED90060ull + ((offset) & 1) * 32768)
+#define CVMX_DTX_PNBDX_DATX(offset, block_id)                                                      \
+	(0x00011800FED90040ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_PNBDX_ENAX(offset, block_id)                                                      \
+	(0x00011800FED90020ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_PNBDX_SELX(offset, block_id)                                                      \
+	(0x00011800FED90000ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_PNBX_BCST_RSP(offset) (0x00011800FE580080ull + ((offset) & 1) * 32768)
+#define CVMX_DTX_PNBX_CTL(offset)      (0x00011800FE580060ull + ((offset) & 1) * 32768)
+#define CVMX_DTX_PNBX_DATX(offset, block_id)                                                       \
+	(0x00011800FE580040ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_PNBX_ENAX(offset, block_id)                                                       \
+	(0x00011800FE580020ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_PNBX_SELX(offset, block_id)                                                       \
+	(0x00011800FE580000ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_POW_BCST_RSP		(0x00011800FE338080ull)
+#define CVMX_DTX_POW_CTL		(0x00011800FE338060ull)
+#define CVMX_DTX_POW_DATX(offset)	(0x00011800FE338040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_POW_ENAX(offset)	(0x00011800FE338020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_POW_SELX(offset)	(0x00011800FE338000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PRCH_BCST_RSP		(0x00011800FED00080ull)
+#define CVMX_DTX_PRCH_CTL		(0x00011800FED00060ull)
+#define CVMX_DTX_PRCH_DATX(offset)	(0x00011800FED00040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PRCH_ENAX(offset)	(0x00011800FED00020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PRCH_SELX(offset)	(0x00011800FED00000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PSM_BCST_RSP		(0x00011800FEEA0080ull)
+#define CVMX_DTX_PSM_CTL		(0x00011800FEEA0060ull)
+#define CVMX_DTX_PSM_DATX(offset)	(0x00011800FEEA0040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PSM_ENAX(offset)	(0x00011800FEEA0020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_PSM_SELX(offset)	(0x00011800FEEA0000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RAD_BCST_RSP		(0x00011800FE380080ull)
+#define CVMX_DTX_RAD_CTL		(0x00011800FE380060ull)
+#define CVMX_DTX_RAD_DATX(offset)	(0x00011800FE380040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RAD_ENAX(offset)	(0x00011800FE380020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RAD_SELX(offset)	(0x00011800FE380000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RDEC_BCST_RSP		(0x00011800FED68080ull)
+#define CVMX_DTX_RDEC_CTL		(0x00011800FED68060ull)
+#define CVMX_DTX_RDEC_DATX(offset)	(0x00011800FED68040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RDEC_ENAX(offset)	(0x00011800FED68020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RDEC_SELX(offset)	(0x00011800FED68000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RFIF_BCST_RSP		(0x00011800FE6A8080ull)
+#define CVMX_DTX_RFIF_CTL		(0x00011800FE6A8060ull)
+#define CVMX_DTX_RFIF_DATX(offset)	(0x00011800FE6A8040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RFIF_ENAX(offset)	(0x00011800FE6A8020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RFIF_SELX(offset)	(0x00011800FE6A8000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RMAP_BCST_RSP		(0x00011800FED40080ull)
+#define CVMX_DTX_RMAP_CTL		(0x00011800FED40060ull)
+#define CVMX_DTX_RMAP_DATX(offset)	(0x00011800FED40040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RMAP_ENAX(offset)	(0x00011800FED40020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RMAP_SELX(offset)	(0x00011800FED40000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RNM_BCST_RSP		(0x00011800FE200080ull)
+#define CVMX_DTX_RNM_CTL		(0x00011800FE200060ull)
+#define CVMX_DTX_RNM_DATX(offset)	(0x00011800FE200040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RNM_ENAX(offset)	(0x00011800FE200020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RNM_SELX(offset)	(0x00011800FE200000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RST_BCST_RSP		(0x00011800FE030080ull)
+#define CVMX_DTX_RST_CTL		(0x00011800FE030060ull)
+#define CVMX_DTX_RST_DATX(offset)	(0x00011800FE030040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RST_ENAX(offset)	(0x00011800FE030020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_RST_SELX(offset)	(0x00011800FE030000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SATA_BCST_RSP		(0x00011800FE360080ull)
+#define CVMX_DTX_SATA_CTL		(0x00011800FE360060ull)
+#define CVMX_DTX_SATA_DATX(offset)	(0x00011800FE360040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SATA_ENAX(offset)	(0x00011800FE360020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SATA_SELX(offset)	(0x00011800FE360000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SLI_BCST_RSP		(0x00011800FE8F8080ull)
+#define CVMX_DTX_SLI_CTL		(0x00011800FE8F8060ull)
+#define CVMX_DTX_SLI_DATX(offset)	(0x00011800FE8F8040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SLI_ENAX(offset)	(0x00011800FE8F8020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SLI_SELX(offset)	(0x00011800FE8F8000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SPEM_BCST_RSP		(0x00011800FE600080ull)
+#define CVMX_DTX_SPEM_CTL		(0x00011800FE600060ull)
+#define CVMX_DTX_SPEM_DATX(offset)	(0x00011800FE600040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SPEM_ENAX(offset)	(0x00011800FE600020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SPEM_SELX(offset)	(0x00011800FE600000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SRIOX_BCST_RSP(offset) (0x00011800FE640080ull + ((offset) & 1) * 32768)
+#define CVMX_DTX_SRIOX_CTL(offset)	(0x00011800FE640060ull + ((offset) & 1) * 32768)
+#define CVMX_DTX_SRIOX_DATX(offset, block_id)                                                      \
+	(0x00011800FE640040ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_SRIOX_ENAX(offset, block_id)                                                      \
+	(0x00011800FE640020ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_SRIOX_SELX(offset, block_id)                                                      \
+	(0x00011800FE640000ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_SSO_BCST_RSP		  (0x00011800FEB38080ull)
+#define CVMX_DTX_SSO_CTL		  (0x00011800FEB38060ull)
+#define CVMX_DTX_SSO_DATX(offset)	  (0x00011800FEB38040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SSO_ENAX(offset)	  (0x00011800FEB38020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_SSO_SELX(offset)	  (0x00011800FEB38000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_TDEC_BCST_RSP		  (0x00011800FED60080ull)
+#define CVMX_DTX_TDEC_CTL		  (0x00011800FED60060ull)
+#define CVMX_DTX_TDEC_DATX(offset)	  (0x00011800FED60040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_TDEC_ENAX(offset)	  (0x00011800FED60020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_TDEC_SELX(offset)	  (0x00011800FED60000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_TIM_BCST_RSP		  (0x00011800FE2C0080ull)
+#define CVMX_DTX_TIM_CTL		  (0x00011800FE2C0060ull)
+#define CVMX_DTX_TIM_DATX(offset)	  (0x00011800FE2C0040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_TIM_ENAX(offset)	  (0x00011800FE2C0020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_TIM_SELX(offset)	  (0x00011800FE2C0000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ULFE_BCST_RSP		  (0x00011800FED08080ull)
+#define CVMX_DTX_ULFE_CTL		  (0x00011800FED08060ull)
+#define CVMX_DTX_ULFE_DATX(offset)	  (0x00011800FED08040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ULFE_ENAX(offset)	  (0x00011800FED08020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ULFE_SELX(offset)	  (0x00011800FED08000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_USBDRDX_BCST_RSP(offset) (0x00011800FE340080ull + ((offset) & 1) * 32768)
+#define CVMX_DTX_USBDRDX_CTL(offset)	  (0x00011800FE340060ull + ((offset) & 1) * 32768)
+#define CVMX_DTX_USBDRDX_DATX(offset, block_id)                                                    \
+	(0x00011800FE340040ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_USBDRDX_ENAX(offset, block_id)                                                    \
+	(0x00011800FE340020ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_USBDRDX_SELX(offset, block_id)                                                    \
+	(0x00011800FE340000ull + (((offset) & 1) + ((block_id) & 1) * 0x1000ull) * 8)
+#define CVMX_DTX_USBHX_BCST_RSP(offset) (0x00011800FE340080ull)
+#define CVMX_DTX_USBHX_CTL(offset)	(0x00011800FE340060ull)
+#define CVMX_DTX_USBHX_DATX(offset, block_id)                                                      \
+	(0x00011800FE340040ull + (((offset) & 1) + ((block_id) & 0) * 0x0ull) * 8)
+#define CVMX_DTX_USBHX_ENAX(offset, block_id)                                                      \
+	(0x00011800FE340020ull + (((offset) & 1) + ((block_id) & 0) * 0x0ull) * 8)
+#define CVMX_DTX_USBHX_SELX(offset, block_id)                                                      \
+	(0x00011800FE340000ull + (((offset) & 1) + ((block_id) & 0) * 0x0ull) * 8)
+#define CVMX_DTX_VDEC_BCST_RSP	   (0x00011800FED70080ull)
+#define CVMX_DTX_VDEC_CTL	   (0x00011800FED70060ull)
+#define CVMX_DTX_VDEC_DATX(offset) (0x00011800FED70040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_VDEC_ENAX(offset) (0x00011800FED70020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_VDEC_SELX(offset) (0x00011800FED70000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WPSE_BCST_RSP	   (0x00011800FED10080ull)
+#define CVMX_DTX_WPSE_CTL	   (0x00011800FED10060ull)
+#define CVMX_DTX_WPSE_DATX(offset) (0x00011800FED10040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WPSE_ENAX(offset) (0x00011800FED10020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WPSE_SELX(offset) (0x00011800FED10000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WRCE_BCST_RSP	   (0x00011800FED38080ull)
+#define CVMX_DTX_WRCE_CTL	   (0x00011800FED38060ull)
+#define CVMX_DTX_WRCE_DATX(offset) (0x00011800FED38040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WRCE_ENAX(offset) (0x00011800FED38020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WRCE_SELX(offset) (0x00011800FED38000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WRDE_BCST_RSP	   (0x00011800FED58080ull)
+#define CVMX_DTX_WRDE_CTL	   (0x00011800FED58060ull)
+#define CVMX_DTX_WRDE_DATX(offset) (0x00011800FED58040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WRDE_ENAX(offset) (0x00011800FED58020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WRDE_SELX(offset) (0x00011800FED58000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WRSE_BCST_RSP	   (0x00011800FED28080ull)
+#define CVMX_DTX_WRSE_CTL	   (0x00011800FED28060ull)
+#define CVMX_DTX_WRSE_DATX(offset) (0x00011800FED28040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WRSE_ENAX(offset) (0x00011800FED28020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WRSE_SELX(offset) (0x00011800FED28000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WTXE_BCST_RSP	   (0x00011800FED20080ull)
+#define CVMX_DTX_WTXE_CTL	   (0x00011800FED20060ull)
+#define CVMX_DTX_WTXE_DATX(offset) (0x00011800FED20040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WTXE_ENAX(offset) (0x00011800FED20020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_WTXE_SELX(offset) (0x00011800FED20000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_XCV_BCST_RSP	   (0x00011800FE6D8080ull)
+#define CVMX_DTX_XCV_CTL	   (0x00011800FE6D8060ull)
+#define CVMX_DTX_XCV_DATX(offset)  (0x00011800FE6D8040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_XCV_ENAX(offset)  (0x00011800FE6D8020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_XCV_SELX(offset)  (0x00011800FE6D8000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_XSX_BCST_RSP	   (0x00011800FE5A8080ull)
+#define CVMX_DTX_XSX_CTL	   (0x00011800FE5A8060ull)
+#define CVMX_DTX_XSX_DATX(offset)  (0x00011800FE5A8040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_XSX_ENAX(offset)  (0x00011800FE5A8020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_XSX_SELX(offset)  (0x00011800FE5A8000ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ZIP_BCST_RSP	   (0x00011800FE1C0080ull)
+#define CVMX_DTX_ZIP_CTL	   (0x00011800FE1C0060ull)
+#define CVMX_DTX_ZIP_DATX(offset)  (0x00011800FE1C0040ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ZIP_ENAX(offset)  (0x00011800FE1C0020ull + ((offset) & 1) * 8)
+#define CVMX_DTX_ZIP_SELX(offset)  (0x00011800FE1C0000ull + ((offset) & 1) * 8)
+
+/**
+ * cvmx_dtx_agl_bcst_rsp
+ */
+union cvmx_dtx_agl_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_agl_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_agl_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_agl_bcst_rsp_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_agl_bcst_rsp cvmx_dtx_agl_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_agl_ctl
+ */
+union cvmx_dtx_agl_ctl {
+	u64 u64;
+	struct cvmx_dtx_agl_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_agl_ctl_s cn70xx;
+	struct cvmx_dtx_agl_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_agl_ctl cvmx_dtx_agl_ctl_t;
+
+/**
+ * cvmx_dtx_agl_dat#
+ */
+union cvmx_dtx_agl_datx {
+	u64 u64;
+	struct cvmx_dtx_agl_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_agl_datx_s cn70xx;
+	struct cvmx_dtx_agl_datx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_agl_datx cvmx_dtx_agl_datx_t;
+
+/**
+ * cvmx_dtx_agl_ena#
+ */
+union cvmx_dtx_agl_enax {
+	u64 u64;
+	struct cvmx_dtx_agl_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_agl_enax_s cn70xx;
+	struct cvmx_dtx_agl_enax_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_agl_enax cvmx_dtx_agl_enax_t;
+
+/**
+ * cvmx_dtx_agl_sel#
+ */
+union cvmx_dtx_agl_selx {
+	u64 u64;
+	struct cvmx_dtx_agl_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_agl_selx_s cn70xx;
+	struct cvmx_dtx_agl_selx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_agl_selx cvmx_dtx_agl_selx_t;
+
+/**
+ * cvmx_dtx_ase_bcst_rsp
+ */
+union cvmx_dtx_ase_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_ase_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_ase_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_ase_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ase_bcst_rsp cvmx_dtx_ase_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_ase_ctl
+ */
+union cvmx_dtx_ase_ctl {
+	u64 u64;
+	struct cvmx_dtx_ase_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_ase_ctl_s cn78xx;
+	struct cvmx_dtx_ase_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ase_ctl cvmx_dtx_ase_ctl_t;
+
+/**
+ * cvmx_dtx_ase_dat#
+ */
+union cvmx_dtx_ase_datx {
+	u64 u64;
+	struct cvmx_dtx_ase_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_ase_datx_s cn78xx;
+	struct cvmx_dtx_ase_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ase_datx cvmx_dtx_ase_datx_t;
+
+/**
+ * cvmx_dtx_ase_ena#
+ */
+union cvmx_dtx_ase_enax {
+	u64 u64;
+	struct cvmx_dtx_ase_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_ase_enax_s cn78xx;
+	struct cvmx_dtx_ase_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ase_enax cvmx_dtx_ase_enax_t;
+
+/**
+ * cvmx_dtx_ase_sel#
+ */
+union cvmx_dtx_ase_selx {
+	u64 u64;
+	struct cvmx_dtx_ase_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_ase_selx_s cn78xx;
+	struct cvmx_dtx_ase_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ase_selx cvmx_dtx_ase_selx_t;
+
+/**
+ * cvmx_dtx_bbx1i_bcst_rsp
+ */
+union cvmx_dtx_bbx1i_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_bbx1i_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_bbx1i_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx1i_bcst_rsp cvmx_dtx_bbx1i_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_bbx1i_ctl
+ */
+union cvmx_dtx_bbx1i_ctl {
+	u64 u64;
+	struct cvmx_dtx_bbx1i_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_bbx1i_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx1i_ctl cvmx_dtx_bbx1i_ctl_t;
+
+/**
+ * cvmx_dtx_bbx1i_dat#
+ */
+union cvmx_dtx_bbx1i_datx {
+	u64 u64;
+	struct cvmx_dtx_bbx1i_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_bbx1i_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx1i_datx cvmx_dtx_bbx1i_datx_t;
+
+/**
+ * cvmx_dtx_bbx1i_ena#
+ */
+union cvmx_dtx_bbx1i_enax {
+	u64 u64;
+	struct cvmx_dtx_bbx1i_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_bbx1i_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx1i_enax cvmx_dtx_bbx1i_enax_t;
+
+/**
+ * cvmx_dtx_bbx1i_sel#
+ */
+union cvmx_dtx_bbx1i_selx {
+	u64 u64;
+	struct cvmx_dtx_bbx1i_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_bbx1i_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx1i_selx cvmx_dtx_bbx1i_selx_t;
+
+/**
+ * cvmx_dtx_bbx2i_bcst_rsp
+ */
+union cvmx_dtx_bbx2i_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_bbx2i_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_bbx2i_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx2i_bcst_rsp cvmx_dtx_bbx2i_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_bbx2i_ctl
+ */
+union cvmx_dtx_bbx2i_ctl {
+	u64 u64;
+	struct cvmx_dtx_bbx2i_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_bbx2i_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx2i_ctl cvmx_dtx_bbx2i_ctl_t;
+
+/**
+ * cvmx_dtx_bbx2i_dat#
+ */
+union cvmx_dtx_bbx2i_datx {
+	u64 u64;
+	struct cvmx_dtx_bbx2i_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_bbx2i_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx2i_datx cvmx_dtx_bbx2i_datx_t;
+
+/**
+ * cvmx_dtx_bbx2i_ena#
+ */
+union cvmx_dtx_bbx2i_enax {
+	u64 u64;
+	struct cvmx_dtx_bbx2i_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_bbx2i_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx2i_enax cvmx_dtx_bbx2i_enax_t;
+
+/**
+ * cvmx_dtx_bbx2i_sel#
+ */
+union cvmx_dtx_bbx2i_selx {
+	u64 u64;
+	struct cvmx_dtx_bbx2i_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_bbx2i_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx2i_selx cvmx_dtx_bbx2i_selx_t;
+
+/**
+ * cvmx_dtx_bbx3i_bcst_rsp
+ */
+union cvmx_dtx_bbx3i_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_bbx3i_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_bbx3i_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx3i_bcst_rsp cvmx_dtx_bbx3i_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_bbx3i_ctl
+ */
+union cvmx_dtx_bbx3i_ctl {
+	u64 u64;
+	struct cvmx_dtx_bbx3i_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_bbx3i_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx3i_ctl cvmx_dtx_bbx3i_ctl_t;
+
+/**
+ * cvmx_dtx_bbx3i_dat#
+ */
+union cvmx_dtx_bbx3i_datx {
+	u64 u64;
+	struct cvmx_dtx_bbx3i_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_bbx3i_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx3i_datx cvmx_dtx_bbx3i_datx_t;
+
+/**
+ * cvmx_dtx_bbx3i_ena#
+ */
+union cvmx_dtx_bbx3i_enax {
+	u64 u64;
+	struct cvmx_dtx_bbx3i_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_bbx3i_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx3i_enax cvmx_dtx_bbx3i_enax_t;
+
+/**
+ * cvmx_dtx_bbx3i_sel#
+ */
+union cvmx_dtx_bbx3i_selx {
+	u64 u64;
+	struct cvmx_dtx_bbx3i_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_bbx3i_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bbx3i_selx cvmx_dtx_bbx3i_selx_t;
+
+/**
+ * cvmx_dtx_bch_bcst_rsp
+ */
+union cvmx_dtx_bch_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_bch_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_bch_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_bch_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bch_bcst_rsp cvmx_dtx_bch_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_bch_ctl
+ */
+union cvmx_dtx_bch_ctl {
+	u64 u64;
+	struct cvmx_dtx_bch_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_bch_ctl_s cn73xx;
+	struct cvmx_dtx_bch_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bch_ctl cvmx_dtx_bch_ctl_t;
+
+/**
+ * cvmx_dtx_bch_dat#
+ */
+union cvmx_dtx_bch_datx {
+	u64 u64;
+	struct cvmx_dtx_bch_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_bch_datx_s cn73xx;
+	struct cvmx_dtx_bch_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bch_datx cvmx_dtx_bch_datx_t;
+
+/**
+ * cvmx_dtx_bch_ena#
+ */
+union cvmx_dtx_bch_enax {
+	u64 u64;
+	struct cvmx_dtx_bch_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_bch_enax_s cn73xx;
+	struct cvmx_dtx_bch_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bch_enax cvmx_dtx_bch_enax_t;
+
+/**
+ * cvmx_dtx_bch_sel#
+ */
+union cvmx_dtx_bch_selx {
+	u64 u64;
+	struct cvmx_dtx_bch_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_bch_selx_s cn73xx;
+	struct cvmx_dtx_bch_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bch_selx cvmx_dtx_bch_selx_t;
+
+/**
+ * cvmx_dtx_bgx#_bcst_rsp
+ */
+union cvmx_dtx_bgxx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_bgxx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_bgxx_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_bgxx_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_bgxx_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_bgxx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bgxx_bcst_rsp cvmx_dtx_bgxx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_bgx#_ctl
+ */
+union cvmx_dtx_bgxx_ctl {
+	u64 u64;
+	struct cvmx_dtx_bgxx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_bgxx_ctl_s cn73xx;
+	struct cvmx_dtx_bgxx_ctl_s cn78xx;
+	struct cvmx_dtx_bgxx_ctl_s cn78xxp1;
+	struct cvmx_dtx_bgxx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bgxx_ctl cvmx_dtx_bgxx_ctl_t;
+
+/**
+ * cvmx_dtx_bgx#_dat#
+ */
+union cvmx_dtx_bgxx_datx {
+	u64 u64;
+	struct cvmx_dtx_bgxx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_bgxx_datx_s cn73xx;
+	struct cvmx_dtx_bgxx_datx_s cn78xx;
+	struct cvmx_dtx_bgxx_datx_s cn78xxp1;
+	struct cvmx_dtx_bgxx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bgxx_datx cvmx_dtx_bgxx_datx_t;
+
+/**
+ * cvmx_dtx_bgx#_ena#
+ */
+union cvmx_dtx_bgxx_enax {
+	u64 u64;
+	struct cvmx_dtx_bgxx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_bgxx_enax_s cn73xx;
+	struct cvmx_dtx_bgxx_enax_s cn78xx;
+	struct cvmx_dtx_bgxx_enax_s cn78xxp1;
+	struct cvmx_dtx_bgxx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bgxx_enax cvmx_dtx_bgxx_enax_t;
+
+/**
+ * cvmx_dtx_bgx#_sel#
+ */
+union cvmx_dtx_bgxx_selx {
+	u64 u64;
+	struct cvmx_dtx_bgxx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_bgxx_selx_s cn73xx;
+	struct cvmx_dtx_bgxx_selx_s cn78xx;
+	struct cvmx_dtx_bgxx_selx_s cn78xxp1;
+	struct cvmx_dtx_bgxx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bgxx_selx cvmx_dtx_bgxx_selx_t;
+
+/**
+ * cvmx_dtx_broadcast_ctl
+ */
+union cvmx_dtx_broadcast_ctl {
+	u64 u64;
+	struct cvmx_dtx_broadcast_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_broadcast_ctl_s cn70xx;
+	struct cvmx_dtx_broadcast_ctl_s cn70xxp1;
+	struct cvmx_dtx_broadcast_ctl_s cn73xx;
+	struct cvmx_dtx_broadcast_ctl_s cn78xx;
+	struct cvmx_dtx_broadcast_ctl_s cn78xxp1;
+	struct cvmx_dtx_broadcast_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_broadcast_ctl cvmx_dtx_broadcast_ctl_t;
+
+/**
+ * cvmx_dtx_broadcast_ena#
+ */
+union cvmx_dtx_broadcast_enax {
+	u64 u64;
+	struct cvmx_dtx_broadcast_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_broadcast_enax_s cn70xx;
+	struct cvmx_dtx_broadcast_enax_s cn70xxp1;
+	struct cvmx_dtx_broadcast_enax_s cn73xx;
+	struct cvmx_dtx_broadcast_enax_s cn78xx;
+	struct cvmx_dtx_broadcast_enax_s cn78xxp1;
+	struct cvmx_dtx_broadcast_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_broadcast_enax cvmx_dtx_broadcast_enax_t;
+
+/**
+ * cvmx_dtx_broadcast_sel#
+ */
+union cvmx_dtx_broadcast_selx {
+	u64 u64;
+	struct cvmx_dtx_broadcast_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_broadcast_selx_s cn70xx;
+	struct cvmx_dtx_broadcast_selx_s cn70xxp1;
+	struct cvmx_dtx_broadcast_selx_s cn73xx;
+	struct cvmx_dtx_broadcast_selx_s cn78xx;
+	struct cvmx_dtx_broadcast_selx_s cn78xxp1;
+	struct cvmx_dtx_broadcast_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_broadcast_selx cvmx_dtx_broadcast_selx_t;
+
+/**
+ * cvmx_dtx_bts_bcst_rsp
+ */
+union cvmx_dtx_bts_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_bts_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_bts_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bts_bcst_rsp cvmx_dtx_bts_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_bts_ctl
+ */
+union cvmx_dtx_bts_ctl {
+	u64 u64;
+	struct cvmx_dtx_bts_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_bts_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bts_ctl cvmx_dtx_bts_ctl_t;
+
+/**
+ * cvmx_dtx_bts_dat#
+ */
+union cvmx_dtx_bts_datx {
+	u64 u64;
+	struct cvmx_dtx_bts_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_bts_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bts_datx cvmx_dtx_bts_datx_t;
+
+/**
+ * cvmx_dtx_bts_ena#
+ */
+union cvmx_dtx_bts_enax {
+	u64 u64;
+	struct cvmx_dtx_bts_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_bts_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bts_enax cvmx_dtx_bts_enax_t;
+
+/**
+ * cvmx_dtx_bts_sel#
+ */
+union cvmx_dtx_bts_selx {
+	u64 u64;
+	struct cvmx_dtx_bts_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_bts_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_bts_selx cvmx_dtx_bts_selx_t;
+
+/**
+ * cvmx_dtx_ciu_bcst_rsp
+ */
+union cvmx_dtx_ciu_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_ciu_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_ciu_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_ciu_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_ciu_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_ciu_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_ciu_bcst_rsp cvmx_dtx_ciu_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_ciu_ctl
+ */
+union cvmx_dtx_ciu_ctl {
+	u64 u64;
+	struct cvmx_dtx_ciu_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_ciu_ctl_s cn73xx;
+	struct cvmx_dtx_ciu_ctl_s cn78xx;
+	struct cvmx_dtx_ciu_ctl_s cn78xxp1;
+	struct cvmx_dtx_ciu_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_ciu_ctl cvmx_dtx_ciu_ctl_t;
+
+/**
+ * cvmx_dtx_ciu_dat#
+ */
+union cvmx_dtx_ciu_datx {
+	u64 u64;
+	struct cvmx_dtx_ciu_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_ciu_datx_s cn73xx;
+	struct cvmx_dtx_ciu_datx_s cn78xx;
+	struct cvmx_dtx_ciu_datx_s cn78xxp1;
+	struct cvmx_dtx_ciu_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_ciu_datx cvmx_dtx_ciu_datx_t;
+
+/**
+ * cvmx_dtx_ciu_ena#
+ */
+union cvmx_dtx_ciu_enax {
+	u64 u64;
+	struct cvmx_dtx_ciu_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_ciu_enax_s cn73xx;
+	struct cvmx_dtx_ciu_enax_s cn78xx;
+	struct cvmx_dtx_ciu_enax_s cn78xxp1;
+	struct cvmx_dtx_ciu_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_ciu_enax cvmx_dtx_ciu_enax_t;
+
+/**
+ * cvmx_dtx_ciu_sel#
+ */
+union cvmx_dtx_ciu_selx {
+	u64 u64;
+	struct cvmx_dtx_ciu_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_ciu_selx_s cn73xx;
+	struct cvmx_dtx_ciu_selx_s cn78xx;
+	struct cvmx_dtx_ciu_selx_s cn78xxp1;
+	struct cvmx_dtx_ciu_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_ciu_selx cvmx_dtx_ciu_selx_t;
+
+/**
+ * cvmx_dtx_denc_bcst_rsp
+ */
+union cvmx_dtx_denc_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_denc_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_denc_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_denc_bcst_rsp cvmx_dtx_denc_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_denc_ctl
+ */
+union cvmx_dtx_denc_ctl {
+	u64 u64;
+	struct cvmx_dtx_denc_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_denc_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_denc_ctl cvmx_dtx_denc_ctl_t;
+
+/**
+ * cvmx_dtx_denc_dat#
+ */
+union cvmx_dtx_denc_datx {
+	u64 u64;
+	struct cvmx_dtx_denc_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_denc_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_denc_datx cvmx_dtx_denc_datx_t;
+
+/**
+ * cvmx_dtx_denc_ena#
+ */
+union cvmx_dtx_denc_enax {
+	u64 u64;
+	struct cvmx_dtx_denc_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_denc_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_denc_enax cvmx_dtx_denc_enax_t;
+
+/**
+ * cvmx_dtx_denc_sel#
+ */
+union cvmx_dtx_denc_selx {
+	u64 u64;
+	struct cvmx_dtx_denc_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_denc_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_denc_selx cvmx_dtx_denc_selx_t;
+
+/**
+ * cvmx_dtx_dfa_bcst_rsp
+ */
+union cvmx_dtx_dfa_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_dfa_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_dfa_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_dfa_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_dfa_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_dfa_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_dfa_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_dfa_bcst_rsp cvmx_dtx_dfa_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_dfa_ctl
+ */
+union cvmx_dtx_dfa_ctl {
+	u64 u64;
+	struct cvmx_dtx_dfa_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_dfa_ctl_s cn70xx;
+	struct cvmx_dtx_dfa_ctl_s cn70xxp1;
+	struct cvmx_dtx_dfa_ctl_s cn73xx;
+	struct cvmx_dtx_dfa_ctl_s cn78xx;
+	struct cvmx_dtx_dfa_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_dfa_ctl cvmx_dtx_dfa_ctl_t;
+
+/**
+ * cvmx_dtx_dfa_dat#
+ */
+union cvmx_dtx_dfa_datx {
+	u64 u64;
+	struct cvmx_dtx_dfa_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_dfa_datx_s cn70xx;
+	struct cvmx_dtx_dfa_datx_s cn70xxp1;
+	struct cvmx_dtx_dfa_datx_s cn73xx;
+	struct cvmx_dtx_dfa_datx_s cn78xx;
+	struct cvmx_dtx_dfa_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_dfa_datx cvmx_dtx_dfa_datx_t;
+
+/**
+ * cvmx_dtx_dfa_ena#
+ */
+union cvmx_dtx_dfa_enax {
+	u64 u64;
+	struct cvmx_dtx_dfa_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_dfa_enax_s cn70xx;
+	struct cvmx_dtx_dfa_enax_s cn70xxp1;
+	struct cvmx_dtx_dfa_enax_s cn73xx;
+	struct cvmx_dtx_dfa_enax_s cn78xx;
+	struct cvmx_dtx_dfa_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_dfa_enax cvmx_dtx_dfa_enax_t;
+
+/**
+ * cvmx_dtx_dfa_sel#
+ */
+union cvmx_dtx_dfa_selx {
+	u64 u64;
+	struct cvmx_dtx_dfa_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_dfa_selx_s cn70xx;
+	struct cvmx_dtx_dfa_selx_s cn70xxp1;
+	struct cvmx_dtx_dfa_selx_s cn73xx;
+	struct cvmx_dtx_dfa_selx_s cn78xx;
+	struct cvmx_dtx_dfa_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_dfa_selx cvmx_dtx_dfa_selx_t;
+
+/**
+ * cvmx_dtx_dlfe_bcst_rsp
+ */
+union cvmx_dtx_dlfe_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_dlfe_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_dlfe_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_dlfe_bcst_rsp cvmx_dtx_dlfe_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_dlfe_ctl
+ */
+union cvmx_dtx_dlfe_ctl {
+	u64 u64;
+	struct cvmx_dtx_dlfe_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_dlfe_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_dlfe_ctl cvmx_dtx_dlfe_ctl_t;
+
+/**
+ * cvmx_dtx_dlfe_dat#
+ */
+union cvmx_dtx_dlfe_datx {
+	u64 u64;
+	struct cvmx_dtx_dlfe_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_dlfe_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_dlfe_datx cvmx_dtx_dlfe_datx_t;
+
+/**
+ * cvmx_dtx_dlfe_ena#
+ */
+union cvmx_dtx_dlfe_enax {
+	u64 u64;
+	struct cvmx_dtx_dlfe_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_dlfe_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_dlfe_enax cvmx_dtx_dlfe_enax_t;
+
+/**
+ * cvmx_dtx_dlfe_sel#
+ */
+union cvmx_dtx_dlfe_selx {
+	u64 u64;
+	struct cvmx_dtx_dlfe_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_dlfe_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_dlfe_selx cvmx_dtx_dlfe_selx_t;
+
+/**
+ * cvmx_dtx_dpi_bcst_rsp
+ */
+union cvmx_dtx_dpi_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_dpi_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_dpi_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_dpi_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_dpi_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_dpi_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_dpi_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_dpi_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_dpi_bcst_rsp cvmx_dtx_dpi_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_dpi_ctl
+ */
+union cvmx_dtx_dpi_ctl {
+	u64 u64;
+	struct cvmx_dtx_dpi_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_dpi_ctl_s cn70xx;
+	struct cvmx_dtx_dpi_ctl_s cn70xxp1;
+	struct cvmx_dtx_dpi_ctl_s cn73xx;
+	struct cvmx_dtx_dpi_ctl_s cn78xx;
+	struct cvmx_dtx_dpi_ctl_s cn78xxp1;
+	struct cvmx_dtx_dpi_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_dpi_ctl cvmx_dtx_dpi_ctl_t;
+
+/**
+ * cvmx_dtx_dpi_dat#
+ */
+union cvmx_dtx_dpi_datx {
+	u64 u64;
+	struct cvmx_dtx_dpi_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_dpi_datx_s cn70xx;
+	struct cvmx_dtx_dpi_datx_s cn70xxp1;
+	struct cvmx_dtx_dpi_datx_s cn73xx;
+	struct cvmx_dtx_dpi_datx_s cn78xx;
+	struct cvmx_dtx_dpi_datx_s cn78xxp1;
+	struct cvmx_dtx_dpi_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_dpi_datx cvmx_dtx_dpi_datx_t;
+
+/**
+ * cvmx_dtx_dpi_ena#
+ */
+union cvmx_dtx_dpi_enax {
+	u64 u64;
+	struct cvmx_dtx_dpi_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_dpi_enax_s cn70xx;
+	struct cvmx_dtx_dpi_enax_s cn70xxp1;
+	struct cvmx_dtx_dpi_enax_s cn73xx;
+	struct cvmx_dtx_dpi_enax_s cn78xx;
+	struct cvmx_dtx_dpi_enax_s cn78xxp1;
+	struct cvmx_dtx_dpi_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_dpi_enax cvmx_dtx_dpi_enax_t;
+
+/**
+ * cvmx_dtx_dpi_sel#
+ */
+union cvmx_dtx_dpi_selx {
+	u64 u64;
+	struct cvmx_dtx_dpi_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_dpi_selx_s cn70xx;
+	struct cvmx_dtx_dpi_selx_s cn70xxp1;
+	struct cvmx_dtx_dpi_selx_s cn73xx;
+	struct cvmx_dtx_dpi_selx_s cn78xx;
+	struct cvmx_dtx_dpi_selx_s cn78xxp1;
+	struct cvmx_dtx_dpi_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_dpi_selx cvmx_dtx_dpi_selx_t;
+
+/**
+ * cvmx_dtx_fdeq#_bcst_rsp
+ */
+union cvmx_dtx_fdeqx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_fdeqx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_fdeqx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_fdeqx_bcst_rsp cvmx_dtx_fdeqx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_fdeq#_ctl
+ */
+union cvmx_dtx_fdeqx_ctl {
+	u64 u64;
+	struct cvmx_dtx_fdeqx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_fdeqx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_fdeqx_ctl cvmx_dtx_fdeqx_ctl_t;
+
+/**
+ * cvmx_dtx_fdeq#_dat#
+ */
+union cvmx_dtx_fdeqx_datx {
+	u64 u64;
+	struct cvmx_dtx_fdeqx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_fdeqx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_fdeqx_datx cvmx_dtx_fdeqx_datx_t;
+
+/**
+ * cvmx_dtx_fdeq#_ena#
+ */
+union cvmx_dtx_fdeqx_enax {
+	u64 u64;
+	struct cvmx_dtx_fdeqx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_fdeqx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_fdeqx_enax cvmx_dtx_fdeqx_enax_t;
+
+/**
+ * cvmx_dtx_fdeq#_sel#
+ */
+union cvmx_dtx_fdeqx_selx {
+	u64 u64;
+	struct cvmx_dtx_fdeqx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_fdeqx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_fdeqx_selx cvmx_dtx_fdeqx_selx_t;
+
+/**
+ * cvmx_dtx_fpa_bcst_rsp
+ */
+union cvmx_dtx_fpa_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_fpa_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_fpa_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_fpa_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_fpa_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_fpa_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_fpa_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_fpa_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_fpa_bcst_rsp cvmx_dtx_fpa_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_fpa_ctl
+ */
+union cvmx_dtx_fpa_ctl {
+	u64 u64;
+	struct cvmx_dtx_fpa_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_fpa_ctl_s cn70xx;
+	struct cvmx_dtx_fpa_ctl_s cn70xxp1;
+	struct cvmx_dtx_fpa_ctl_s cn73xx;
+	struct cvmx_dtx_fpa_ctl_s cn78xx;
+	struct cvmx_dtx_fpa_ctl_s cn78xxp1;
+	struct cvmx_dtx_fpa_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_fpa_ctl cvmx_dtx_fpa_ctl_t;
+
+/**
+ * cvmx_dtx_fpa_dat#
+ */
+union cvmx_dtx_fpa_datx {
+	u64 u64;
+	struct cvmx_dtx_fpa_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_fpa_datx_s cn70xx;
+	struct cvmx_dtx_fpa_datx_s cn70xxp1;
+	struct cvmx_dtx_fpa_datx_s cn73xx;
+	struct cvmx_dtx_fpa_datx_s cn78xx;
+	struct cvmx_dtx_fpa_datx_s cn78xxp1;
+	struct cvmx_dtx_fpa_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_fpa_datx cvmx_dtx_fpa_datx_t;
+
+/**
+ * cvmx_dtx_fpa_ena#
+ */
+union cvmx_dtx_fpa_enax {
+	u64 u64;
+	struct cvmx_dtx_fpa_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_fpa_enax_s cn70xx;
+	struct cvmx_dtx_fpa_enax_s cn70xxp1;
+	struct cvmx_dtx_fpa_enax_s cn73xx;
+	struct cvmx_dtx_fpa_enax_s cn78xx;
+	struct cvmx_dtx_fpa_enax_s cn78xxp1;
+	struct cvmx_dtx_fpa_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_fpa_enax cvmx_dtx_fpa_enax_t;
+
+/**
+ * cvmx_dtx_fpa_sel#
+ */
+union cvmx_dtx_fpa_selx {
+	u64 u64;
+	struct cvmx_dtx_fpa_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_fpa_selx_s cn70xx;
+	struct cvmx_dtx_fpa_selx_s cn70xxp1;
+	struct cvmx_dtx_fpa_selx_s cn73xx;
+	struct cvmx_dtx_fpa_selx_s cn78xx;
+	struct cvmx_dtx_fpa_selx_s cn78xxp1;
+	struct cvmx_dtx_fpa_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_fpa_selx cvmx_dtx_fpa_selx_t;
+
+/**
+ * cvmx_dtx_gmx#_bcst_rsp
+ */
+union cvmx_dtx_gmxx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_gmxx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_gmxx_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_gmxx_bcst_rsp_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_gmxx_bcst_rsp cvmx_dtx_gmxx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_gmx#_ctl
+ */
+union cvmx_dtx_gmxx_ctl {
+	u64 u64;
+	struct cvmx_dtx_gmxx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_gmxx_ctl_s cn70xx;
+	struct cvmx_dtx_gmxx_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_gmxx_ctl cvmx_dtx_gmxx_ctl_t;
+
+/**
+ * cvmx_dtx_gmx#_dat#
+ */
+union cvmx_dtx_gmxx_datx {
+	u64 u64;
+	struct cvmx_dtx_gmxx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_gmxx_datx_s cn70xx;
+	struct cvmx_dtx_gmxx_datx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_gmxx_datx cvmx_dtx_gmxx_datx_t;
+
+/**
+ * cvmx_dtx_gmx#_ena#
+ */
+union cvmx_dtx_gmxx_enax {
+	u64 u64;
+	struct cvmx_dtx_gmxx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_gmxx_enax_s cn70xx;
+	struct cvmx_dtx_gmxx_enax_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_gmxx_enax cvmx_dtx_gmxx_enax_t;
+
+/**
+ * cvmx_dtx_gmx#_sel#
+ */
+union cvmx_dtx_gmxx_selx {
+	u64 u64;
+	struct cvmx_dtx_gmxx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_gmxx_selx_s cn70xx;
+	struct cvmx_dtx_gmxx_selx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_gmxx_selx cvmx_dtx_gmxx_selx_t;
+
+/**
+ * cvmx_dtx_gser#_bcst_rsp
+ */
+union cvmx_dtx_gserx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_gserx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_gserx_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_gserx_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_gserx_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_gserx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_gserx_bcst_rsp cvmx_dtx_gserx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_gser#_ctl
+ */
+union cvmx_dtx_gserx_ctl {
+	u64 u64;
+	struct cvmx_dtx_gserx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_gserx_ctl_s cn73xx;
+	struct cvmx_dtx_gserx_ctl_s cn78xx;
+	struct cvmx_dtx_gserx_ctl_s cn78xxp1;
+	struct cvmx_dtx_gserx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_gserx_ctl cvmx_dtx_gserx_ctl_t;
+
+/**
+ * cvmx_dtx_gser#_dat#
+ */
+union cvmx_dtx_gserx_datx {
+	u64 u64;
+	struct cvmx_dtx_gserx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_gserx_datx_s cn73xx;
+	struct cvmx_dtx_gserx_datx_s cn78xx;
+	struct cvmx_dtx_gserx_datx_s cn78xxp1;
+	struct cvmx_dtx_gserx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_gserx_datx cvmx_dtx_gserx_datx_t;
+
+/**
+ * cvmx_dtx_gser#_ena#
+ */
+union cvmx_dtx_gserx_enax {
+	u64 u64;
+	struct cvmx_dtx_gserx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_gserx_enax_s cn73xx;
+	struct cvmx_dtx_gserx_enax_s cn78xx;
+	struct cvmx_dtx_gserx_enax_s cn78xxp1;
+	struct cvmx_dtx_gserx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_gserx_enax cvmx_dtx_gserx_enax_t;
+
+/**
+ * cvmx_dtx_gser#_sel#
+ */
+union cvmx_dtx_gserx_selx {
+	u64 u64;
+	struct cvmx_dtx_gserx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_gserx_selx_s cn73xx;
+	struct cvmx_dtx_gserx_selx_s cn78xx;
+	struct cvmx_dtx_gserx_selx_s cn78xxp1;
+	struct cvmx_dtx_gserx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_gserx_selx cvmx_dtx_gserx_selx_t;
+
+/**
+ * cvmx_dtx_hna_bcst_rsp
+ */
+union cvmx_dtx_hna_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_hna_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_hna_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_hna_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_hna_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_hna_bcst_rsp cvmx_dtx_hna_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_hna_ctl
+ */
+union cvmx_dtx_hna_ctl {
+	u64 u64;
+	struct cvmx_dtx_hna_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_hna_ctl_s cn73xx;
+	struct cvmx_dtx_hna_ctl_s cn78xx;
+	struct cvmx_dtx_hna_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_hna_ctl cvmx_dtx_hna_ctl_t;
+
+/**
+ * cvmx_dtx_hna_dat#
+ */
+union cvmx_dtx_hna_datx {
+	u64 u64;
+	struct cvmx_dtx_hna_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_hna_datx_s cn73xx;
+	struct cvmx_dtx_hna_datx_s cn78xx;
+	struct cvmx_dtx_hna_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_hna_datx cvmx_dtx_hna_datx_t;
+
+/**
+ * cvmx_dtx_hna_ena#
+ */
+union cvmx_dtx_hna_enax {
+	u64 u64;
+	struct cvmx_dtx_hna_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_hna_enax_s cn73xx;
+	struct cvmx_dtx_hna_enax_s cn78xx;
+	struct cvmx_dtx_hna_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_hna_enax cvmx_dtx_hna_enax_t;
+
+/**
+ * cvmx_dtx_hna_sel#
+ */
+union cvmx_dtx_hna_selx {
+	u64 u64;
+	struct cvmx_dtx_hna_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_hna_selx_s cn73xx;
+	struct cvmx_dtx_hna_selx_s cn78xx;
+	struct cvmx_dtx_hna_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_hna_selx cvmx_dtx_hna_selx_t;
+
+/**
+ * cvmx_dtx_ila_bcst_rsp
+ */
+union cvmx_dtx_ila_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_ila_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_ila_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_ila_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ila_bcst_rsp cvmx_dtx_ila_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_ila_ctl
+ */
+union cvmx_dtx_ila_ctl {
+	u64 u64;
+	struct cvmx_dtx_ila_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_ila_ctl_s cn78xx;
+	struct cvmx_dtx_ila_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ila_ctl cvmx_dtx_ila_ctl_t;
+
+/**
+ * cvmx_dtx_ila_dat#
+ */
+union cvmx_dtx_ila_datx {
+	u64 u64;
+	struct cvmx_dtx_ila_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_ila_datx_s cn78xx;
+	struct cvmx_dtx_ila_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ila_datx cvmx_dtx_ila_datx_t;
+
+/**
+ * cvmx_dtx_ila_ena#
+ */
+union cvmx_dtx_ila_enax {
+	u64 u64;
+	struct cvmx_dtx_ila_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_ila_enax_s cn78xx;
+	struct cvmx_dtx_ila_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ila_enax cvmx_dtx_ila_enax_t;
+
+/**
+ * cvmx_dtx_ila_sel#
+ */
+union cvmx_dtx_ila_selx {
+	u64 u64;
+	struct cvmx_dtx_ila_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_ila_selx_s cn78xx;
+	struct cvmx_dtx_ila_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ila_selx cvmx_dtx_ila_selx_t;
+
+/**
+ * cvmx_dtx_ilk_bcst_rsp
+ */
+union cvmx_dtx_ilk_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_ilk_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_ilk_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_ilk_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ilk_bcst_rsp cvmx_dtx_ilk_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_ilk_ctl
+ */
+union cvmx_dtx_ilk_ctl {
+	u64 u64;
+	struct cvmx_dtx_ilk_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_ilk_ctl_s cn78xx;
+	struct cvmx_dtx_ilk_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ilk_ctl cvmx_dtx_ilk_ctl_t;
+
+/**
+ * cvmx_dtx_ilk_dat#
+ */
+union cvmx_dtx_ilk_datx {
+	u64 u64;
+	struct cvmx_dtx_ilk_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_ilk_datx_s cn78xx;
+	struct cvmx_dtx_ilk_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ilk_datx cvmx_dtx_ilk_datx_t;
+
+/**
+ * cvmx_dtx_ilk_ena#
+ */
+union cvmx_dtx_ilk_enax {
+	u64 u64;
+	struct cvmx_dtx_ilk_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_ilk_enax_s cn78xx;
+	struct cvmx_dtx_ilk_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ilk_enax cvmx_dtx_ilk_enax_t;
+
+/**
+ * cvmx_dtx_ilk_sel#
+ */
+union cvmx_dtx_ilk_selx {
+	u64 u64;
+	struct cvmx_dtx_ilk_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_ilk_selx_s cn78xx;
+	struct cvmx_dtx_ilk_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ilk_selx cvmx_dtx_ilk_selx_t;
+
+/**
+ * cvmx_dtx_iob_bcst_rsp
+ */
+union cvmx_dtx_iob_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_iob_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_iob_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_iob_bcst_rsp_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_iob_bcst_rsp cvmx_dtx_iob_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_iob_ctl
+ */
+union cvmx_dtx_iob_ctl {
+	u64 u64;
+	struct cvmx_dtx_iob_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_iob_ctl_s cn70xx;
+	struct cvmx_dtx_iob_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_iob_ctl cvmx_dtx_iob_ctl_t;
+
+/**
+ * cvmx_dtx_iob_dat#
+ */
+union cvmx_dtx_iob_datx {
+	u64 u64;
+	struct cvmx_dtx_iob_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_iob_datx_s cn70xx;
+	struct cvmx_dtx_iob_datx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_iob_datx cvmx_dtx_iob_datx_t;
+
+/**
+ * cvmx_dtx_iob_ena#
+ */
+union cvmx_dtx_iob_enax {
+	u64 u64;
+	struct cvmx_dtx_iob_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_iob_enax_s cn70xx;
+	struct cvmx_dtx_iob_enax_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_iob_enax cvmx_dtx_iob_enax_t;
+
+/**
+ * cvmx_dtx_iob_sel#
+ */
+union cvmx_dtx_iob_selx {
+	u64 u64;
+	struct cvmx_dtx_iob_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_iob_selx_s cn70xx;
+	struct cvmx_dtx_iob_selx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_iob_selx cvmx_dtx_iob_selx_t;
+
+/**
+ * cvmx_dtx_iobn_bcst_rsp
+ */
+union cvmx_dtx_iobn_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_iobn_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_iobn_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_iobn_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_iobn_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_iobn_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_iobn_bcst_rsp cvmx_dtx_iobn_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_iobn_ctl
+ */
+union cvmx_dtx_iobn_ctl {
+	u64 u64;
+	struct cvmx_dtx_iobn_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_iobn_ctl_s cn73xx;
+	struct cvmx_dtx_iobn_ctl_s cn78xx;
+	struct cvmx_dtx_iobn_ctl_s cn78xxp1;
+	struct cvmx_dtx_iobn_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_iobn_ctl cvmx_dtx_iobn_ctl_t;
+
+/**
+ * cvmx_dtx_iobn_dat#
+ */
+union cvmx_dtx_iobn_datx {
+	u64 u64;
+	struct cvmx_dtx_iobn_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_iobn_datx_s cn73xx;
+	struct cvmx_dtx_iobn_datx_s cn78xx;
+	struct cvmx_dtx_iobn_datx_s cn78xxp1;
+	struct cvmx_dtx_iobn_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_iobn_datx cvmx_dtx_iobn_datx_t;
+
+/**
+ * cvmx_dtx_iobn_ena#
+ */
+union cvmx_dtx_iobn_enax {
+	u64 u64;
+	struct cvmx_dtx_iobn_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_iobn_enax_s cn73xx;
+	struct cvmx_dtx_iobn_enax_s cn78xx;
+	struct cvmx_dtx_iobn_enax_s cn78xxp1;
+	struct cvmx_dtx_iobn_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_iobn_enax cvmx_dtx_iobn_enax_t;
+
+/**
+ * cvmx_dtx_iobn_sel#
+ */
+union cvmx_dtx_iobn_selx {
+	u64 u64;
+	struct cvmx_dtx_iobn_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_iobn_selx_s cn73xx;
+	struct cvmx_dtx_iobn_selx_s cn78xx;
+	struct cvmx_dtx_iobn_selx_s cn78xxp1;
+	struct cvmx_dtx_iobn_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_iobn_selx cvmx_dtx_iobn_selx_t;
+
+/**
+ * cvmx_dtx_iobp_bcst_rsp
+ */
+union cvmx_dtx_iobp_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_iobp_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_iobp_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_iobp_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_iobp_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_iobp_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_iobp_bcst_rsp cvmx_dtx_iobp_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_iobp_ctl
+ */
+union cvmx_dtx_iobp_ctl {
+	u64 u64;
+	struct cvmx_dtx_iobp_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_iobp_ctl_s cn73xx;
+	struct cvmx_dtx_iobp_ctl_s cn78xx;
+	struct cvmx_dtx_iobp_ctl_s cn78xxp1;
+	struct cvmx_dtx_iobp_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_iobp_ctl cvmx_dtx_iobp_ctl_t;
+
+/**
+ * cvmx_dtx_iobp_dat#
+ */
+union cvmx_dtx_iobp_datx {
+	u64 u64;
+	struct cvmx_dtx_iobp_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_iobp_datx_s cn73xx;
+	struct cvmx_dtx_iobp_datx_s cn78xx;
+	struct cvmx_dtx_iobp_datx_s cn78xxp1;
+	struct cvmx_dtx_iobp_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_iobp_datx cvmx_dtx_iobp_datx_t;
+
+/**
+ * cvmx_dtx_iobp_ena#
+ */
+union cvmx_dtx_iobp_enax {
+	u64 u64;
+	struct cvmx_dtx_iobp_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_iobp_enax_s cn73xx;
+	struct cvmx_dtx_iobp_enax_s cn78xx;
+	struct cvmx_dtx_iobp_enax_s cn78xxp1;
+	struct cvmx_dtx_iobp_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_iobp_enax cvmx_dtx_iobp_enax_t;
+
+/**
+ * cvmx_dtx_iobp_sel#
+ */
+union cvmx_dtx_iobp_selx {
+	u64 u64;
+	struct cvmx_dtx_iobp_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_iobp_selx_s cn73xx;
+	struct cvmx_dtx_iobp_selx_s cn78xx;
+	struct cvmx_dtx_iobp_selx_s cn78xxp1;
+	struct cvmx_dtx_iobp_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_iobp_selx cvmx_dtx_iobp_selx_t;
+
+/**
+ * cvmx_dtx_ipd_bcst_rsp
+ */
+union cvmx_dtx_ipd_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_ipd_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_ipd_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_ipd_bcst_rsp_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_ipd_bcst_rsp cvmx_dtx_ipd_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_ipd_ctl
+ */
+union cvmx_dtx_ipd_ctl {
+	u64 u64;
+	struct cvmx_dtx_ipd_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_ipd_ctl_s cn70xx;
+	struct cvmx_dtx_ipd_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_ipd_ctl cvmx_dtx_ipd_ctl_t;
+
+/**
+ * cvmx_dtx_ipd_dat#
+ */
+union cvmx_dtx_ipd_datx {
+	u64 u64;
+	struct cvmx_dtx_ipd_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_ipd_datx_s cn70xx;
+	struct cvmx_dtx_ipd_datx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_ipd_datx cvmx_dtx_ipd_datx_t;
+
+/**
+ * cvmx_dtx_ipd_ena#
+ */
+union cvmx_dtx_ipd_enax {
+	u64 u64;
+	struct cvmx_dtx_ipd_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_ipd_enax_s cn70xx;
+	struct cvmx_dtx_ipd_enax_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_ipd_enax cvmx_dtx_ipd_enax_t;
+
+/**
+ * cvmx_dtx_ipd_sel#
+ */
+union cvmx_dtx_ipd_selx {
+	u64 u64;
+	struct cvmx_dtx_ipd_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_ipd_selx_s cn70xx;
+	struct cvmx_dtx_ipd_selx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_ipd_selx cvmx_dtx_ipd_selx_t;
+
+/**
+ * cvmx_dtx_key_bcst_rsp
+ */
+union cvmx_dtx_key_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_key_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_key_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_key_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_key_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_key_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_key_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_key_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_key_bcst_rsp cvmx_dtx_key_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_key_ctl
+ */
+union cvmx_dtx_key_ctl {
+	u64 u64;
+	struct cvmx_dtx_key_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_key_ctl_s cn70xx;
+	struct cvmx_dtx_key_ctl_s cn70xxp1;
+	struct cvmx_dtx_key_ctl_s cn73xx;
+	struct cvmx_dtx_key_ctl_s cn78xx;
+	struct cvmx_dtx_key_ctl_s cn78xxp1;
+	struct cvmx_dtx_key_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_key_ctl cvmx_dtx_key_ctl_t;
+
+/**
+ * cvmx_dtx_key_dat#
+ */
+union cvmx_dtx_key_datx {
+	u64 u64;
+	struct cvmx_dtx_key_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_key_datx_s cn70xx;
+	struct cvmx_dtx_key_datx_s cn70xxp1;
+	struct cvmx_dtx_key_datx_s cn73xx;
+	struct cvmx_dtx_key_datx_s cn78xx;
+	struct cvmx_dtx_key_datx_s cn78xxp1;
+	struct cvmx_dtx_key_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_key_datx cvmx_dtx_key_datx_t;
+
+/**
+ * cvmx_dtx_key_ena#
+ */
+union cvmx_dtx_key_enax {
+	u64 u64;
+	struct cvmx_dtx_key_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_key_enax_s cn70xx;
+	struct cvmx_dtx_key_enax_s cn70xxp1;
+	struct cvmx_dtx_key_enax_s cn73xx;
+	struct cvmx_dtx_key_enax_s cn78xx;
+	struct cvmx_dtx_key_enax_s cn78xxp1;
+	struct cvmx_dtx_key_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_key_enax cvmx_dtx_key_enax_t;
+
+/**
+ * cvmx_dtx_key_sel#
+ */
+union cvmx_dtx_key_selx {
+	u64 u64;
+	struct cvmx_dtx_key_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_key_selx_s cn70xx;
+	struct cvmx_dtx_key_selx_s cn70xxp1;
+	struct cvmx_dtx_key_selx_s cn73xx;
+	struct cvmx_dtx_key_selx_s cn78xx;
+	struct cvmx_dtx_key_selx_s cn78xxp1;
+	struct cvmx_dtx_key_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_key_selx cvmx_dtx_key_selx_t;
+
+/**
+ * cvmx_dtx_l2c_cbc#_bcst_rsp
+ */
+union cvmx_dtx_l2c_cbcx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_l2c_cbcx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_l2c_cbcx_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_l2c_cbcx_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_l2c_cbcx_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_l2c_cbcx_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_l2c_cbcx_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_l2c_cbcx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_cbcx_bcst_rsp cvmx_dtx_l2c_cbcx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_l2c_cbc#_ctl
+ */
+union cvmx_dtx_l2c_cbcx_ctl {
+	u64 u64;
+	struct cvmx_dtx_l2c_cbcx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_l2c_cbcx_ctl_s cn70xx;
+	struct cvmx_dtx_l2c_cbcx_ctl_s cn70xxp1;
+	struct cvmx_dtx_l2c_cbcx_ctl_s cn73xx;
+	struct cvmx_dtx_l2c_cbcx_ctl_s cn78xx;
+	struct cvmx_dtx_l2c_cbcx_ctl_s cn78xxp1;
+	struct cvmx_dtx_l2c_cbcx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_cbcx_ctl cvmx_dtx_l2c_cbcx_ctl_t;
+
+/**
+ * cvmx_dtx_l2c_cbc#_dat#
+ */
+union cvmx_dtx_l2c_cbcx_datx {
+	u64 u64;
+	struct cvmx_dtx_l2c_cbcx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_l2c_cbcx_datx_s cn70xx;
+	struct cvmx_dtx_l2c_cbcx_datx_s cn70xxp1;
+	struct cvmx_dtx_l2c_cbcx_datx_s cn73xx;
+	struct cvmx_dtx_l2c_cbcx_datx_s cn78xx;
+	struct cvmx_dtx_l2c_cbcx_datx_s cn78xxp1;
+	struct cvmx_dtx_l2c_cbcx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_cbcx_datx cvmx_dtx_l2c_cbcx_datx_t;
+
+/**
+ * cvmx_dtx_l2c_cbc#_ena#
+ */
+union cvmx_dtx_l2c_cbcx_enax {
+	u64 u64;
+	struct cvmx_dtx_l2c_cbcx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_l2c_cbcx_enax_s cn70xx;
+	struct cvmx_dtx_l2c_cbcx_enax_s cn70xxp1;
+	struct cvmx_dtx_l2c_cbcx_enax_s cn73xx;
+	struct cvmx_dtx_l2c_cbcx_enax_s cn78xx;
+	struct cvmx_dtx_l2c_cbcx_enax_s cn78xxp1;
+	struct cvmx_dtx_l2c_cbcx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_cbcx_enax cvmx_dtx_l2c_cbcx_enax_t;
+
+/**
+ * cvmx_dtx_l2c_cbc#_sel#
+ */
+union cvmx_dtx_l2c_cbcx_selx {
+	u64 u64;
+	struct cvmx_dtx_l2c_cbcx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_l2c_cbcx_selx_s cn70xx;
+	struct cvmx_dtx_l2c_cbcx_selx_s cn70xxp1;
+	struct cvmx_dtx_l2c_cbcx_selx_s cn73xx;
+	struct cvmx_dtx_l2c_cbcx_selx_s cn78xx;
+	struct cvmx_dtx_l2c_cbcx_selx_s cn78xxp1;
+	struct cvmx_dtx_l2c_cbcx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_cbcx_selx cvmx_dtx_l2c_cbcx_selx_t;
+
+/**
+ * cvmx_dtx_l2c_mci#_bcst_rsp
+ */
+union cvmx_dtx_l2c_mcix_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_l2c_mcix_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_l2c_mcix_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_l2c_mcix_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_l2c_mcix_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_l2c_mcix_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_l2c_mcix_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_l2c_mcix_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_mcix_bcst_rsp cvmx_dtx_l2c_mcix_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_l2c_mci#_ctl
+ */
+union cvmx_dtx_l2c_mcix_ctl {
+	u64 u64;
+	struct cvmx_dtx_l2c_mcix_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_l2c_mcix_ctl_s cn70xx;
+	struct cvmx_dtx_l2c_mcix_ctl_s cn70xxp1;
+	struct cvmx_dtx_l2c_mcix_ctl_s cn73xx;
+	struct cvmx_dtx_l2c_mcix_ctl_s cn78xx;
+	struct cvmx_dtx_l2c_mcix_ctl_s cn78xxp1;
+	struct cvmx_dtx_l2c_mcix_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_mcix_ctl cvmx_dtx_l2c_mcix_ctl_t;
+
+/**
+ * cvmx_dtx_l2c_mci#_dat#
+ */
+union cvmx_dtx_l2c_mcix_datx {
+	u64 u64;
+	struct cvmx_dtx_l2c_mcix_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_l2c_mcix_datx_s cn70xx;
+	struct cvmx_dtx_l2c_mcix_datx_s cn70xxp1;
+	struct cvmx_dtx_l2c_mcix_datx_s cn73xx;
+	struct cvmx_dtx_l2c_mcix_datx_s cn78xx;
+	struct cvmx_dtx_l2c_mcix_datx_s cn78xxp1;
+	struct cvmx_dtx_l2c_mcix_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_mcix_datx cvmx_dtx_l2c_mcix_datx_t;
+
+/**
+ * cvmx_dtx_l2c_mci#_ena#
+ */
+union cvmx_dtx_l2c_mcix_enax {
+	u64 u64;
+	struct cvmx_dtx_l2c_mcix_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_l2c_mcix_enax_s cn70xx;
+	struct cvmx_dtx_l2c_mcix_enax_s cn70xxp1;
+	struct cvmx_dtx_l2c_mcix_enax_s cn73xx;
+	struct cvmx_dtx_l2c_mcix_enax_s cn78xx;
+	struct cvmx_dtx_l2c_mcix_enax_s cn78xxp1;
+	struct cvmx_dtx_l2c_mcix_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_mcix_enax cvmx_dtx_l2c_mcix_enax_t;
+
+/**
+ * cvmx_dtx_l2c_mci#_sel#
+ */
+union cvmx_dtx_l2c_mcix_selx {
+	u64 u64;
+	struct cvmx_dtx_l2c_mcix_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_l2c_mcix_selx_s cn70xx;
+	struct cvmx_dtx_l2c_mcix_selx_s cn70xxp1;
+	struct cvmx_dtx_l2c_mcix_selx_s cn73xx;
+	struct cvmx_dtx_l2c_mcix_selx_s cn78xx;
+	struct cvmx_dtx_l2c_mcix_selx_s cn78xxp1;
+	struct cvmx_dtx_l2c_mcix_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_mcix_selx cvmx_dtx_l2c_mcix_selx_t;
+
+/**
+ * cvmx_dtx_l2c_tad#_bcst_rsp
+ */
+union cvmx_dtx_l2c_tadx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_l2c_tadx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_l2c_tadx_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_l2c_tadx_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_l2c_tadx_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_l2c_tadx_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_l2c_tadx_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_l2c_tadx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_tadx_bcst_rsp cvmx_dtx_l2c_tadx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_l2c_tad#_ctl
+ */
+union cvmx_dtx_l2c_tadx_ctl {
+	u64 u64;
+	struct cvmx_dtx_l2c_tadx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_l2c_tadx_ctl_s cn70xx;
+	struct cvmx_dtx_l2c_tadx_ctl_s cn70xxp1;
+	struct cvmx_dtx_l2c_tadx_ctl_s cn73xx;
+	struct cvmx_dtx_l2c_tadx_ctl_s cn78xx;
+	struct cvmx_dtx_l2c_tadx_ctl_s cn78xxp1;
+	struct cvmx_dtx_l2c_tadx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_tadx_ctl cvmx_dtx_l2c_tadx_ctl_t;
+
+/**
+ * cvmx_dtx_l2c_tad#_dat#
+ */
+union cvmx_dtx_l2c_tadx_datx {
+	u64 u64;
+	struct cvmx_dtx_l2c_tadx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_l2c_tadx_datx_s cn70xx;
+	struct cvmx_dtx_l2c_tadx_datx_s cn70xxp1;
+	struct cvmx_dtx_l2c_tadx_datx_s cn73xx;
+	struct cvmx_dtx_l2c_tadx_datx_s cn78xx;
+	struct cvmx_dtx_l2c_tadx_datx_s cn78xxp1;
+	struct cvmx_dtx_l2c_tadx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_tadx_datx cvmx_dtx_l2c_tadx_datx_t;
+
+/**
+ * cvmx_dtx_l2c_tad#_ena#
+ */
+union cvmx_dtx_l2c_tadx_enax {
+	u64 u64;
+	struct cvmx_dtx_l2c_tadx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_l2c_tadx_enax_s cn70xx;
+	struct cvmx_dtx_l2c_tadx_enax_s cn70xxp1;
+	struct cvmx_dtx_l2c_tadx_enax_s cn73xx;
+	struct cvmx_dtx_l2c_tadx_enax_s cn78xx;
+	struct cvmx_dtx_l2c_tadx_enax_s cn78xxp1;
+	struct cvmx_dtx_l2c_tadx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_tadx_enax cvmx_dtx_l2c_tadx_enax_t;
+
+/**
+ * cvmx_dtx_l2c_tad#_sel#
+ */
+union cvmx_dtx_l2c_tadx_selx {
+	u64 u64;
+	struct cvmx_dtx_l2c_tadx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_l2c_tadx_selx_s cn70xx;
+	struct cvmx_dtx_l2c_tadx_selx_s cn70xxp1;
+	struct cvmx_dtx_l2c_tadx_selx_s cn73xx;
+	struct cvmx_dtx_l2c_tadx_selx_s cn78xx;
+	struct cvmx_dtx_l2c_tadx_selx_s cn78xxp1;
+	struct cvmx_dtx_l2c_tadx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_l2c_tadx_selx cvmx_dtx_l2c_tadx_selx_t;
+
+/**
+ * cvmx_dtx_lap#_bcst_rsp
+ */
+union cvmx_dtx_lapx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_lapx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_lapx_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_lapx_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_lapx_bcst_rsp cvmx_dtx_lapx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_lap#_ctl
+ */
+union cvmx_dtx_lapx_ctl {
+	u64 u64;
+	struct cvmx_dtx_lapx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_lapx_ctl_s cn78xx;
+	struct cvmx_dtx_lapx_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_lapx_ctl cvmx_dtx_lapx_ctl_t;
+
+/**
+ * cvmx_dtx_lap#_dat#
+ */
+union cvmx_dtx_lapx_datx {
+	u64 u64;
+	struct cvmx_dtx_lapx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_lapx_datx_s cn78xx;
+	struct cvmx_dtx_lapx_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_lapx_datx cvmx_dtx_lapx_datx_t;
+
+/**
+ * cvmx_dtx_lap#_ena#
+ */
+union cvmx_dtx_lapx_enax {
+	u64 u64;
+	struct cvmx_dtx_lapx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_lapx_enax_s cn78xx;
+	struct cvmx_dtx_lapx_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_lapx_enax cvmx_dtx_lapx_enax_t;
+
+/**
+ * cvmx_dtx_lap#_sel#
+ */
+union cvmx_dtx_lapx_selx {
+	u64 u64;
+	struct cvmx_dtx_lapx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_lapx_selx_s cn78xx;
+	struct cvmx_dtx_lapx_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_lapx_selx cvmx_dtx_lapx_selx_t;
+
+/**
+ * cvmx_dtx_lbk_bcst_rsp
+ */
+union cvmx_dtx_lbk_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_lbk_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_lbk_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_lbk_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_lbk_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_lbk_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_lbk_bcst_rsp cvmx_dtx_lbk_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_lbk_ctl
+ */
+union cvmx_dtx_lbk_ctl {
+	u64 u64;
+	struct cvmx_dtx_lbk_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_lbk_ctl_s cn73xx;
+	struct cvmx_dtx_lbk_ctl_s cn78xx;
+	struct cvmx_dtx_lbk_ctl_s cn78xxp1;
+	struct cvmx_dtx_lbk_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_lbk_ctl cvmx_dtx_lbk_ctl_t;
+
+/**
+ * cvmx_dtx_lbk_dat#
+ */
+union cvmx_dtx_lbk_datx {
+	u64 u64;
+	struct cvmx_dtx_lbk_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_lbk_datx_s cn73xx;
+	struct cvmx_dtx_lbk_datx_s cn78xx;
+	struct cvmx_dtx_lbk_datx_s cn78xxp1;
+	struct cvmx_dtx_lbk_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_lbk_datx cvmx_dtx_lbk_datx_t;
+
+/**
+ * cvmx_dtx_lbk_ena#
+ */
+union cvmx_dtx_lbk_enax {
+	u64 u64;
+	struct cvmx_dtx_lbk_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_lbk_enax_s cn73xx;
+	struct cvmx_dtx_lbk_enax_s cn78xx;
+	struct cvmx_dtx_lbk_enax_s cn78xxp1;
+	struct cvmx_dtx_lbk_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_lbk_enax cvmx_dtx_lbk_enax_t;
+
+/**
+ * cvmx_dtx_lbk_sel#
+ */
+union cvmx_dtx_lbk_selx {
+	u64 u64;
+	struct cvmx_dtx_lbk_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_lbk_selx_s cn73xx;
+	struct cvmx_dtx_lbk_selx_s cn78xx;
+	struct cvmx_dtx_lbk_selx_s cn78xxp1;
+	struct cvmx_dtx_lbk_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_lbk_selx cvmx_dtx_lbk_selx_t;
+
+/**
+ * cvmx_dtx_lmc#_bcst_rsp
+ */
+union cvmx_dtx_lmcx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_lmcx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_lmcx_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_lmcx_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_lmcx_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_lmcx_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_lmcx_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_lmcx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_lmcx_bcst_rsp cvmx_dtx_lmcx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_lmc#_ctl
+ */
+union cvmx_dtx_lmcx_ctl {
+	u64 u64;
+	struct cvmx_dtx_lmcx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_lmcx_ctl_s cn70xx;
+	struct cvmx_dtx_lmcx_ctl_s cn70xxp1;
+	struct cvmx_dtx_lmcx_ctl_s cn73xx;
+	struct cvmx_dtx_lmcx_ctl_s cn78xx;
+	struct cvmx_dtx_lmcx_ctl_s cn78xxp1;
+	struct cvmx_dtx_lmcx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_lmcx_ctl cvmx_dtx_lmcx_ctl_t;
+
+/**
+ * cvmx_dtx_lmc#_dat#
+ */
+union cvmx_dtx_lmcx_datx {
+	u64 u64;
+	struct cvmx_dtx_lmcx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_lmcx_datx_s cn70xx;
+	struct cvmx_dtx_lmcx_datx_s cn70xxp1;
+	struct cvmx_dtx_lmcx_datx_s cn73xx;
+	struct cvmx_dtx_lmcx_datx_s cn78xx;
+	struct cvmx_dtx_lmcx_datx_s cn78xxp1;
+	struct cvmx_dtx_lmcx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_lmcx_datx cvmx_dtx_lmcx_datx_t;
+
+/**
+ * cvmx_dtx_lmc#_ena#
+ */
+union cvmx_dtx_lmcx_enax {
+	u64 u64;
+	struct cvmx_dtx_lmcx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_lmcx_enax_s cn70xx;
+	struct cvmx_dtx_lmcx_enax_s cn70xxp1;
+	struct cvmx_dtx_lmcx_enax_s cn73xx;
+	struct cvmx_dtx_lmcx_enax_s cn78xx;
+	struct cvmx_dtx_lmcx_enax_s cn78xxp1;
+	struct cvmx_dtx_lmcx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_lmcx_enax cvmx_dtx_lmcx_enax_t;
+
+/**
+ * cvmx_dtx_lmc#_sel#
+ */
+union cvmx_dtx_lmcx_selx {
+	u64 u64;
+	struct cvmx_dtx_lmcx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_lmcx_selx_s cn70xx;
+	struct cvmx_dtx_lmcx_selx_s cn70xxp1;
+	struct cvmx_dtx_lmcx_selx_s cn73xx;
+	struct cvmx_dtx_lmcx_selx_s cn78xx;
+	struct cvmx_dtx_lmcx_selx_s cn78xxp1;
+	struct cvmx_dtx_lmcx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_lmcx_selx cvmx_dtx_lmcx_selx_t;
+
+/**
+ * cvmx_dtx_mdb#_bcst_rsp
+ */
+union cvmx_dtx_mdbx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_mdbx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_mdbx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mdbx_bcst_rsp cvmx_dtx_mdbx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_mdb#_ctl
+ */
+union cvmx_dtx_mdbx_ctl {
+	u64 u64;
+	struct cvmx_dtx_mdbx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_mdbx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mdbx_ctl cvmx_dtx_mdbx_ctl_t;
+
+/**
+ * cvmx_dtx_mdb#_dat#
+ */
+union cvmx_dtx_mdbx_datx {
+	u64 u64;
+	struct cvmx_dtx_mdbx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_mdbx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mdbx_datx cvmx_dtx_mdbx_datx_t;
+
+/**
+ * cvmx_dtx_mdb#_ena#
+ */
+union cvmx_dtx_mdbx_enax {
+	u64 u64;
+	struct cvmx_dtx_mdbx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_mdbx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mdbx_enax cvmx_dtx_mdbx_enax_t;
+
+/**
+ * cvmx_dtx_mdb#_sel#
+ */
+union cvmx_dtx_mdbx_selx {
+	u64 u64;
+	struct cvmx_dtx_mdbx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_mdbx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mdbx_selx cvmx_dtx_mdbx_selx_t;
+
+/**
+ * cvmx_dtx_mhbw_bcst_rsp
+ */
+union cvmx_dtx_mhbw_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_mhbw_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_mhbw_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mhbw_bcst_rsp cvmx_dtx_mhbw_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_mhbw_ctl
+ */
+union cvmx_dtx_mhbw_ctl {
+	u64 u64;
+	struct cvmx_dtx_mhbw_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_mhbw_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mhbw_ctl cvmx_dtx_mhbw_ctl_t;
+
+/**
+ * cvmx_dtx_mhbw_dat#
+ */
+union cvmx_dtx_mhbw_datx {
+	u64 u64;
+	struct cvmx_dtx_mhbw_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_mhbw_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mhbw_datx cvmx_dtx_mhbw_datx_t;
+
+/**
+ * cvmx_dtx_mhbw_ena#
+ */
+union cvmx_dtx_mhbw_enax {
+	u64 u64;
+	struct cvmx_dtx_mhbw_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_mhbw_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mhbw_enax cvmx_dtx_mhbw_enax_t;
+
+/**
+ * cvmx_dtx_mhbw_sel#
+ */
+union cvmx_dtx_mhbw_selx {
+	u64 u64;
+	struct cvmx_dtx_mhbw_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_mhbw_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mhbw_selx cvmx_dtx_mhbw_selx_t;
+
+/**
+ * cvmx_dtx_mio_bcst_rsp
+ */
+union cvmx_dtx_mio_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_mio_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_mio_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_mio_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_mio_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_mio_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_mio_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_mio_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mio_bcst_rsp cvmx_dtx_mio_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_mio_ctl
+ */
+union cvmx_dtx_mio_ctl {
+	u64 u64;
+	struct cvmx_dtx_mio_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_mio_ctl_s cn70xx;
+	struct cvmx_dtx_mio_ctl_s cn70xxp1;
+	struct cvmx_dtx_mio_ctl_s cn73xx;
+	struct cvmx_dtx_mio_ctl_s cn78xx;
+	struct cvmx_dtx_mio_ctl_s cn78xxp1;
+	struct cvmx_dtx_mio_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mio_ctl cvmx_dtx_mio_ctl_t;
+
+/**
+ * cvmx_dtx_mio_dat#
+ */
+union cvmx_dtx_mio_datx {
+	u64 u64;
+	struct cvmx_dtx_mio_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_mio_datx_s cn70xx;
+	struct cvmx_dtx_mio_datx_s cn70xxp1;
+	struct cvmx_dtx_mio_datx_s cn73xx;
+	struct cvmx_dtx_mio_datx_s cn78xx;
+	struct cvmx_dtx_mio_datx_s cn78xxp1;
+	struct cvmx_dtx_mio_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mio_datx cvmx_dtx_mio_datx_t;
+
+/**
+ * cvmx_dtx_mio_ena#
+ */
+union cvmx_dtx_mio_enax {
+	u64 u64;
+	struct cvmx_dtx_mio_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_mio_enax_s cn70xx;
+	struct cvmx_dtx_mio_enax_s cn70xxp1;
+	struct cvmx_dtx_mio_enax_s cn73xx;
+	struct cvmx_dtx_mio_enax_s cn78xx;
+	struct cvmx_dtx_mio_enax_s cn78xxp1;
+	struct cvmx_dtx_mio_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mio_enax cvmx_dtx_mio_enax_t;
+
+/**
+ * cvmx_dtx_mio_sel#
+ */
+union cvmx_dtx_mio_selx {
+	u64 u64;
+	struct cvmx_dtx_mio_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_mio_selx_s cn70xx;
+	struct cvmx_dtx_mio_selx_s cn70xxp1;
+	struct cvmx_dtx_mio_selx_s cn73xx;
+	struct cvmx_dtx_mio_selx_s cn78xx;
+	struct cvmx_dtx_mio_selx_s cn78xxp1;
+	struct cvmx_dtx_mio_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_mio_selx cvmx_dtx_mio_selx_t;
+
+/**
+ * cvmx_dtx_ocx_bot_bcst_rsp
+ */
+union cvmx_dtx_ocx_bot_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_ocx_bot_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_ocx_bot_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_ocx_bot_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_bot_bcst_rsp cvmx_dtx_ocx_bot_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_ocx_bot_ctl
+ */
+union cvmx_dtx_ocx_bot_ctl {
+	u64 u64;
+	struct cvmx_dtx_ocx_bot_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_ocx_bot_ctl_s cn78xx;
+	struct cvmx_dtx_ocx_bot_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_bot_ctl cvmx_dtx_ocx_bot_ctl_t;
+
+/**
+ * cvmx_dtx_ocx_bot_dat#
+ */
+union cvmx_dtx_ocx_bot_datx {
+	u64 u64;
+	struct cvmx_dtx_ocx_bot_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_ocx_bot_datx_s cn78xx;
+	struct cvmx_dtx_ocx_bot_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_bot_datx cvmx_dtx_ocx_bot_datx_t;
+
+/**
+ * cvmx_dtx_ocx_bot_ena#
+ */
+union cvmx_dtx_ocx_bot_enax {
+	u64 u64;
+	struct cvmx_dtx_ocx_bot_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_ocx_bot_enax_s cn78xx;
+	struct cvmx_dtx_ocx_bot_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_bot_enax cvmx_dtx_ocx_bot_enax_t;
+
+/**
+ * cvmx_dtx_ocx_bot_sel#
+ */
+union cvmx_dtx_ocx_bot_selx {
+	u64 u64;
+	struct cvmx_dtx_ocx_bot_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_ocx_bot_selx_s cn78xx;
+	struct cvmx_dtx_ocx_bot_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_bot_selx cvmx_dtx_ocx_bot_selx_t;
+
+/**
+ * cvmx_dtx_ocx_lnk#_bcst_rsp
+ */
+union cvmx_dtx_ocx_lnkx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_ocx_lnkx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_ocx_lnkx_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_ocx_lnkx_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_lnkx_bcst_rsp cvmx_dtx_ocx_lnkx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_ocx_lnk#_ctl
+ */
+union cvmx_dtx_ocx_lnkx_ctl {
+	u64 u64;
+	struct cvmx_dtx_ocx_lnkx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_ocx_lnkx_ctl_s cn78xx;
+	struct cvmx_dtx_ocx_lnkx_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_lnkx_ctl cvmx_dtx_ocx_lnkx_ctl_t;
+
+/**
+ * cvmx_dtx_ocx_lnk#_dat#
+ */
+union cvmx_dtx_ocx_lnkx_datx {
+	u64 u64;
+	struct cvmx_dtx_ocx_lnkx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_ocx_lnkx_datx_s cn78xx;
+	struct cvmx_dtx_ocx_lnkx_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_lnkx_datx cvmx_dtx_ocx_lnkx_datx_t;
+
+/**
+ * cvmx_dtx_ocx_lnk#_ena#
+ */
+union cvmx_dtx_ocx_lnkx_enax {
+	u64 u64;
+	struct cvmx_dtx_ocx_lnkx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_ocx_lnkx_enax_s cn78xx;
+	struct cvmx_dtx_ocx_lnkx_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_lnkx_enax cvmx_dtx_ocx_lnkx_enax_t;
+
+/**
+ * cvmx_dtx_ocx_lnk#_sel#
+ */
+union cvmx_dtx_ocx_lnkx_selx {
+	u64 u64;
+	struct cvmx_dtx_ocx_lnkx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_ocx_lnkx_selx_s cn78xx;
+	struct cvmx_dtx_ocx_lnkx_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_lnkx_selx cvmx_dtx_ocx_lnkx_selx_t;
+
+/**
+ * cvmx_dtx_ocx_ole#_bcst_rsp
+ */
+union cvmx_dtx_ocx_olex_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_ocx_olex_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_ocx_olex_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_ocx_olex_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_olex_bcst_rsp cvmx_dtx_ocx_olex_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_ocx_ole#_ctl
+ */
+union cvmx_dtx_ocx_olex_ctl {
+	u64 u64;
+	struct cvmx_dtx_ocx_olex_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_ocx_olex_ctl_s cn78xx;
+	struct cvmx_dtx_ocx_olex_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_olex_ctl cvmx_dtx_ocx_olex_ctl_t;
+
+/**
+ * cvmx_dtx_ocx_ole#_dat#
+ */
+union cvmx_dtx_ocx_olex_datx {
+	u64 u64;
+	struct cvmx_dtx_ocx_olex_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_ocx_olex_datx_s cn78xx;
+	struct cvmx_dtx_ocx_olex_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_olex_datx cvmx_dtx_ocx_olex_datx_t;
+
+/**
+ * cvmx_dtx_ocx_ole#_ena#
+ */
+union cvmx_dtx_ocx_olex_enax {
+	u64 u64;
+	struct cvmx_dtx_ocx_olex_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_ocx_olex_enax_s cn78xx;
+	struct cvmx_dtx_ocx_olex_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_olex_enax cvmx_dtx_ocx_olex_enax_t;
+
+/**
+ * cvmx_dtx_ocx_ole#_sel#
+ */
+union cvmx_dtx_ocx_olex_selx {
+	u64 u64;
+	struct cvmx_dtx_ocx_olex_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_ocx_olex_selx_s cn78xx;
+	struct cvmx_dtx_ocx_olex_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_olex_selx cvmx_dtx_ocx_olex_selx_t;
+
+/**
+ * cvmx_dtx_ocx_top_bcst_rsp
+ */
+union cvmx_dtx_ocx_top_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_ocx_top_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_ocx_top_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_ocx_top_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_top_bcst_rsp cvmx_dtx_ocx_top_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_ocx_top_ctl
+ */
+union cvmx_dtx_ocx_top_ctl {
+	u64 u64;
+	struct cvmx_dtx_ocx_top_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_ocx_top_ctl_s cn78xx;
+	struct cvmx_dtx_ocx_top_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_top_ctl cvmx_dtx_ocx_top_ctl_t;
+
+/**
+ * cvmx_dtx_ocx_top_dat#
+ */
+union cvmx_dtx_ocx_top_datx {
+	u64 u64;
+	struct cvmx_dtx_ocx_top_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_ocx_top_datx_s cn78xx;
+	struct cvmx_dtx_ocx_top_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_top_datx cvmx_dtx_ocx_top_datx_t;
+
+/**
+ * cvmx_dtx_ocx_top_ena#
+ */
+union cvmx_dtx_ocx_top_enax {
+	u64 u64;
+	struct cvmx_dtx_ocx_top_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_ocx_top_enax_s cn78xx;
+	struct cvmx_dtx_ocx_top_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_top_enax cvmx_dtx_ocx_top_enax_t;
+
+/**
+ * cvmx_dtx_ocx_top_sel#
+ */
+union cvmx_dtx_ocx_top_selx {
+	u64 u64;
+	struct cvmx_dtx_ocx_top_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_ocx_top_selx_s cn78xx;
+	struct cvmx_dtx_ocx_top_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_ocx_top_selx cvmx_dtx_ocx_top_selx_t;
+
+/**
+ * cvmx_dtx_osm_bcst_rsp
+ */
+union cvmx_dtx_osm_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_osm_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_osm_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_osm_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_osm_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_osm_bcst_rsp cvmx_dtx_osm_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_osm_ctl
+ */
+union cvmx_dtx_osm_ctl {
+	u64 u64;
+	struct cvmx_dtx_osm_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_osm_ctl_s cn73xx;
+	struct cvmx_dtx_osm_ctl_s cn78xx;
+	struct cvmx_dtx_osm_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_osm_ctl cvmx_dtx_osm_ctl_t;
+
+/**
+ * cvmx_dtx_osm_dat#
+ */
+union cvmx_dtx_osm_datx {
+	u64 u64;
+	struct cvmx_dtx_osm_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_osm_datx_s cn73xx;
+	struct cvmx_dtx_osm_datx_s cn78xx;
+	struct cvmx_dtx_osm_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_osm_datx cvmx_dtx_osm_datx_t;
+
+/**
+ * cvmx_dtx_osm_ena#
+ */
+union cvmx_dtx_osm_enax {
+	u64 u64;
+	struct cvmx_dtx_osm_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_osm_enax_s cn73xx;
+	struct cvmx_dtx_osm_enax_s cn78xx;
+	struct cvmx_dtx_osm_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_osm_enax cvmx_dtx_osm_enax_t;
+
+/**
+ * cvmx_dtx_osm_sel#
+ */
+union cvmx_dtx_osm_selx {
+	u64 u64;
+	struct cvmx_dtx_osm_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_osm_selx_s cn73xx;
+	struct cvmx_dtx_osm_selx_s cn78xx;
+	struct cvmx_dtx_osm_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_osm_selx cvmx_dtx_osm_selx_t;
+
+/**
+ * cvmx_dtx_pcs#_bcst_rsp
+ */
+union cvmx_dtx_pcsx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_pcsx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_pcsx_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_pcsx_bcst_rsp_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pcsx_bcst_rsp cvmx_dtx_pcsx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_pcs#_ctl
+ */
+union cvmx_dtx_pcsx_ctl {
+	u64 u64;
+	struct cvmx_dtx_pcsx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_pcsx_ctl_s cn70xx;
+	struct cvmx_dtx_pcsx_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pcsx_ctl cvmx_dtx_pcsx_ctl_t;
+
+/**
+ * cvmx_dtx_pcs#_dat#
+ */
+union cvmx_dtx_pcsx_datx {
+	u64 u64;
+	struct cvmx_dtx_pcsx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_pcsx_datx_s cn70xx;
+	struct cvmx_dtx_pcsx_datx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pcsx_datx cvmx_dtx_pcsx_datx_t;
+
+/**
+ * cvmx_dtx_pcs#_ena#
+ */
+union cvmx_dtx_pcsx_enax {
+	u64 u64;
+	struct cvmx_dtx_pcsx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_pcsx_enax_s cn70xx;
+	struct cvmx_dtx_pcsx_enax_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pcsx_enax cvmx_dtx_pcsx_enax_t;
+
+/**
+ * cvmx_dtx_pcs#_sel#
+ */
+union cvmx_dtx_pcsx_selx {
+	u64 u64;
+	struct cvmx_dtx_pcsx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_pcsx_selx_s cn70xx;
+	struct cvmx_dtx_pcsx_selx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pcsx_selx cvmx_dtx_pcsx_selx_t;
+
+/**
+ * cvmx_dtx_pem#_bcst_rsp
+ */
+union cvmx_dtx_pemx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_pemx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_pemx_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_pemx_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_pemx_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_pemx_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_pemx_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_pemx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pemx_bcst_rsp cvmx_dtx_pemx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_pem#_ctl
+ */
+union cvmx_dtx_pemx_ctl {
+	u64 u64;
+	struct cvmx_dtx_pemx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_pemx_ctl_s cn70xx;
+	struct cvmx_dtx_pemx_ctl_s cn70xxp1;
+	struct cvmx_dtx_pemx_ctl_s cn73xx;
+	struct cvmx_dtx_pemx_ctl_s cn78xx;
+	struct cvmx_dtx_pemx_ctl_s cn78xxp1;
+	struct cvmx_dtx_pemx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pemx_ctl cvmx_dtx_pemx_ctl_t;
+
+/**
+ * cvmx_dtx_pem#_dat#
+ */
+union cvmx_dtx_pemx_datx {
+	u64 u64;
+	struct cvmx_dtx_pemx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_pemx_datx_s cn70xx;
+	struct cvmx_dtx_pemx_datx_s cn70xxp1;
+	struct cvmx_dtx_pemx_datx_s cn73xx;
+	struct cvmx_dtx_pemx_datx_s cn78xx;
+	struct cvmx_dtx_pemx_datx_s cn78xxp1;
+	struct cvmx_dtx_pemx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pemx_datx cvmx_dtx_pemx_datx_t;
+
+/**
+ * cvmx_dtx_pem#_ena#
+ */
+union cvmx_dtx_pemx_enax {
+	u64 u64;
+	struct cvmx_dtx_pemx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_pemx_enax_s cn70xx;
+	struct cvmx_dtx_pemx_enax_s cn70xxp1;
+	struct cvmx_dtx_pemx_enax_s cn73xx;
+	struct cvmx_dtx_pemx_enax_s cn78xx;
+	struct cvmx_dtx_pemx_enax_s cn78xxp1;
+	struct cvmx_dtx_pemx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pemx_enax cvmx_dtx_pemx_enax_t;
+
+/**
+ * cvmx_dtx_pem#_sel#
+ */
+union cvmx_dtx_pemx_selx {
+	u64 u64;
+	struct cvmx_dtx_pemx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_pemx_selx_s cn70xx;
+	struct cvmx_dtx_pemx_selx_s cn70xxp1;
+	struct cvmx_dtx_pemx_selx_s cn73xx;
+	struct cvmx_dtx_pemx_selx_s cn78xx;
+	struct cvmx_dtx_pemx_selx_s cn78xxp1;
+	struct cvmx_dtx_pemx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pemx_selx cvmx_dtx_pemx_selx_t;
+
+/**
+ * cvmx_dtx_pip_bcst_rsp
+ */
+union cvmx_dtx_pip_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_pip_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_pip_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_pip_bcst_rsp_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pip_bcst_rsp cvmx_dtx_pip_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_pip_ctl
+ */
+union cvmx_dtx_pip_ctl {
+	u64 u64;
+	struct cvmx_dtx_pip_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_pip_ctl_s cn70xx;
+	struct cvmx_dtx_pip_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pip_ctl cvmx_dtx_pip_ctl_t;
+
+/**
+ * cvmx_dtx_pip_dat#
+ */
+union cvmx_dtx_pip_datx {
+	u64 u64;
+	struct cvmx_dtx_pip_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_pip_datx_s cn70xx;
+	struct cvmx_dtx_pip_datx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pip_datx cvmx_dtx_pip_datx_t;
+
+/**
+ * cvmx_dtx_pip_ena#
+ */
+union cvmx_dtx_pip_enax {
+	u64 u64;
+	struct cvmx_dtx_pip_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_pip_enax_s cn70xx;
+	struct cvmx_dtx_pip_enax_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pip_enax cvmx_dtx_pip_enax_t;
+
+/**
+ * cvmx_dtx_pip_sel#
+ */
+union cvmx_dtx_pip_selx {
+	u64 u64;
+	struct cvmx_dtx_pip_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_pip_selx_s cn70xx;
+	struct cvmx_dtx_pip_selx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pip_selx cvmx_dtx_pip_selx_t;
+
+/**
+ * cvmx_dtx_pki_pbe_bcst_rsp
+ */
+union cvmx_dtx_pki_pbe_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_pki_pbe_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_pki_pbe_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_pki_pbe_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_pki_pbe_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_pki_pbe_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pbe_bcst_rsp cvmx_dtx_pki_pbe_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_pki_pbe_ctl
+ */
+union cvmx_dtx_pki_pbe_ctl {
+	u64 u64;
+	struct cvmx_dtx_pki_pbe_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_pki_pbe_ctl_s cn73xx;
+	struct cvmx_dtx_pki_pbe_ctl_s cn78xx;
+	struct cvmx_dtx_pki_pbe_ctl_s cn78xxp1;
+	struct cvmx_dtx_pki_pbe_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pbe_ctl cvmx_dtx_pki_pbe_ctl_t;
+
+/**
+ * cvmx_dtx_pki_pbe_dat#
+ */
+union cvmx_dtx_pki_pbe_datx {
+	u64 u64;
+	struct cvmx_dtx_pki_pbe_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_pki_pbe_datx_s cn73xx;
+	struct cvmx_dtx_pki_pbe_datx_s cn78xx;
+	struct cvmx_dtx_pki_pbe_datx_s cn78xxp1;
+	struct cvmx_dtx_pki_pbe_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pbe_datx cvmx_dtx_pki_pbe_datx_t;
+
+/**
+ * cvmx_dtx_pki_pbe_ena#
+ */
+union cvmx_dtx_pki_pbe_enax {
+	u64 u64;
+	struct cvmx_dtx_pki_pbe_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_pki_pbe_enax_s cn73xx;
+	struct cvmx_dtx_pki_pbe_enax_s cn78xx;
+	struct cvmx_dtx_pki_pbe_enax_s cn78xxp1;
+	struct cvmx_dtx_pki_pbe_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pbe_enax cvmx_dtx_pki_pbe_enax_t;
+
+/**
+ * cvmx_dtx_pki_pbe_sel#
+ */
+union cvmx_dtx_pki_pbe_selx {
+	u64 u64;
+	struct cvmx_dtx_pki_pbe_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_pki_pbe_selx_s cn73xx;
+	struct cvmx_dtx_pki_pbe_selx_s cn78xx;
+	struct cvmx_dtx_pki_pbe_selx_s cn78xxp1;
+	struct cvmx_dtx_pki_pbe_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pbe_selx cvmx_dtx_pki_pbe_selx_t;
+
+/**
+ * cvmx_dtx_pki_pfe_bcst_rsp
+ */
+union cvmx_dtx_pki_pfe_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_pki_pfe_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_pki_pfe_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_pki_pfe_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_pki_pfe_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_pki_pfe_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pfe_bcst_rsp cvmx_dtx_pki_pfe_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_pki_pfe_ctl
+ */
+union cvmx_dtx_pki_pfe_ctl {
+	u64 u64;
+	struct cvmx_dtx_pki_pfe_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_pki_pfe_ctl_s cn73xx;
+	struct cvmx_dtx_pki_pfe_ctl_s cn78xx;
+	struct cvmx_dtx_pki_pfe_ctl_s cn78xxp1;
+	struct cvmx_dtx_pki_pfe_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pfe_ctl cvmx_dtx_pki_pfe_ctl_t;
+
+/**
+ * cvmx_dtx_pki_pfe_dat#
+ */
+union cvmx_dtx_pki_pfe_datx {
+	u64 u64;
+	struct cvmx_dtx_pki_pfe_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_pki_pfe_datx_s cn73xx;
+	struct cvmx_dtx_pki_pfe_datx_s cn78xx;
+	struct cvmx_dtx_pki_pfe_datx_s cn78xxp1;
+	struct cvmx_dtx_pki_pfe_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pfe_datx cvmx_dtx_pki_pfe_datx_t;
+
+/**
+ * cvmx_dtx_pki_pfe_ena#
+ */
+union cvmx_dtx_pki_pfe_enax {
+	u64 u64;
+	struct cvmx_dtx_pki_pfe_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_pki_pfe_enax_s cn73xx;
+	struct cvmx_dtx_pki_pfe_enax_s cn78xx;
+	struct cvmx_dtx_pki_pfe_enax_s cn78xxp1;
+	struct cvmx_dtx_pki_pfe_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pfe_enax cvmx_dtx_pki_pfe_enax_t;
+
+/**
+ * cvmx_dtx_pki_pfe_sel#
+ */
+union cvmx_dtx_pki_pfe_selx {
+	u64 u64;
+	struct cvmx_dtx_pki_pfe_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_pki_pfe_selx_s cn73xx;
+	struct cvmx_dtx_pki_pfe_selx_s cn78xx;
+	struct cvmx_dtx_pki_pfe_selx_s cn78xxp1;
+	struct cvmx_dtx_pki_pfe_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pfe_selx cvmx_dtx_pki_pfe_selx_t;
+
+/**
+ * cvmx_dtx_pki_pix_bcst_rsp
+ */
+union cvmx_dtx_pki_pix_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_pki_pix_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_pki_pix_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_pki_pix_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_pki_pix_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_pki_pix_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pix_bcst_rsp cvmx_dtx_pki_pix_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_pki_pix_ctl
+ */
+union cvmx_dtx_pki_pix_ctl {
+	u64 u64;
+	struct cvmx_dtx_pki_pix_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_pki_pix_ctl_s cn73xx;
+	struct cvmx_dtx_pki_pix_ctl_s cn78xx;
+	struct cvmx_dtx_pki_pix_ctl_s cn78xxp1;
+	struct cvmx_dtx_pki_pix_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pix_ctl cvmx_dtx_pki_pix_ctl_t;
+
+/**
+ * cvmx_dtx_pki_pix_dat#
+ */
+union cvmx_dtx_pki_pix_datx {
+	u64 u64;
+	struct cvmx_dtx_pki_pix_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_pki_pix_datx_s cn73xx;
+	struct cvmx_dtx_pki_pix_datx_s cn78xx;
+	struct cvmx_dtx_pki_pix_datx_s cn78xxp1;
+	struct cvmx_dtx_pki_pix_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pix_datx cvmx_dtx_pki_pix_datx_t;
+
+/**
+ * cvmx_dtx_pki_pix_ena#
+ */
+union cvmx_dtx_pki_pix_enax {
+	u64 u64;
+	struct cvmx_dtx_pki_pix_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_pki_pix_enax_s cn73xx;
+	struct cvmx_dtx_pki_pix_enax_s cn78xx;
+	struct cvmx_dtx_pki_pix_enax_s cn78xxp1;
+	struct cvmx_dtx_pki_pix_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pix_enax cvmx_dtx_pki_pix_enax_t;
+
+/**
+ * cvmx_dtx_pki_pix_sel#
+ */
+union cvmx_dtx_pki_pix_selx {
+	u64 u64;
+	struct cvmx_dtx_pki_pix_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_pki_pix_selx_s cn73xx;
+	struct cvmx_dtx_pki_pix_selx_s cn78xx;
+	struct cvmx_dtx_pki_pix_selx_s cn78xxp1;
+	struct cvmx_dtx_pki_pix_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pki_pix_selx cvmx_dtx_pki_pix_selx_t;
+
+/**
+ * cvmx_dtx_pko_bcst_rsp
+ */
+union cvmx_dtx_pko_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_pko_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_pko_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_pko_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_pko_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_pko_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_pko_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_pko_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pko_bcst_rsp cvmx_dtx_pko_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_pko_ctl
+ */
+union cvmx_dtx_pko_ctl {
+	u64 u64;
+	struct cvmx_dtx_pko_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_pko_ctl_s cn70xx;
+	struct cvmx_dtx_pko_ctl_s cn70xxp1;
+	struct cvmx_dtx_pko_ctl_s cn73xx;
+	struct cvmx_dtx_pko_ctl_s cn78xx;
+	struct cvmx_dtx_pko_ctl_s cn78xxp1;
+	struct cvmx_dtx_pko_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pko_ctl cvmx_dtx_pko_ctl_t;
+
+/**
+ * cvmx_dtx_pko_dat#
+ */
+union cvmx_dtx_pko_datx {
+	u64 u64;
+	struct cvmx_dtx_pko_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_pko_datx_s cn70xx;
+	struct cvmx_dtx_pko_datx_s cn70xxp1;
+	struct cvmx_dtx_pko_datx_s cn73xx;
+	struct cvmx_dtx_pko_datx_s cn78xx;
+	struct cvmx_dtx_pko_datx_s cn78xxp1;
+	struct cvmx_dtx_pko_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pko_datx cvmx_dtx_pko_datx_t;
+
+/**
+ * cvmx_dtx_pko_ena#
+ */
+union cvmx_dtx_pko_enax {
+	u64 u64;
+	struct cvmx_dtx_pko_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_pko_enax_s cn70xx;
+	struct cvmx_dtx_pko_enax_s cn70xxp1;
+	struct cvmx_dtx_pko_enax_s cn73xx;
+	struct cvmx_dtx_pko_enax_s cn78xx;
+	struct cvmx_dtx_pko_enax_s cn78xxp1;
+	struct cvmx_dtx_pko_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pko_enax cvmx_dtx_pko_enax_t;
+
+/**
+ * cvmx_dtx_pko_sel#
+ */
+union cvmx_dtx_pko_selx {
+	u64 u64;
+	struct cvmx_dtx_pko_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_pko_selx_s cn70xx;
+	struct cvmx_dtx_pko_selx_s cn70xxp1;
+	struct cvmx_dtx_pko_selx_s cn73xx;
+	struct cvmx_dtx_pko_selx_s cn78xx;
+	struct cvmx_dtx_pko_selx_s cn78xxp1;
+	struct cvmx_dtx_pko_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pko_selx cvmx_dtx_pko_selx_t;
+
+/**
+ * cvmx_dtx_pnb#_bcst_rsp
+ */
+union cvmx_dtx_pnbx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_pnbx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_pnbx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pnbx_bcst_rsp cvmx_dtx_pnbx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_pnb#_ctl
+ */
+union cvmx_dtx_pnbx_ctl {
+	u64 u64;
+	struct cvmx_dtx_pnbx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_pnbx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pnbx_ctl cvmx_dtx_pnbx_ctl_t;
+
+/**
+ * cvmx_dtx_pnb#_dat#
+ */
+union cvmx_dtx_pnbx_datx {
+	u64 u64;
+	struct cvmx_dtx_pnbx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_pnbx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pnbx_datx cvmx_dtx_pnbx_datx_t;
+
+/**
+ * cvmx_dtx_pnb#_ena#
+ */
+union cvmx_dtx_pnbx_enax {
+	u64 u64;
+	struct cvmx_dtx_pnbx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_pnbx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pnbx_enax cvmx_dtx_pnbx_enax_t;
+
+/**
+ * cvmx_dtx_pnb#_sel#
+ */
+union cvmx_dtx_pnbx_selx {
+	u64 u64;
+	struct cvmx_dtx_pnbx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_pnbx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pnbx_selx cvmx_dtx_pnbx_selx_t;
+
+/**
+ * cvmx_dtx_pnbd#_bcst_rsp
+ */
+union cvmx_dtx_pnbdx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_pnbdx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_pnbdx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pnbdx_bcst_rsp cvmx_dtx_pnbdx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_pnbd#_ctl
+ */
+union cvmx_dtx_pnbdx_ctl {
+	u64 u64;
+	struct cvmx_dtx_pnbdx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_pnbdx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pnbdx_ctl cvmx_dtx_pnbdx_ctl_t;
+
+/**
+ * cvmx_dtx_pnbd#_dat#
+ */
+union cvmx_dtx_pnbdx_datx {
+	u64 u64;
+	struct cvmx_dtx_pnbdx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_pnbdx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pnbdx_datx cvmx_dtx_pnbdx_datx_t;
+
+/**
+ * cvmx_dtx_pnbd#_ena#
+ */
+union cvmx_dtx_pnbdx_enax {
+	u64 u64;
+	struct cvmx_dtx_pnbdx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_pnbdx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pnbdx_enax cvmx_dtx_pnbdx_enax_t;
+
+/**
+ * cvmx_dtx_pnbd#_sel#
+ */
+union cvmx_dtx_pnbdx_selx {
+	u64 u64;
+	struct cvmx_dtx_pnbdx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_pnbdx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_pnbdx_selx cvmx_dtx_pnbdx_selx_t;
+
+/**
+ * cvmx_dtx_pow_bcst_rsp
+ */
+union cvmx_dtx_pow_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_pow_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_pow_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_pow_bcst_rsp_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pow_bcst_rsp cvmx_dtx_pow_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_pow_ctl
+ */
+union cvmx_dtx_pow_ctl {
+	u64 u64;
+	struct cvmx_dtx_pow_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_pow_ctl_s cn70xx;
+	struct cvmx_dtx_pow_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pow_ctl cvmx_dtx_pow_ctl_t;
+
+/**
+ * cvmx_dtx_pow_dat#
+ */
+union cvmx_dtx_pow_datx {
+	u64 u64;
+	struct cvmx_dtx_pow_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_pow_datx_s cn70xx;
+	struct cvmx_dtx_pow_datx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pow_datx cvmx_dtx_pow_datx_t;
+
+/**
+ * cvmx_dtx_pow_ena#
+ */
+union cvmx_dtx_pow_enax {
+	u64 u64;
+	struct cvmx_dtx_pow_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_pow_enax_s cn70xx;
+	struct cvmx_dtx_pow_enax_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pow_enax cvmx_dtx_pow_enax_t;
+
+/**
+ * cvmx_dtx_pow_sel#
+ */
+union cvmx_dtx_pow_selx {
+	u64 u64;
+	struct cvmx_dtx_pow_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_pow_selx_s cn70xx;
+	struct cvmx_dtx_pow_selx_s cn70xxp1;
+};
+
+typedef union cvmx_dtx_pow_selx cvmx_dtx_pow_selx_t;
+
+/**
+ * cvmx_dtx_prch_bcst_rsp
+ */
+union cvmx_dtx_prch_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_prch_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_prch_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_prch_bcst_rsp cvmx_dtx_prch_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_prch_ctl
+ */
+union cvmx_dtx_prch_ctl {
+	u64 u64;
+	struct cvmx_dtx_prch_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_prch_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_prch_ctl cvmx_dtx_prch_ctl_t;
+
+/**
+ * cvmx_dtx_prch_dat#
+ */
+union cvmx_dtx_prch_datx {
+	u64 u64;
+	struct cvmx_dtx_prch_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_prch_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_prch_datx cvmx_dtx_prch_datx_t;
+
+/**
+ * cvmx_dtx_prch_ena#
+ */
+union cvmx_dtx_prch_enax {
+	u64 u64;
+	struct cvmx_dtx_prch_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_prch_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_prch_enax cvmx_dtx_prch_enax_t;
+
+/**
+ * cvmx_dtx_prch_sel#
+ */
+union cvmx_dtx_prch_selx {
+	u64 u64;
+	struct cvmx_dtx_prch_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_prch_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_prch_selx cvmx_dtx_prch_selx_t;
+
+/**
+ * cvmx_dtx_psm_bcst_rsp
+ */
+union cvmx_dtx_psm_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_psm_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_psm_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_psm_bcst_rsp cvmx_dtx_psm_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_psm_ctl
+ */
+union cvmx_dtx_psm_ctl {
+	u64 u64;
+	struct cvmx_dtx_psm_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_psm_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_psm_ctl cvmx_dtx_psm_ctl_t;
+
+/**
+ * cvmx_dtx_psm_dat#
+ */
+union cvmx_dtx_psm_datx {
+	u64 u64;
+	struct cvmx_dtx_psm_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_psm_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_psm_datx cvmx_dtx_psm_datx_t;
+
+/**
+ * cvmx_dtx_psm_ena#
+ */
+union cvmx_dtx_psm_enax {
+	u64 u64;
+	struct cvmx_dtx_psm_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_psm_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_psm_enax cvmx_dtx_psm_enax_t;
+
+/**
+ * cvmx_dtx_psm_sel#
+ */
+union cvmx_dtx_psm_selx {
+	u64 u64;
+	struct cvmx_dtx_psm_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_psm_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_psm_selx cvmx_dtx_psm_selx_t;
+
+/**
+ * cvmx_dtx_rad_bcst_rsp
+ */
+union cvmx_dtx_rad_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_rad_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_rad_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_rad_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_rad_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_rad_bcst_rsp cvmx_dtx_rad_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_rad_ctl
+ */
+union cvmx_dtx_rad_ctl {
+	u64 u64;
+	struct cvmx_dtx_rad_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_rad_ctl_s cn73xx;
+	struct cvmx_dtx_rad_ctl_s cn78xx;
+	struct cvmx_dtx_rad_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_rad_ctl cvmx_dtx_rad_ctl_t;
+
+/**
+ * cvmx_dtx_rad_dat#
+ */
+union cvmx_dtx_rad_datx {
+	u64 u64;
+	struct cvmx_dtx_rad_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_rad_datx_s cn73xx;
+	struct cvmx_dtx_rad_datx_s cn78xx;
+	struct cvmx_dtx_rad_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_rad_datx cvmx_dtx_rad_datx_t;
+
+/**
+ * cvmx_dtx_rad_ena#
+ */
+union cvmx_dtx_rad_enax {
+	u64 u64;
+	struct cvmx_dtx_rad_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_rad_enax_s cn73xx;
+	struct cvmx_dtx_rad_enax_s cn78xx;
+	struct cvmx_dtx_rad_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_rad_enax cvmx_dtx_rad_enax_t;
+
+/**
+ * cvmx_dtx_rad_sel#
+ */
+union cvmx_dtx_rad_selx {
+	u64 u64;
+	struct cvmx_dtx_rad_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_rad_selx_s cn73xx;
+	struct cvmx_dtx_rad_selx_s cn78xx;
+	struct cvmx_dtx_rad_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_rad_selx cvmx_dtx_rad_selx_t;
+
+/**
+ * cvmx_dtx_rdec_bcst_rsp
+ */
+union cvmx_dtx_rdec_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_rdec_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_rdec_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rdec_bcst_rsp cvmx_dtx_rdec_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_rdec_ctl
+ */
+union cvmx_dtx_rdec_ctl {
+	u64 u64;
+	struct cvmx_dtx_rdec_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_rdec_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rdec_ctl cvmx_dtx_rdec_ctl_t;
+
+/**
+ * cvmx_dtx_rdec_dat#
+ */
+union cvmx_dtx_rdec_datx {
+	u64 u64;
+	struct cvmx_dtx_rdec_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_rdec_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rdec_datx cvmx_dtx_rdec_datx_t;
+
+/**
+ * cvmx_dtx_rdec_ena#
+ */
+union cvmx_dtx_rdec_enax {
+	u64 u64;
+	struct cvmx_dtx_rdec_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_rdec_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rdec_enax cvmx_dtx_rdec_enax_t;
+
+/**
+ * cvmx_dtx_rdec_sel#
+ */
+union cvmx_dtx_rdec_selx {
+	u64 u64;
+	struct cvmx_dtx_rdec_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_rdec_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rdec_selx cvmx_dtx_rdec_selx_t;
+
+/**
+ * cvmx_dtx_rfif_bcst_rsp
+ */
+union cvmx_dtx_rfif_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_rfif_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_rfif_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rfif_bcst_rsp cvmx_dtx_rfif_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_rfif_ctl
+ */
+union cvmx_dtx_rfif_ctl {
+	u64 u64;
+	struct cvmx_dtx_rfif_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_rfif_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rfif_ctl cvmx_dtx_rfif_ctl_t;
+
+/**
+ * cvmx_dtx_rfif_dat#
+ */
+union cvmx_dtx_rfif_datx {
+	u64 u64;
+	struct cvmx_dtx_rfif_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_rfif_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rfif_datx cvmx_dtx_rfif_datx_t;
+
+/**
+ * cvmx_dtx_rfif_ena#
+ */
+union cvmx_dtx_rfif_enax {
+	u64 u64;
+	struct cvmx_dtx_rfif_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_rfif_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rfif_enax cvmx_dtx_rfif_enax_t;
+
+/**
+ * cvmx_dtx_rfif_sel#
+ */
+union cvmx_dtx_rfif_selx {
+	u64 u64;
+	struct cvmx_dtx_rfif_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_rfif_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rfif_selx cvmx_dtx_rfif_selx_t;
+
+/**
+ * cvmx_dtx_rmap_bcst_rsp
+ */
+union cvmx_dtx_rmap_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_rmap_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_rmap_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rmap_bcst_rsp cvmx_dtx_rmap_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_rmap_ctl
+ */
+union cvmx_dtx_rmap_ctl {
+	u64 u64;
+	struct cvmx_dtx_rmap_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_rmap_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rmap_ctl cvmx_dtx_rmap_ctl_t;
+
+/**
+ * cvmx_dtx_rmap_dat#
+ */
+union cvmx_dtx_rmap_datx {
+	u64 u64;
+	struct cvmx_dtx_rmap_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_rmap_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rmap_datx cvmx_dtx_rmap_datx_t;
+
+/**
+ * cvmx_dtx_rmap_ena#
+ */
+union cvmx_dtx_rmap_enax {
+	u64 u64;
+	struct cvmx_dtx_rmap_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_rmap_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rmap_enax cvmx_dtx_rmap_enax_t;
+
+/**
+ * cvmx_dtx_rmap_sel#
+ */
+union cvmx_dtx_rmap_selx {
+	u64 u64;
+	struct cvmx_dtx_rmap_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_rmap_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rmap_selx cvmx_dtx_rmap_selx_t;
+
+/**
+ * cvmx_dtx_rnm_bcst_rsp
+ */
+union cvmx_dtx_rnm_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_rnm_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_rnm_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_rnm_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_rnm_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_rnm_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rnm_bcst_rsp cvmx_dtx_rnm_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_rnm_ctl
+ */
+union cvmx_dtx_rnm_ctl {
+	u64 u64;
+	struct cvmx_dtx_rnm_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_rnm_ctl_s cn73xx;
+	struct cvmx_dtx_rnm_ctl_s cn78xx;
+	struct cvmx_dtx_rnm_ctl_s cn78xxp1;
+	struct cvmx_dtx_rnm_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rnm_ctl cvmx_dtx_rnm_ctl_t;
+
+/**
+ * cvmx_dtx_rnm_dat#
+ */
+union cvmx_dtx_rnm_datx {
+	u64 u64;
+	struct cvmx_dtx_rnm_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_rnm_datx_s cn73xx;
+	struct cvmx_dtx_rnm_datx_s cn78xx;
+	struct cvmx_dtx_rnm_datx_s cn78xxp1;
+	struct cvmx_dtx_rnm_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rnm_datx cvmx_dtx_rnm_datx_t;
+
+/**
+ * cvmx_dtx_rnm_ena#
+ */
+union cvmx_dtx_rnm_enax {
+	u64 u64;
+	struct cvmx_dtx_rnm_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_rnm_enax_s cn73xx;
+	struct cvmx_dtx_rnm_enax_s cn78xx;
+	struct cvmx_dtx_rnm_enax_s cn78xxp1;
+	struct cvmx_dtx_rnm_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rnm_enax cvmx_dtx_rnm_enax_t;
+
+/**
+ * cvmx_dtx_rnm_sel#
+ */
+union cvmx_dtx_rnm_selx {
+	u64 u64;
+	struct cvmx_dtx_rnm_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_rnm_selx_s cn73xx;
+	struct cvmx_dtx_rnm_selx_s cn78xx;
+	struct cvmx_dtx_rnm_selx_s cn78xxp1;
+	struct cvmx_dtx_rnm_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rnm_selx cvmx_dtx_rnm_selx_t;
+
+/**
+ * cvmx_dtx_rst_bcst_rsp
+ */
+union cvmx_dtx_rst_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_rst_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_rst_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_rst_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_rst_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_rst_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_rst_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_rst_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rst_bcst_rsp cvmx_dtx_rst_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_rst_ctl
+ */
+union cvmx_dtx_rst_ctl {
+	u64 u64;
+	struct cvmx_dtx_rst_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_rst_ctl_s cn70xx;
+	struct cvmx_dtx_rst_ctl_s cn70xxp1;
+	struct cvmx_dtx_rst_ctl_s cn73xx;
+	struct cvmx_dtx_rst_ctl_s cn78xx;
+	struct cvmx_dtx_rst_ctl_s cn78xxp1;
+	struct cvmx_dtx_rst_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rst_ctl cvmx_dtx_rst_ctl_t;
+
+/**
+ * cvmx_dtx_rst_dat#
+ */
+union cvmx_dtx_rst_datx {
+	u64 u64;
+	struct cvmx_dtx_rst_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_rst_datx_s cn70xx;
+	struct cvmx_dtx_rst_datx_s cn70xxp1;
+	struct cvmx_dtx_rst_datx_s cn73xx;
+	struct cvmx_dtx_rst_datx_s cn78xx;
+	struct cvmx_dtx_rst_datx_s cn78xxp1;
+	struct cvmx_dtx_rst_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rst_datx cvmx_dtx_rst_datx_t;
+
+/**
+ * cvmx_dtx_rst_ena#
+ */
+union cvmx_dtx_rst_enax {
+	u64 u64;
+	struct cvmx_dtx_rst_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_rst_enax_s cn70xx;
+	struct cvmx_dtx_rst_enax_s cn70xxp1;
+	struct cvmx_dtx_rst_enax_s cn73xx;
+	struct cvmx_dtx_rst_enax_s cn78xx;
+	struct cvmx_dtx_rst_enax_s cn78xxp1;
+	struct cvmx_dtx_rst_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rst_enax cvmx_dtx_rst_enax_t;
+
+/**
+ * cvmx_dtx_rst_sel#
+ */
+union cvmx_dtx_rst_selx {
+	u64 u64;
+	struct cvmx_dtx_rst_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_rst_selx_s cn70xx;
+	struct cvmx_dtx_rst_selx_s cn70xxp1;
+	struct cvmx_dtx_rst_selx_s cn73xx;
+	struct cvmx_dtx_rst_selx_s cn78xx;
+	struct cvmx_dtx_rst_selx_s cn78xxp1;
+	struct cvmx_dtx_rst_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_rst_selx cvmx_dtx_rst_selx_t;
+
+/**
+ * cvmx_dtx_sata_bcst_rsp
+ */
+union cvmx_dtx_sata_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_sata_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_sata_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_sata_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_sata_bcst_rsp_s cn73xx;
+};
+
+typedef union cvmx_dtx_sata_bcst_rsp cvmx_dtx_sata_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_sata_ctl
+ */
+union cvmx_dtx_sata_ctl {
+	u64 u64;
+	struct cvmx_dtx_sata_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_sata_ctl_s cn70xx;
+	struct cvmx_dtx_sata_ctl_s cn70xxp1;
+	struct cvmx_dtx_sata_ctl_s cn73xx;
+};
+
+typedef union cvmx_dtx_sata_ctl cvmx_dtx_sata_ctl_t;
+
+/**
+ * cvmx_dtx_sata_dat#
+ */
+union cvmx_dtx_sata_datx {
+	u64 u64;
+	struct cvmx_dtx_sata_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_sata_datx_s cn70xx;
+	struct cvmx_dtx_sata_datx_s cn70xxp1;
+	struct cvmx_dtx_sata_datx_s cn73xx;
+};
+
+typedef union cvmx_dtx_sata_datx cvmx_dtx_sata_datx_t;
+
+/**
+ * cvmx_dtx_sata_ena#
+ */
+union cvmx_dtx_sata_enax {
+	u64 u64;
+	struct cvmx_dtx_sata_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_sata_enax_s cn70xx;
+	struct cvmx_dtx_sata_enax_s cn70xxp1;
+	struct cvmx_dtx_sata_enax_s cn73xx;
+};
+
+typedef union cvmx_dtx_sata_enax cvmx_dtx_sata_enax_t;
+
+/**
+ * cvmx_dtx_sata_sel#
+ */
+union cvmx_dtx_sata_selx {
+	u64 u64;
+	struct cvmx_dtx_sata_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_sata_selx_s cn70xx;
+	struct cvmx_dtx_sata_selx_s cn70xxp1;
+	struct cvmx_dtx_sata_selx_s cn73xx;
+};
+
+typedef union cvmx_dtx_sata_selx cvmx_dtx_sata_selx_t;
+
+/**
+ * cvmx_dtx_sli_bcst_rsp
+ */
+union cvmx_dtx_sli_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_sli_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_sli_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_sli_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_sli_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_sli_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_sli_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_sli_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sli_bcst_rsp cvmx_dtx_sli_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_sli_ctl
+ */
+union cvmx_dtx_sli_ctl {
+	u64 u64;
+	struct cvmx_dtx_sli_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_sli_ctl_s cn70xx;
+	struct cvmx_dtx_sli_ctl_s cn70xxp1;
+	struct cvmx_dtx_sli_ctl_s cn73xx;
+	struct cvmx_dtx_sli_ctl_s cn78xx;
+	struct cvmx_dtx_sli_ctl_s cn78xxp1;
+	struct cvmx_dtx_sli_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sli_ctl cvmx_dtx_sli_ctl_t;
+
+/**
+ * cvmx_dtx_sli_dat#
+ */
+union cvmx_dtx_sli_datx {
+	u64 u64;
+	struct cvmx_dtx_sli_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_sli_datx_s cn70xx;
+	struct cvmx_dtx_sli_datx_s cn70xxp1;
+	struct cvmx_dtx_sli_datx_s cn73xx;
+	struct cvmx_dtx_sli_datx_s cn78xx;
+	struct cvmx_dtx_sli_datx_s cn78xxp1;
+	struct cvmx_dtx_sli_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sli_datx cvmx_dtx_sli_datx_t;
+
+/**
+ * cvmx_dtx_sli_ena#
+ */
+union cvmx_dtx_sli_enax {
+	u64 u64;
+	struct cvmx_dtx_sli_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_sli_enax_s cn70xx;
+	struct cvmx_dtx_sli_enax_s cn70xxp1;
+	struct cvmx_dtx_sli_enax_s cn73xx;
+	struct cvmx_dtx_sli_enax_s cn78xx;
+	struct cvmx_dtx_sli_enax_s cn78xxp1;
+	struct cvmx_dtx_sli_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sli_enax cvmx_dtx_sli_enax_t;
+
+/**
+ * cvmx_dtx_sli_sel#
+ */
+union cvmx_dtx_sli_selx {
+	u64 u64;
+	struct cvmx_dtx_sli_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_sli_selx_s cn70xx;
+	struct cvmx_dtx_sli_selx_s cn70xxp1;
+	struct cvmx_dtx_sli_selx_s cn73xx;
+	struct cvmx_dtx_sli_selx_s cn78xx;
+	struct cvmx_dtx_sli_selx_s cn78xxp1;
+	struct cvmx_dtx_sli_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sli_selx cvmx_dtx_sli_selx_t;
+
+/**
+ * cvmx_dtx_spem_bcst_rsp
+ */
+union cvmx_dtx_spem_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_spem_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_spem_bcst_rsp_s cn73xx;
+};
+
+typedef union cvmx_dtx_spem_bcst_rsp cvmx_dtx_spem_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_spem_ctl
+ */
+union cvmx_dtx_spem_ctl {
+	u64 u64;
+	struct cvmx_dtx_spem_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_spem_ctl_s cn73xx;
+};
+
+typedef union cvmx_dtx_spem_ctl cvmx_dtx_spem_ctl_t;
+
+/**
+ * cvmx_dtx_spem_dat#
+ */
+union cvmx_dtx_spem_datx {
+	u64 u64;
+	struct cvmx_dtx_spem_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_spem_datx_s cn73xx;
+};
+
+typedef union cvmx_dtx_spem_datx cvmx_dtx_spem_datx_t;
+
+/**
+ * cvmx_dtx_spem_ena#
+ */
+union cvmx_dtx_spem_enax {
+	u64 u64;
+	struct cvmx_dtx_spem_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_spem_enax_s cn73xx;
+};
+
+typedef union cvmx_dtx_spem_enax cvmx_dtx_spem_enax_t;
+
+/**
+ * cvmx_dtx_spem_sel#
+ */
+union cvmx_dtx_spem_selx {
+	u64 u64;
+	struct cvmx_dtx_spem_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_spem_selx_s cn73xx;
+};
+
+typedef union cvmx_dtx_spem_selx cvmx_dtx_spem_selx_t;
+
+/**
+ * cvmx_dtx_srio#_bcst_rsp
+ */
+union cvmx_dtx_sriox_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_sriox_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_sriox_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sriox_bcst_rsp cvmx_dtx_sriox_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_srio#_ctl
+ */
+union cvmx_dtx_sriox_ctl {
+	u64 u64;
+	struct cvmx_dtx_sriox_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_sriox_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sriox_ctl cvmx_dtx_sriox_ctl_t;
+
+/**
+ * cvmx_dtx_srio#_dat#
+ */
+union cvmx_dtx_sriox_datx {
+	u64 u64;
+	struct cvmx_dtx_sriox_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_sriox_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sriox_datx cvmx_dtx_sriox_datx_t;
+
+/**
+ * cvmx_dtx_srio#_ena#
+ */
+union cvmx_dtx_sriox_enax {
+	u64 u64;
+	struct cvmx_dtx_sriox_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_sriox_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sriox_enax cvmx_dtx_sriox_enax_t;
+
+/**
+ * cvmx_dtx_srio#_sel#
+ */
+union cvmx_dtx_sriox_selx {
+	u64 u64;
+	struct cvmx_dtx_sriox_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_sriox_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sriox_selx cvmx_dtx_sriox_selx_t;
+
+/**
+ * cvmx_dtx_sso_bcst_rsp
+ */
+union cvmx_dtx_sso_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_sso_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_sso_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_sso_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_sso_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_sso_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sso_bcst_rsp cvmx_dtx_sso_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_sso_ctl
+ */
+union cvmx_dtx_sso_ctl {
+	u64 u64;
+	struct cvmx_dtx_sso_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_sso_ctl_s cn73xx;
+	struct cvmx_dtx_sso_ctl_s cn78xx;
+	struct cvmx_dtx_sso_ctl_s cn78xxp1;
+	struct cvmx_dtx_sso_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sso_ctl cvmx_dtx_sso_ctl_t;
+
+/**
+ * cvmx_dtx_sso_dat#
+ */
+union cvmx_dtx_sso_datx {
+	u64 u64;
+	struct cvmx_dtx_sso_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_sso_datx_s cn73xx;
+	struct cvmx_dtx_sso_datx_s cn78xx;
+	struct cvmx_dtx_sso_datx_s cn78xxp1;
+	struct cvmx_dtx_sso_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sso_datx cvmx_dtx_sso_datx_t;
+
+/**
+ * cvmx_dtx_sso_ena#
+ */
+union cvmx_dtx_sso_enax {
+	u64 u64;
+	struct cvmx_dtx_sso_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_sso_enax_s cn73xx;
+	struct cvmx_dtx_sso_enax_s cn78xx;
+	struct cvmx_dtx_sso_enax_s cn78xxp1;
+	struct cvmx_dtx_sso_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sso_enax cvmx_dtx_sso_enax_t;
+
+/**
+ * cvmx_dtx_sso_sel#
+ */
+union cvmx_dtx_sso_selx {
+	u64 u64;
+	struct cvmx_dtx_sso_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_sso_selx_s cn73xx;
+	struct cvmx_dtx_sso_selx_s cn78xx;
+	struct cvmx_dtx_sso_selx_s cn78xxp1;
+	struct cvmx_dtx_sso_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_sso_selx cvmx_dtx_sso_selx_t;
+
+/**
+ * cvmx_dtx_tdec_bcst_rsp
+ */
+union cvmx_dtx_tdec_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_tdec_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_tdec_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_tdec_bcst_rsp cvmx_dtx_tdec_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_tdec_ctl
+ */
+union cvmx_dtx_tdec_ctl {
+	u64 u64;
+	struct cvmx_dtx_tdec_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_tdec_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_tdec_ctl cvmx_dtx_tdec_ctl_t;
+
+/**
+ * cvmx_dtx_tdec_dat#
+ */
+union cvmx_dtx_tdec_datx {
+	u64 u64;
+	struct cvmx_dtx_tdec_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_tdec_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_tdec_datx cvmx_dtx_tdec_datx_t;
+
+/**
+ * cvmx_dtx_tdec_ena#
+ */
+union cvmx_dtx_tdec_enax {
+	u64 u64;
+	struct cvmx_dtx_tdec_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_tdec_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_tdec_enax cvmx_dtx_tdec_enax_t;
+
+/**
+ * cvmx_dtx_tdec_sel#
+ */
+union cvmx_dtx_tdec_selx {
+	u64 u64;
+	struct cvmx_dtx_tdec_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_tdec_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_tdec_selx cvmx_dtx_tdec_selx_t;
+
+/**
+ * cvmx_dtx_tim_bcst_rsp
+ */
+union cvmx_dtx_tim_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_tim_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_tim_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_tim_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_tim_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_tim_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_tim_bcst_rsp_s cn78xxp1;
+	struct cvmx_dtx_tim_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_tim_bcst_rsp cvmx_dtx_tim_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_tim_ctl
+ */
+union cvmx_dtx_tim_ctl {
+	u64 u64;
+	struct cvmx_dtx_tim_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_tim_ctl_s cn70xx;
+	struct cvmx_dtx_tim_ctl_s cn70xxp1;
+	struct cvmx_dtx_tim_ctl_s cn73xx;
+	struct cvmx_dtx_tim_ctl_s cn78xx;
+	struct cvmx_dtx_tim_ctl_s cn78xxp1;
+	struct cvmx_dtx_tim_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_tim_ctl cvmx_dtx_tim_ctl_t;
+
+/**
+ * cvmx_dtx_tim_dat#
+ */
+union cvmx_dtx_tim_datx {
+	u64 u64;
+	struct cvmx_dtx_tim_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_tim_datx_s cn70xx;
+	struct cvmx_dtx_tim_datx_s cn70xxp1;
+	struct cvmx_dtx_tim_datx_s cn73xx;
+	struct cvmx_dtx_tim_datx_s cn78xx;
+	struct cvmx_dtx_tim_datx_s cn78xxp1;
+	struct cvmx_dtx_tim_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_tim_datx cvmx_dtx_tim_datx_t;
+
+/**
+ * cvmx_dtx_tim_ena#
+ */
+union cvmx_dtx_tim_enax {
+	u64 u64;
+	struct cvmx_dtx_tim_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_tim_enax_s cn70xx;
+	struct cvmx_dtx_tim_enax_s cn70xxp1;
+	struct cvmx_dtx_tim_enax_s cn73xx;
+	struct cvmx_dtx_tim_enax_s cn78xx;
+	struct cvmx_dtx_tim_enax_s cn78xxp1;
+	struct cvmx_dtx_tim_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_tim_enax cvmx_dtx_tim_enax_t;
+
+/**
+ * cvmx_dtx_tim_sel#
+ */
+union cvmx_dtx_tim_selx {
+	u64 u64;
+	struct cvmx_dtx_tim_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_tim_selx_s cn70xx;
+	struct cvmx_dtx_tim_selx_s cn70xxp1;
+	struct cvmx_dtx_tim_selx_s cn73xx;
+	struct cvmx_dtx_tim_selx_s cn78xx;
+	struct cvmx_dtx_tim_selx_s cn78xxp1;
+	struct cvmx_dtx_tim_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_tim_selx cvmx_dtx_tim_selx_t;
+
+/**
+ * cvmx_dtx_ulfe_bcst_rsp
+ */
+union cvmx_dtx_ulfe_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_ulfe_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_ulfe_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_ulfe_bcst_rsp cvmx_dtx_ulfe_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_ulfe_ctl
+ */
+union cvmx_dtx_ulfe_ctl {
+	u64 u64;
+	struct cvmx_dtx_ulfe_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_ulfe_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_ulfe_ctl cvmx_dtx_ulfe_ctl_t;
+
+/**
+ * cvmx_dtx_ulfe_dat#
+ */
+union cvmx_dtx_ulfe_datx {
+	u64 u64;
+	struct cvmx_dtx_ulfe_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_ulfe_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_ulfe_datx cvmx_dtx_ulfe_datx_t;
+
+/**
+ * cvmx_dtx_ulfe_ena#
+ */
+union cvmx_dtx_ulfe_enax {
+	u64 u64;
+	struct cvmx_dtx_ulfe_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_ulfe_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_ulfe_enax cvmx_dtx_ulfe_enax_t;
+
+/**
+ * cvmx_dtx_ulfe_sel#
+ */
+union cvmx_dtx_ulfe_selx {
+	u64 u64;
+	struct cvmx_dtx_ulfe_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_ulfe_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_ulfe_selx cvmx_dtx_ulfe_selx_t;
+
+/**
+ * cvmx_dtx_usbdrd#_bcst_rsp
+ */
+union cvmx_dtx_usbdrdx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_usbdrdx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_usbdrdx_bcst_rsp_s cn70xx;
+	struct cvmx_dtx_usbdrdx_bcst_rsp_s cn70xxp1;
+	struct cvmx_dtx_usbdrdx_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_usbdrdx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_usbdrdx_bcst_rsp cvmx_dtx_usbdrdx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_usbdrd#_ctl
+ */
+union cvmx_dtx_usbdrdx_ctl {
+	u64 u64;
+	struct cvmx_dtx_usbdrdx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_usbdrdx_ctl_s cn70xx;
+	struct cvmx_dtx_usbdrdx_ctl_s cn70xxp1;
+	struct cvmx_dtx_usbdrdx_ctl_s cn73xx;
+	struct cvmx_dtx_usbdrdx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_usbdrdx_ctl cvmx_dtx_usbdrdx_ctl_t;
+
+/**
+ * cvmx_dtx_usbdrd#_dat#
+ */
+union cvmx_dtx_usbdrdx_datx {
+	u64 u64;
+	struct cvmx_dtx_usbdrdx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_usbdrdx_datx_s cn70xx;
+	struct cvmx_dtx_usbdrdx_datx_s cn70xxp1;
+	struct cvmx_dtx_usbdrdx_datx_s cn73xx;
+	struct cvmx_dtx_usbdrdx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_usbdrdx_datx cvmx_dtx_usbdrdx_datx_t;
+
+/**
+ * cvmx_dtx_usbdrd#_ena#
+ */
+union cvmx_dtx_usbdrdx_enax {
+	u64 u64;
+	struct cvmx_dtx_usbdrdx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_usbdrdx_enax_s cn70xx;
+	struct cvmx_dtx_usbdrdx_enax_s cn70xxp1;
+	struct cvmx_dtx_usbdrdx_enax_s cn73xx;
+	struct cvmx_dtx_usbdrdx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_usbdrdx_enax cvmx_dtx_usbdrdx_enax_t;
+
+/**
+ * cvmx_dtx_usbdrd#_sel#
+ */
+union cvmx_dtx_usbdrdx_selx {
+	u64 u64;
+	struct cvmx_dtx_usbdrdx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_usbdrdx_selx_s cn70xx;
+	struct cvmx_dtx_usbdrdx_selx_s cn70xxp1;
+	struct cvmx_dtx_usbdrdx_selx_s cn73xx;
+	struct cvmx_dtx_usbdrdx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_usbdrdx_selx cvmx_dtx_usbdrdx_selx_t;
+
+/**
+ * cvmx_dtx_usbh#_bcst_rsp
+ */
+union cvmx_dtx_usbhx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_usbhx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_usbhx_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_usbhx_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_usbhx_bcst_rsp cvmx_dtx_usbhx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_usbh#_ctl
+ */
+union cvmx_dtx_usbhx_ctl {
+	u64 u64;
+	struct cvmx_dtx_usbhx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_usbhx_ctl_s cn78xx;
+	struct cvmx_dtx_usbhx_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_usbhx_ctl cvmx_dtx_usbhx_ctl_t;
+
+/**
+ * cvmx_dtx_usbh#_dat#
+ */
+union cvmx_dtx_usbhx_datx {
+	u64 u64;
+	struct cvmx_dtx_usbhx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_usbhx_datx_s cn78xx;
+	struct cvmx_dtx_usbhx_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_usbhx_datx cvmx_dtx_usbhx_datx_t;
+
+/**
+ * cvmx_dtx_usbh#_ena#
+ */
+union cvmx_dtx_usbhx_enax {
+	u64 u64;
+	struct cvmx_dtx_usbhx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_usbhx_enax_s cn78xx;
+	struct cvmx_dtx_usbhx_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_usbhx_enax cvmx_dtx_usbhx_enax_t;
+
+/**
+ * cvmx_dtx_usbh#_sel#
+ */
+union cvmx_dtx_usbhx_selx {
+	u64 u64;
+	struct cvmx_dtx_usbhx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_usbhx_selx_s cn78xx;
+	struct cvmx_dtx_usbhx_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_usbhx_selx cvmx_dtx_usbhx_selx_t;
+
+/**
+ * cvmx_dtx_vdec_bcst_rsp
+ */
+union cvmx_dtx_vdec_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_vdec_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_vdec_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_vdec_bcst_rsp cvmx_dtx_vdec_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_vdec_ctl
+ */
+union cvmx_dtx_vdec_ctl {
+	u64 u64;
+	struct cvmx_dtx_vdec_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_vdec_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_vdec_ctl cvmx_dtx_vdec_ctl_t;
+
+/**
+ * cvmx_dtx_vdec_dat#
+ */
+union cvmx_dtx_vdec_datx {
+	u64 u64;
+	struct cvmx_dtx_vdec_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_vdec_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_vdec_datx cvmx_dtx_vdec_datx_t;
+
+/**
+ * cvmx_dtx_vdec_ena#
+ */
+union cvmx_dtx_vdec_enax {
+	u64 u64;
+	struct cvmx_dtx_vdec_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_vdec_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_vdec_enax cvmx_dtx_vdec_enax_t;
+
+/**
+ * cvmx_dtx_vdec_sel#
+ */
+union cvmx_dtx_vdec_selx {
+	u64 u64;
+	struct cvmx_dtx_vdec_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_vdec_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_vdec_selx cvmx_dtx_vdec_selx_t;
+
+/**
+ * cvmx_dtx_wpse_bcst_rsp
+ */
+union cvmx_dtx_wpse_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_wpse_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_wpse_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wpse_bcst_rsp cvmx_dtx_wpse_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_wpse_ctl
+ */
+union cvmx_dtx_wpse_ctl {
+	u64 u64;
+	struct cvmx_dtx_wpse_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_wpse_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wpse_ctl cvmx_dtx_wpse_ctl_t;
+
+/**
+ * cvmx_dtx_wpse_dat#
+ */
+union cvmx_dtx_wpse_datx {
+	u64 u64;
+	struct cvmx_dtx_wpse_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_wpse_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wpse_datx cvmx_dtx_wpse_datx_t;
+
+/**
+ * cvmx_dtx_wpse_ena#
+ */
+union cvmx_dtx_wpse_enax {
+	u64 u64;
+	struct cvmx_dtx_wpse_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_wpse_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wpse_enax cvmx_dtx_wpse_enax_t;
+
+/**
+ * cvmx_dtx_wpse_sel#
+ */
+union cvmx_dtx_wpse_selx {
+	u64 u64;
+	struct cvmx_dtx_wpse_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_wpse_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wpse_selx cvmx_dtx_wpse_selx_t;
+
+/**
+ * cvmx_dtx_wrce_bcst_rsp
+ */
+union cvmx_dtx_wrce_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_wrce_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_wrce_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrce_bcst_rsp cvmx_dtx_wrce_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_wrce_ctl
+ */
+union cvmx_dtx_wrce_ctl {
+	u64 u64;
+	struct cvmx_dtx_wrce_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_wrce_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrce_ctl cvmx_dtx_wrce_ctl_t;
+
+/**
+ * cvmx_dtx_wrce_dat#
+ */
+union cvmx_dtx_wrce_datx {
+	u64 u64;
+	struct cvmx_dtx_wrce_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_wrce_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrce_datx cvmx_dtx_wrce_datx_t;
+
+/**
+ * cvmx_dtx_wrce_ena#
+ */
+union cvmx_dtx_wrce_enax {
+	u64 u64;
+	struct cvmx_dtx_wrce_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_wrce_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrce_enax cvmx_dtx_wrce_enax_t;
+
+/**
+ * cvmx_dtx_wrce_sel#
+ */
+union cvmx_dtx_wrce_selx {
+	u64 u64;
+	struct cvmx_dtx_wrce_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_wrce_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrce_selx cvmx_dtx_wrce_selx_t;
+
+/**
+ * cvmx_dtx_wrde_bcst_rsp
+ */
+union cvmx_dtx_wrde_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_wrde_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_wrde_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrde_bcst_rsp cvmx_dtx_wrde_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_wrde_ctl
+ */
+union cvmx_dtx_wrde_ctl {
+	u64 u64;
+	struct cvmx_dtx_wrde_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_wrde_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrde_ctl cvmx_dtx_wrde_ctl_t;
+
+/**
+ * cvmx_dtx_wrde_dat#
+ */
+union cvmx_dtx_wrde_datx {
+	u64 u64;
+	struct cvmx_dtx_wrde_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_wrde_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrde_datx cvmx_dtx_wrde_datx_t;
+
+/**
+ * cvmx_dtx_wrde_ena#
+ */
+union cvmx_dtx_wrde_enax {
+	u64 u64;
+	struct cvmx_dtx_wrde_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_wrde_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrde_enax cvmx_dtx_wrde_enax_t;
+
+/**
+ * cvmx_dtx_wrde_sel#
+ */
+union cvmx_dtx_wrde_selx {
+	u64 u64;
+	struct cvmx_dtx_wrde_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_wrde_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrde_selx cvmx_dtx_wrde_selx_t;
+
+/**
+ * cvmx_dtx_wrse_bcst_rsp
+ */
+union cvmx_dtx_wrse_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_wrse_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_wrse_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrse_bcst_rsp cvmx_dtx_wrse_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_wrse_ctl
+ */
+union cvmx_dtx_wrse_ctl {
+	u64 u64;
+	struct cvmx_dtx_wrse_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_wrse_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrse_ctl cvmx_dtx_wrse_ctl_t;
+
+/**
+ * cvmx_dtx_wrse_dat#
+ */
+union cvmx_dtx_wrse_datx {
+	u64 u64;
+	struct cvmx_dtx_wrse_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_wrse_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrse_datx cvmx_dtx_wrse_datx_t;
+
+/**
+ * cvmx_dtx_wrse_ena#
+ */
+union cvmx_dtx_wrse_enax {
+	u64 u64;
+	struct cvmx_dtx_wrse_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_wrse_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrse_enax cvmx_dtx_wrse_enax_t;
+
+/**
+ * cvmx_dtx_wrse_sel#
+ */
+union cvmx_dtx_wrse_selx {
+	u64 u64;
+	struct cvmx_dtx_wrse_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_wrse_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wrse_selx cvmx_dtx_wrse_selx_t;
+
+/**
+ * cvmx_dtx_wtxe_bcst_rsp
+ */
+union cvmx_dtx_wtxe_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_wtxe_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_wtxe_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wtxe_bcst_rsp cvmx_dtx_wtxe_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_wtxe_ctl
+ */
+union cvmx_dtx_wtxe_ctl {
+	u64 u64;
+	struct cvmx_dtx_wtxe_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_wtxe_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wtxe_ctl cvmx_dtx_wtxe_ctl_t;
+
+/**
+ * cvmx_dtx_wtxe_dat#
+ */
+union cvmx_dtx_wtxe_datx {
+	u64 u64;
+	struct cvmx_dtx_wtxe_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_wtxe_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wtxe_datx cvmx_dtx_wtxe_datx_t;
+
+/**
+ * cvmx_dtx_wtxe_ena#
+ */
+union cvmx_dtx_wtxe_enax {
+	u64 u64;
+	struct cvmx_dtx_wtxe_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_wtxe_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wtxe_enax cvmx_dtx_wtxe_enax_t;
+
+/**
+ * cvmx_dtx_wtxe_sel#
+ */
+union cvmx_dtx_wtxe_selx {
+	u64 u64;
+	struct cvmx_dtx_wtxe_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_wtxe_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_wtxe_selx cvmx_dtx_wtxe_selx_t;
+
+/**
+ * cvmx_dtx_xcv_bcst_rsp
+ */
+union cvmx_dtx_xcv_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_xcv_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_xcv_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_xcv_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_xcv_bcst_rsp cvmx_dtx_xcv_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_xcv_ctl
+ */
+union cvmx_dtx_xcv_ctl {
+	u64 u64;
+	struct cvmx_dtx_xcv_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_xcv_ctl_s cn73xx;
+	struct cvmx_dtx_xcv_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_xcv_ctl cvmx_dtx_xcv_ctl_t;
+
+/**
+ * cvmx_dtx_xcv_dat#
+ */
+union cvmx_dtx_xcv_datx {
+	u64 u64;
+	struct cvmx_dtx_xcv_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_xcv_datx_s cn73xx;
+	struct cvmx_dtx_xcv_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_xcv_datx cvmx_dtx_xcv_datx_t;
+
+/**
+ * cvmx_dtx_xcv_ena#
+ */
+union cvmx_dtx_xcv_enax {
+	u64 u64;
+	struct cvmx_dtx_xcv_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_xcv_enax_s cn73xx;
+	struct cvmx_dtx_xcv_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_xcv_enax cvmx_dtx_xcv_enax_t;
+
+/**
+ * cvmx_dtx_xcv_sel#
+ */
+union cvmx_dtx_xcv_selx {
+	u64 u64;
+	struct cvmx_dtx_xcv_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_xcv_selx_s cn73xx;
+	struct cvmx_dtx_xcv_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_xcv_selx cvmx_dtx_xcv_selx_t;
+
+/**
+ * cvmx_dtx_xsx_bcst_rsp
+ */
+union cvmx_dtx_xsx_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_xsx_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_xsx_bcst_rsp_s cnf75xx;
+};
+
+typedef union cvmx_dtx_xsx_bcst_rsp cvmx_dtx_xsx_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_xsx_ctl
+ */
+union cvmx_dtx_xsx_ctl {
+	u64 u64;
+	struct cvmx_dtx_xsx_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_xsx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_dtx_xsx_ctl cvmx_dtx_xsx_ctl_t;
+
+/**
+ * cvmx_dtx_xsx_dat#
+ */
+union cvmx_dtx_xsx_datx {
+	u64 u64;
+	struct cvmx_dtx_xsx_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_xsx_datx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_xsx_datx cvmx_dtx_xsx_datx_t;
+
+/**
+ * cvmx_dtx_xsx_ena#
+ */
+union cvmx_dtx_xsx_enax {
+	u64 u64;
+	struct cvmx_dtx_xsx_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_xsx_enax_s cnf75xx;
+};
+
+typedef union cvmx_dtx_xsx_enax cvmx_dtx_xsx_enax_t;
+
+/**
+ * cvmx_dtx_xsx_sel#
+ */
+union cvmx_dtx_xsx_selx {
+	u64 u64;
+	struct cvmx_dtx_xsx_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_xsx_selx_s cnf75xx;
+};
+
+typedef union cvmx_dtx_xsx_selx cvmx_dtx_xsx_selx_t;
+
+/**
+ * cvmx_dtx_zip_bcst_rsp
+ */
+union cvmx_dtx_zip_bcst_rsp {
+	u64 u64;
+	struct cvmx_dtx_zip_bcst_rsp_s {
+		u64 reserved_1_63 : 63;
+		u64 ena : 1;
+	} s;
+	struct cvmx_dtx_zip_bcst_rsp_s cn73xx;
+	struct cvmx_dtx_zip_bcst_rsp_s cn78xx;
+	struct cvmx_dtx_zip_bcst_rsp_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_zip_bcst_rsp cvmx_dtx_zip_bcst_rsp_t;
+
+/**
+ * cvmx_dtx_zip_ctl
+ */
+union cvmx_dtx_zip_ctl {
+	u64 u64;
+	struct cvmx_dtx_zip_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 active : 1;
+		u64 reserved_2_3 : 2;
+		u64 echoen : 1;
+		u64 swap : 1;
+	} s;
+	struct cvmx_dtx_zip_ctl_s cn73xx;
+	struct cvmx_dtx_zip_ctl_s cn78xx;
+	struct cvmx_dtx_zip_ctl_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_zip_ctl cvmx_dtx_zip_ctl_t;
+
+/**
+ * cvmx_dtx_zip_dat#
+ */
+union cvmx_dtx_zip_datx {
+	u64 u64;
+	struct cvmx_dtx_zip_datx_s {
+		u64 reserved_36_63 : 28;
+		u64 raw : 36;
+	} s;
+	struct cvmx_dtx_zip_datx_s cn73xx;
+	struct cvmx_dtx_zip_datx_s cn78xx;
+	struct cvmx_dtx_zip_datx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_zip_datx cvmx_dtx_zip_datx_t;
+
+/**
+ * cvmx_dtx_zip_ena#
+ */
+union cvmx_dtx_zip_enax {
+	u64 u64;
+	struct cvmx_dtx_zip_enax_s {
+		u64 reserved_36_63 : 28;
+		u64 ena : 36;
+	} s;
+	struct cvmx_dtx_zip_enax_s cn73xx;
+	struct cvmx_dtx_zip_enax_s cn78xx;
+	struct cvmx_dtx_zip_enax_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_zip_enax cvmx_dtx_zip_enax_t;
+
+/**
+ * cvmx_dtx_zip_sel#
+ */
+union cvmx_dtx_zip_selx {
+	u64 u64;
+	struct cvmx_dtx_zip_selx_s {
+		u64 reserved_24_63 : 40;
+		u64 value : 24;
+	} s;
+	struct cvmx_dtx_zip_selx_s cn73xx;
+	struct cvmx_dtx_zip_selx_s cn78xx;
+	struct cvmx_dtx_zip_selx_s cn78xxp1;
+};
+
+typedef union cvmx_dtx_zip_selx cvmx_dtx_zip_selx_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-error.h b/arch/mips/mach-octeon/include/mach/cvmx-error.h
new file mode 100644
index 0000000..9a13ed4
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-error.h
@@ -0,0 +1,456 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the Octeon extended error status.
+ */
+
+#ifndef __CVMX_ERROR_H__
+#define __CVMX_ERROR_H__
+
+/**
+ * There are generally many error status bits associated with a
+ * single logical group. The enumeration below is used to
+ * communicate high level groups to the error infastructure so
+ * error status bits can be enable or disabled in large groups.
+ */
+typedef enum {
+	CVMX_ERROR_GROUP_INTERNAL,
+	CVMX_ERROR_GROUP_L2C,
+	CVMX_ERROR_GROUP_ETHERNET,
+	CVMX_ERROR_GROUP_MGMT_PORT,
+	CVMX_ERROR_GROUP_PCI,
+	CVMX_ERROR_GROUP_SRIO,
+	CVMX_ERROR_GROUP_USB,
+	CVMX_ERROR_GROUP_LMC,
+	CVMX_ERROR_GROUP_ILK,
+	CVMX_ERROR_GROUP_DFM,
+	CVMX_ERROR_GROUP_ILA,
+} cvmx_error_group_t;
+
+/**
+ * Flags representing special handling for some error registers.
+ * These flags are passed to cvmx_error_initialize() to control
+ * the handling of bits where the same flags were passed to the
+ * added cvmx_error_info_t.
+ */
+typedef enum {
+	CVMX_ERROR_TYPE_NONE = 0,
+	CVMX_ERROR_TYPE_SBE = 1 << 0,
+	CVMX_ERROR_TYPE_DBE = 1 << 1,
+} cvmx_error_type_t;
+
+/**
+ * When registering for interest in an error status register, the
+ * type of the register needs to be known by cvmx-error. Most
+ * registers are either IO64 or IO32, but some blocks contain
+ * registers that can't be directly accessed. A good example of
+ * would be PCIe extended error state stored in config space.
+ */
+typedef enum {
+	__CVMX_ERROR_REGISTER_NONE,
+	CVMX_ERROR_REGISTER_IO64,
+	CVMX_ERROR_REGISTER_IO32,
+	CVMX_ERROR_REGISTER_PCICONFIG,
+	CVMX_ERROR_REGISTER_SRIOMAINT,
+} cvmx_error_register_t;
+
+struct cvmx_error_info;
+/**
+ * Error handling functions must have the following prototype.
+ */
+typedef int (*cvmx_error_func_t)(const struct cvmx_error_info *info);
+
+/**
+ * This structure is passed to all error handling functions.
+ */
+typedef struct cvmx_error_info {
+	cvmx_error_register_t reg_type;
+	u64 status_addr;
+	u64 status_mask;
+	u64 enable_addr;
+	u64 enable_mask;
+	cvmx_error_type_t flags;
+	cvmx_error_group_t group;
+	int group_index;
+	cvmx_error_func_t func;
+	u64 user_info;
+	struct {
+		cvmx_error_register_t reg_type;
+		u64 status_addr;
+		u64 status_mask;
+	} parent;
+} cvmx_error_info_t;
+
+/**
+ * Initialize the error status system. This should be called once
+ * before any other functions are called. This function adds default
+ * handlers for most all error events but does not enable them. Later
+ * calls to cvmx_error_enable() are needed.
+ *
+ * @param flags  Optional flags.
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_error_initialize(void);
+
+/**
+ * Poll the error status registers and call the appropriate error
+ * handlers. This should be called in the RSL interrupt handler
+ * for your application or operating system.
+ *
+ * @return Number of error handlers called. Zero means this call
+ *         found no errors and was spurious.
+ */
+int cvmx_error_poll(void);
+
+/**
+ * Register to be called when an error status bit is set. Most users
+ * will not need to call this function as cvmx_error_initialize()
+ * registers default handlers for most error conditions. This function
+ * is normally used to add more handlers without changing the existing
+ * handlers.
+ *
+ * @param new_info Information about the handler for a error register. The
+ *                 structure passed is copied and can be destroyed after the
+ *                 call. All members of the structure must be populated, even the
+ *                 parent information.
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_error_add(const cvmx_error_info_t *new_info);
+
+/**
+ * Remove all handlers for a status register and mask. Normally
+ * this function should not be called. Instead a new handler should be
+ * installed to replace the existing handler. In the even that all
+ * reporting of a error bit should be removed, then use this
+ * function.
+ *
+ * @param reg_type Type of the status register to remove
+ * @param status_addr
+ *                 Status register to remove.
+ * @param status_mask
+ *                 All handlers for this status register with this mask will be
+ *                 removed.
+ * @param old_info If not NULL, this is filled with information about the handler
+ *                 that was removed.
+ *
+ * @return Zero on success, negative on failure (not found).
+ */
+int cvmx_error_remove(cvmx_error_register_t reg_type, u64 status_addr, u64 status_mask,
+		      cvmx_error_info_t *old_info);
+
+/**
+ * Change the function and user_info for an existing error status
+ * register. This function should be used to replace the default
+ * handler with an application specific version as needed.
+ *
+ * @param reg_type Type of the status register to change
+ * @param status_addr
+ *                 Status register to change.
+ * @param status_mask
+ *                 All handlers for this status register with this mask will be
+ *                 changed.
+ * @param new_func New function to use to handle the error status
+ * @param new_user_info
+ *                 New user info parameter for the function
+ * @param old_func If not NULL, the old function is returned. Useful for restoring
+ *                 the old handler.
+ * @param old_user_info
+ *                 If not NULL, the old user info parameter.
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_error_change_handler(cvmx_error_register_t reg_type, u64 status_addr, u64 status_mask,
+			      cvmx_error_func_t new_func, u64 new_user_info,
+			      cvmx_error_func_t *old_func, u64 *old_user_info);
+
+/**
+ * Enable all error registers for a logical group. This should be
+ * called whenever a logical group is brought online.
+ *
+ * @param group  Logical group to enable
+ * @param group_index
+ *               Index for the group as defined in the cvmx_error_group_t
+ *               comments.
+ *
+ * @return Zero on success, negative on failure.
+ */
+/*
+ * Rather than conditionalize the calls throughout the executive to not enable
+ * interrupts in Uboot, simply make the enable function do nothing
+ */
+static inline int cvmx_error_enable_group(cvmx_error_group_t group, int group_index)
+{
+	return 0;
+}
+
+/**
+ * Disable all error registers for a logical group. This should be
+ * called whenever a logical group is brought offline. Many blocks
+ * will report spurious errors when offline unless this function
+ * is called.
+ *
+ * @param group  Logical group to disable
+ * @param group_index
+ *               Index for the group as defined in the cvmx_error_group_t
+ *               comments.
+ *
+ * @return Zero on success, negative on failure.
+ */
+/*
+ * Rather than conditionalize the calls throughout the executive to not disable
+ * interrupts in Uboot, simply make the enable function do nothing
+ */
+static inline int cvmx_error_disable_group(cvmx_error_group_t group, int group_index)
+{
+	return 0;
+}
+
+/**
+ * Enable all handlers for a specific status register mask.
+ *
+ * @param reg_type Type of the status register
+ * @param status_addr
+ *                 Status register address
+ * @param status_mask
+ *                 All handlers for this status register with this mask will be
+ *                 enabled.
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_error_enable(cvmx_error_register_t reg_type, u64 status_addr, u64 status_mask);
+
+/**
+ * Disable all handlers for a specific status register and mask.
+ *
+ * @param reg_type Type of the status register
+ * @param status_addr
+ *                 Status register address
+ * @param status_mask
+ *                 All handlers for this status register with this mask will be
+ *                 disabled.
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_error_disable(cvmx_error_register_t reg_type, u64 status_addr, u64 status_mask);
+
+/**
+ * @INTERNAL
+ * Function for processing non leaf error status registers. This function
+ * calls all handlers for this passed register and all children linked
+ * to it.
+ *
+ * @param info   Error register to check
+ *
+ * @return Number of error status bits found or zero if no bits were set.
+ */
+int __cvmx_error_decode(const cvmx_error_info_t *info);
+
+/**
+ * @INTERNAL
+ * This error bit handler simply prints a message and clears the status bit
+ *
+ * @param info   Error register to check
+ *
+ * @return
+ */
+int __cvmx_error_display(const cvmx_error_info_t *info);
+
+/**
+ * Find the handler for a specific status register and mask
+ *
+ * @param status_addr
+ *                Status register address
+ *
+ * @return  Return the handler on success or null on failure.
+ */
+cvmx_error_info_t *cvmx_error_get_index(u64 status_addr);
+
+void __cvmx_install_gmx_error_handler_for_xaui(void);
+
+/**
+ * 78xx related
+ */
+/**
+ * Compare two INTSN values.
+ *
+ * @param key INTSN value to search for
+ * @param data current entry from the searched array
+ *
+ * @return Negative, 0 or positive when respectively key is less than,
+ *		equal or greater than data.
+ */
+int cvmx_error_intsn_cmp(const void *key, const void *data);
+
+/**
+ * @INTERNAL
+ *
+ * @param intsn   Interrupt source number to display
+ *
+ * @param node Node number
+ *
+ * @return Zero on success, -1 on error
+ */
+int cvmx_error_intsn_display_v3(int node, u32 intsn);
+
+/**
+ * Initialize the error status system for cn78xx. This should be called once
+ * before any other functions are called. This function enables the interrupts
+ * described in the array.
+ *
+ * @param node Node number
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_error_initialize_cn78xx(int node);
+
+/**
+ * Enable interrupt for a specific INTSN.
+ *
+ * @param node Node number
+ * @param intsn Interrupt source number
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_error_intsn_enable_v3(int node, u32 intsn);
+
+/**
+ * Disable interrupt for a specific INTSN.
+ *
+ * @param node Node number
+ * @param intsn Interrupt source number
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_error_intsn_disable_v3(int node, u32 intsn);
+
+/**
+ * Clear interrupt for a specific INTSN.
+ *
+ * @param intsn Interrupt source number
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_error_intsn_clear_v3(int node, u32 intsn);
+
+/**
+ * Enable interrupts for a specific CSR(all the bits/intsn in the csr).
+ *
+ * @param node Node number
+ * @param csr_address CSR address
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_error_csr_enable_v3(int node, u64 csr_address);
+
+/**
+ * Disable interrupts for a specific CSR (all the bits/intsn in the csr).
+ *
+ * @param node Node number
+ * @param csr_address CSR address
+ *
+ * @return Zero
+ */
+int cvmx_error_csr_disable_v3(int node, u64 csr_address);
+
+/**
+ * Enable all error registers for a logical group. This should be
+ * called whenever a logical group is brought online.
+ *
+ * @param group  Logical group to enable
+ * @param xipd_port  The IPD port value
+ *
+ * @return Zero.
+ */
+int cvmx_error_enable_group_v3(cvmx_error_group_t group, int xipd_port);
+
+/**
+ * Disable all error registers for a logical group.
+ *
+ * @param group  Logical group to enable
+ * @param xipd_port  The IPD port value
+ *
+ * @return Zero.
+ */
+int cvmx_error_disable_group_v3(cvmx_error_group_t group, int xipd_port);
+
+/**
+ * Enable all error registers for a specific category in a logical group.
+ * This should be called whenever a logical group is brought online.
+ *
+ * @param group  Logical group to enable
+ * @param type   Category in a logical group to enable
+ * @param xipd_port  The IPD port value
+ *
+ * @return Zero.
+ */
+int cvmx_error_enable_group_type_v3(cvmx_error_group_t group, cvmx_error_type_t type,
+				    int xipd_port);
+
+/**
+ * Disable all error registers for a specific category in a logical group.
+ * This should be called whenever a logical group is brought online.
+ *
+ * @param group  Logical group to disable
+ * @param type   Category in a logical group to disable
+ * @param xipd_port  The IPD port value
+ *
+ * @return Zero.
+ */
+int cvmx_error_disable_group_type_v3(cvmx_error_group_t group, cvmx_error_type_t type,
+				     int xipd_port);
+
+/**
+ * Clear all error registers for a logical group.
+ *
+ * @param group  Logical group to disable
+ * @param xipd_port  The IPD port value
+ *
+ * @return Zero.
+ */
+int cvmx_error_clear_group_v3(cvmx_error_group_t group, int xipd_port);
+
+/**
+ * Enable all error registers for a particular category.
+ *
+ * @param node  CCPI node
+ * @param type  category to enable
+ *
+ *@return Zero.
+ */
+int cvmx_error_enable_type_v3(int node, cvmx_error_type_t type);
+
+/**
+ * Disable all error registers for a particular category.
+ *
+ * @param node  CCPI node
+ * @param type  category to disable
+ *
+ *@return Zero.
+ */
+int cvmx_error_disable_type_v3(int node, cvmx_error_type_t type);
+
+void cvmx_octeon_hang(void) __attribute__((__noreturn__));
+
+/**
+ * @INTERNAL
+ *
+ * Process L2C single and multi-bit ECC errors
+ *
+ */
+int __cvmx_cn7xxx_l2c_l2d_ecc_error_display(int node, int intsn);
+
+/**
+ * Handle L2 cache TAG ECC errors and noway errors
+ *
+ * @param	CCPI node
+ * @param	intsn	intsn from error array.
+ * @param	remote	true for remote node (cn78xx only)
+ *
+ * @return	1 if handled, 0 if not handled
+ */
+int __cvmx_cn7xxx_l2c_tag_error_display(int node, int intsn, bool remote);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-fpa-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-fpa-defs.h
new file mode 100644
index 0000000..13ce7d8
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-fpa-defs.h
@@ -0,0 +1,1866 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon fpa.
+ */
+
+#ifndef __CVMX_FPA_DEFS_H__
+#define __CVMX_FPA_DEFS_H__
+
+#define CVMX_FPA_ADDR_RANGE_ERROR CVMX_FPA_ADDR_RANGE_ERROR_FUNC()
+static inline u64 CVMX_FPA_ADDR_RANGE_ERROR_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180028000458ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001280000000458ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001280000000458ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001280000000458ull;
+	}
+	return 0x0001280000000458ull;
+}
+
+#define CVMX_FPA_AURAX_CFG(offset)	     (0x0001280020100000ull + ((offset) & 1023) * 8)
+#define CVMX_FPA_AURAX_CNT(offset)	     (0x0001280020200000ull + ((offset) & 1023) * 8)
+#define CVMX_FPA_AURAX_CNT_ADD(offset)	     (0x0001280020300000ull + ((offset) & 1023) * 8)
+#define CVMX_FPA_AURAX_CNT_LEVELS(offset)    (0x0001280020800000ull + ((offset) & 1023) * 8)
+#define CVMX_FPA_AURAX_CNT_LIMIT(offset)     (0x0001280020400000ull + ((offset) & 1023) * 8)
+#define CVMX_FPA_AURAX_CNT_THRESHOLD(offset) (0x0001280020500000ull + ((offset) & 1023) * 8)
+#define CVMX_FPA_AURAX_INT(offset)	     (0x0001280020600000ull + ((offset) & 1023) * 8)
+#define CVMX_FPA_AURAX_POOL(offset)	     (0x0001280020000000ull + ((offset) & 1023) * 8)
+#define CVMX_FPA_AURAX_POOL_LEVELS(offset)   (0x0001280020700000ull + ((offset) & 1023) * 8)
+#define CVMX_FPA_BIST_STATUS		     CVMX_FPA_BIST_STATUS_FUNC()
+static inline u64 CVMX_FPA_BIST_STATUS_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800280000E8ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00012800000000E8ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00012800000000E8ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00012800000000E8ull;
+	}
+	return 0x00012800000000E8ull;
+}
+
+#ifndef CVMX_FPA_CLK_COUNT // test-only (also in octeon_ddr.h)
+#define CVMX_FPA_CLK_COUNT (0x00012800000000F0ull)
+#endif
+#define CVMX_FPA_CTL_STATUS		 (0x0001180028000050ull)
+#define CVMX_FPA_ECC_CTL		 (0x0001280000000058ull)
+#define CVMX_FPA_ECC_INT		 (0x0001280000000068ull)
+#define CVMX_FPA_ERR_INT		 (0x0001280000000040ull)
+#define CVMX_FPA_FPF0_MARKS		 (0x0001180028000000ull)
+#define CVMX_FPA_FPF0_SIZE		 (0x0001180028000058ull)
+#define CVMX_FPA_FPF1_MARKS		 CVMX_FPA_FPFX_MARKS(1)
+#define CVMX_FPA_FPF2_MARKS		 CVMX_FPA_FPFX_MARKS(2)
+#define CVMX_FPA_FPF3_MARKS		 CVMX_FPA_FPFX_MARKS(3)
+#define CVMX_FPA_FPF4_MARKS		 CVMX_FPA_FPFX_MARKS(4)
+#define CVMX_FPA_FPF5_MARKS		 CVMX_FPA_FPFX_MARKS(5)
+#define CVMX_FPA_FPF6_MARKS		 CVMX_FPA_FPFX_MARKS(6)
+#define CVMX_FPA_FPF7_MARKS		 CVMX_FPA_FPFX_MARKS(7)
+#define CVMX_FPA_FPF8_MARKS		 (0x0001180028000240ull)
+#define CVMX_FPA_FPF8_SIZE		 (0x0001180028000248ull)
+#define CVMX_FPA_FPFX_MARKS(offset)	 (0x0001180028000008ull + ((offset) & 7) * 8 - 8 * 1)
+#define CVMX_FPA_FPFX_SIZE(offset)	 (0x0001180028000060ull + ((offset) & 7) * 8 - 8 * 1)
+#define CVMX_FPA_GEN_CFG		 (0x0001280000000050ull)
+#define CVMX_FPA_INT_ENB		 (0x0001180028000048ull)
+#define CVMX_FPA_INT_SUM		 (0x0001180028000040ull)
+#define CVMX_FPA_PACKET_THRESHOLD	 (0x0001180028000460ull)
+#define CVMX_FPA_POOLX_AVAILABLE(offset) (0x0001280010300000ull + ((offset) & 63) * 8)
+#define CVMX_FPA_POOLX_CFG(offset)	 (0x0001280010000000ull + ((offset) & 63) * 8)
+static inline u64 CVMX_FPA_POOLX_END_ADDR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180028000358ull + (offset) * 8;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180028000358ull + (offset) * 8;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001280010600000ull + (offset) * 8;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001280010600000ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001280010600000ull + (offset) * 8;
+	}
+	return 0x0001280010600000ull + (offset) * 8;
+}
+
+#define CVMX_FPA_POOLX_FPF_MARKS(offset)  (0x0001280010100000ull + ((offset) & 63) * 8)
+#define CVMX_FPA_POOLX_INT(offset)	  (0x0001280010A00000ull + ((offset) & 63) * 8)
+#define CVMX_FPA_POOLX_OP_PC(offset)	  (0x0001280010F00000ull + ((offset) & 63) * 8)
+#define CVMX_FPA_POOLX_STACK_ADDR(offset) (0x0001280010900000ull + ((offset) & 63) * 8)
+#define CVMX_FPA_POOLX_STACK_BASE(offset) (0x0001280010700000ull + ((offset) & 63) * 8)
+#define CVMX_FPA_POOLX_STACK_END(offset)  (0x0001280010800000ull + ((offset) & 63) * 8)
+static inline u64 CVMX_FPA_POOLX_START_ADDR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180028000258ull + (offset) * 8;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180028000258ull + (offset) * 8;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001280010500000ull + (offset) * 8;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001280010500000ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001280010500000ull + (offset) * 8;
+	}
+	return 0x0001280010500000ull + (offset) * 8;
+}
+
+static inline u64 CVMX_FPA_POOLX_THRESHOLD(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180028000140ull + (offset) * 8;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180028000140ull + (offset) * 8;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001280010400000ull + (offset) * 8;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001280010400000ull + (offset) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001280010400000ull + (offset) * 8;
+	}
+	return 0x0001280010400000ull + (offset) * 8;
+}
+
+#define CVMX_FPA_QUE0_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(0)
+#define CVMX_FPA_QUE1_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(1)
+#define CVMX_FPA_QUE2_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(2)
+#define CVMX_FPA_QUE3_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(3)
+#define CVMX_FPA_QUE4_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(4)
+#define CVMX_FPA_QUE5_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(5)
+#define CVMX_FPA_QUE6_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(6)
+#define CVMX_FPA_QUE7_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(7)
+#define CVMX_FPA_QUE8_PAGE_INDEX	 (0x0001180028000250ull)
+#define CVMX_FPA_QUEX_AVAILABLE(offset)	 (0x0001180028000098ull + ((offset) & 15) * 8)
+#define CVMX_FPA_QUEX_PAGE_INDEX(offset) (0x00011800280000F0ull + ((offset) & 7) * 8)
+#define CVMX_FPA_QUE_ACT		 (0x0001180028000138ull)
+#define CVMX_FPA_QUE_EXP		 (0x0001180028000130ull)
+#define CVMX_FPA_RD_LATENCY_PC		 (0x0001280000000610ull)
+#define CVMX_FPA_RD_REQ_PC		 (0x0001280000000600ull)
+#define CVMX_FPA_RED_DELAY		 (0x0001280000000100ull)
+#define CVMX_FPA_SFT_RST		 (0x0001280000000000ull)
+#define CVMX_FPA_WART_CTL		 (0x00011800280000D8ull)
+#define CVMX_FPA_WART_STATUS		 (0x00011800280000E0ull)
+#define CVMX_FPA_WQE_THRESHOLD		 (0x0001180028000468ull)
+
+/**
+ * cvmx_fpa_addr_range_error
+ *
+ * When any FPA_POOL()_INT[RANGE] error occurs, this register is latched with additional
+ * error information.
+ */
+union cvmx_fpa_addr_range_error {
+	u64 u64;
+	struct cvmx_fpa_addr_range_error_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_fpa_addr_range_error_cn61xx {
+		u64 reserved_38_63 : 26;
+		u64 pool : 5;
+		u64 addr : 33;
+	} cn61xx;
+	struct cvmx_fpa_addr_range_error_cn61xx cn66xx;
+	struct cvmx_fpa_addr_range_error_cn61xx cn68xx;
+	struct cvmx_fpa_addr_range_error_cn61xx cn68xxp1;
+	struct cvmx_fpa_addr_range_error_cn61xx cn70xx;
+	struct cvmx_fpa_addr_range_error_cn61xx cn70xxp1;
+	struct cvmx_fpa_addr_range_error_cn73xx {
+		u64 reserved_54_63 : 10;
+		u64 pool : 6;
+		u64 reserved_42_47 : 6;
+		u64 addr : 42;
+	} cn73xx;
+	struct cvmx_fpa_addr_range_error_cn73xx cn78xx;
+	struct cvmx_fpa_addr_range_error_cn73xx cn78xxp1;
+	struct cvmx_fpa_addr_range_error_cn61xx cnf71xx;
+	struct cvmx_fpa_addr_range_error_cn73xx cnf75xx;
+};
+
+typedef union cvmx_fpa_addr_range_error cvmx_fpa_addr_range_error_t;
+
+/**
+ * cvmx_fpa_aura#_cfg
+ *
+ * This register configures aura backpressure, etc.
+ *
+ */
+union cvmx_fpa_aurax_cfg {
+	u64 u64;
+	struct cvmx_fpa_aurax_cfg_s {
+		u64 reserved_10_63 : 54;
+		u64 ptr_dis : 1;
+		u64 avg_con : 9;
+	} s;
+	struct cvmx_fpa_aurax_cfg_s cn73xx;
+	struct cvmx_fpa_aurax_cfg_s cn78xx;
+	struct cvmx_fpa_aurax_cfg_s cn78xxp1;
+	struct cvmx_fpa_aurax_cfg_s cnf75xx;
+};
+
+typedef union cvmx_fpa_aurax_cfg cvmx_fpa_aurax_cfg_t;
+
+/**
+ * cvmx_fpa_aura#_cnt
+ */
+union cvmx_fpa_aurax_cnt {
+	u64 u64;
+	struct cvmx_fpa_aurax_cnt_s {
+		u64 reserved_40_63 : 24;
+		u64 cnt : 40;
+	} s;
+	struct cvmx_fpa_aurax_cnt_s cn73xx;
+	struct cvmx_fpa_aurax_cnt_s cn78xx;
+	struct cvmx_fpa_aurax_cnt_s cn78xxp1;
+	struct cvmx_fpa_aurax_cnt_s cnf75xx;
+};
+
+typedef union cvmx_fpa_aurax_cnt cvmx_fpa_aurax_cnt_t;
+
+/**
+ * cvmx_fpa_aura#_cnt_add
+ */
+union cvmx_fpa_aurax_cnt_add {
+	u64 u64;
+	struct cvmx_fpa_aurax_cnt_add_s {
+		u64 reserved_40_63 : 24;
+		u64 cnt : 40;
+	} s;
+	struct cvmx_fpa_aurax_cnt_add_s cn73xx;
+	struct cvmx_fpa_aurax_cnt_add_s cn78xx;
+	struct cvmx_fpa_aurax_cnt_add_s cn78xxp1;
+	struct cvmx_fpa_aurax_cnt_add_s cnf75xx;
+};
+
+typedef union cvmx_fpa_aurax_cnt_add cvmx_fpa_aurax_cnt_add_t;
+
+/**
+ * cvmx_fpa_aura#_cnt_levels
+ */
+union cvmx_fpa_aurax_cnt_levels {
+	u64 u64;
+	struct cvmx_fpa_aurax_cnt_levels_s {
+		u64 reserved_41_63 : 23;
+		u64 drop_dis : 1;
+		u64 bp_ena : 1;
+		u64 red_ena : 1;
+		u64 shift : 6;
+		u64 bp : 8;
+		u64 drop : 8;
+		u64 pass : 8;
+		u64 level : 8;
+	} s;
+	struct cvmx_fpa_aurax_cnt_levels_s cn73xx;
+	struct cvmx_fpa_aurax_cnt_levels_s cn78xx;
+	struct cvmx_fpa_aurax_cnt_levels_s cn78xxp1;
+	struct cvmx_fpa_aurax_cnt_levels_s cnf75xx;
+};
+
+typedef union cvmx_fpa_aurax_cnt_levels cvmx_fpa_aurax_cnt_levels_t;
+
+/**
+ * cvmx_fpa_aura#_cnt_limit
+ */
+union cvmx_fpa_aurax_cnt_limit {
+	u64 u64;
+	struct cvmx_fpa_aurax_cnt_limit_s {
+		u64 reserved_40_63 : 24;
+		u64 limit : 40;
+	} s;
+	struct cvmx_fpa_aurax_cnt_limit_s cn73xx;
+	struct cvmx_fpa_aurax_cnt_limit_s cn78xx;
+	struct cvmx_fpa_aurax_cnt_limit_s cn78xxp1;
+	struct cvmx_fpa_aurax_cnt_limit_s cnf75xx;
+};
+
+typedef union cvmx_fpa_aurax_cnt_limit cvmx_fpa_aurax_cnt_limit_t;
+
+/**
+ * cvmx_fpa_aura#_cnt_threshold
+ */
+union cvmx_fpa_aurax_cnt_threshold {
+	u64 u64;
+	struct cvmx_fpa_aurax_cnt_threshold_s {
+		u64 reserved_40_63 : 24;
+		u64 thresh : 40;
+	} s;
+	struct cvmx_fpa_aurax_cnt_threshold_s cn73xx;
+	struct cvmx_fpa_aurax_cnt_threshold_s cn78xx;
+	struct cvmx_fpa_aurax_cnt_threshold_s cn78xxp1;
+	struct cvmx_fpa_aurax_cnt_threshold_s cnf75xx;
+};
+
+typedef union cvmx_fpa_aurax_cnt_threshold cvmx_fpa_aurax_cnt_threshold_t;
+
+/**
+ * cvmx_fpa_aura#_int
+ */
+union cvmx_fpa_aurax_int {
+	u64 u64;
+	struct cvmx_fpa_aurax_int_s {
+		u64 reserved_1_63 : 63;
+		u64 thresh : 1;
+	} s;
+	struct cvmx_fpa_aurax_int_s cn73xx;
+	struct cvmx_fpa_aurax_int_s cn78xx;
+	struct cvmx_fpa_aurax_int_s cn78xxp1;
+	struct cvmx_fpa_aurax_int_s cnf75xx;
+};
+
+typedef union cvmx_fpa_aurax_int cvmx_fpa_aurax_int_t;
+
+/**
+ * cvmx_fpa_aura#_pool
+ *
+ * Provides the mapping from each aura to the pool number.
+ *
+ */
+union cvmx_fpa_aurax_pool {
+	u64 u64;
+	struct cvmx_fpa_aurax_pool_s {
+		u64 reserved_6_63 : 58;
+		u64 pool : 6;
+	} s;
+	struct cvmx_fpa_aurax_pool_s cn73xx;
+	struct cvmx_fpa_aurax_pool_s cn78xx;
+	struct cvmx_fpa_aurax_pool_s cn78xxp1;
+	struct cvmx_fpa_aurax_pool_s cnf75xx;
+};
+
+typedef union cvmx_fpa_aurax_pool cvmx_fpa_aurax_pool_t;
+
+/**
+ * cvmx_fpa_aura#_pool_levels
+ */
+union cvmx_fpa_aurax_pool_levels {
+	u64 u64;
+	struct cvmx_fpa_aurax_pool_levels_s {
+		u64 reserved_41_63 : 23;
+		u64 drop_dis : 1;
+		u64 bp_ena : 1;
+		u64 red_ena : 1;
+		u64 shift : 6;
+		u64 bp : 8;
+		u64 drop : 8;
+		u64 pass : 8;
+		u64 level : 8;
+	} s;
+	struct cvmx_fpa_aurax_pool_levels_s cn73xx;
+	struct cvmx_fpa_aurax_pool_levels_s cn78xx;
+	struct cvmx_fpa_aurax_pool_levels_s cn78xxp1;
+	struct cvmx_fpa_aurax_pool_levels_s cnf75xx;
+};
+
+typedef union cvmx_fpa_aurax_pool_levels cvmx_fpa_aurax_pool_levels_t;
+
+/**
+ * cvmx_fpa_bist_status
+ *
+ * This register provides the result of the BIST run on the FPA memories.
+ *
+ */
+union cvmx_fpa_bist_status {
+	u64 u64;
+	struct cvmx_fpa_bist_status_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_fpa_bist_status_cn30xx {
+		u64 reserved_5_63 : 59;
+		u64 frd : 1;
+		u64 fpf0 : 1;
+		u64 fpf1 : 1;
+		u64 ffr : 1;
+		u64 fdr : 1;
+	} cn30xx;
+	struct cvmx_fpa_bist_status_cn30xx cn31xx;
+	struct cvmx_fpa_bist_status_cn30xx cn38xx;
+	struct cvmx_fpa_bist_status_cn30xx cn38xxp2;
+	struct cvmx_fpa_bist_status_cn30xx cn50xx;
+	struct cvmx_fpa_bist_status_cn30xx cn52xx;
+	struct cvmx_fpa_bist_status_cn30xx cn52xxp1;
+	struct cvmx_fpa_bist_status_cn30xx cn56xx;
+	struct cvmx_fpa_bist_status_cn30xx cn56xxp1;
+	struct cvmx_fpa_bist_status_cn30xx cn58xx;
+	struct cvmx_fpa_bist_status_cn30xx cn58xxp1;
+	struct cvmx_fpa_bist_status_cn30xx cn61xx;
+	struct cvmx_fpa_bist_status_cn30xx cn63xx;
+	struct cvmx_fpa_bist_status_cn30xx cn63xxp1;
+	struct cvmx_fpa_bist_status_cn30xx cn66xx;
+	struct cvmx_fpa_bist_status_cn30xx cn68xx;
+	struct cvmx_fpa_bist_status_cn30xx cn68xxp1;
+	struct cvmx_fpa_bist_status_cn30xx cn70xx;
+	struct cvmx_fpa_bist_status_cn30xx cn70xxp1;
+	struct cvmx_fpa_bist_status_cn73xx {
+		u64 reserved_38_63 : 26;
+		u64 status : 38;
+	} cn73xx;
+	struct cvmx_fpa_bist_status_cn73xx cn78xx;
+	struct cvmx_fpa_bist_status_cn73xx cn78xxp1;
+	struct cvmx_fpa_bist_status_cn30xx cnf71xx;
+	struct cvmx_fpa_bist_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_fpa_bist_status cvmx_fpa_bist_status_t;
+
+/**
+ * cvmx_fpa_clk_count
+ *
+ * This register counts the number of coprocessor-clock cycles since the deassertion of reset.
+ *
+ */
+union cvmx_fpa_clk_count {
+	u64 u64;
+	struct cvmx_fpa_clk_count_s {
+		u64 clk_cnt : 64;
+	} s;
+	struct cvmx_fpa_clk_count_s cn73xx;
+	struct cvmx_fpa_clk_count_s cn78xx;
+	struct cvmx_fpa_clk_count_s cn78xxp1;
+	struct cvmx_fpa_clk_count_s cnf75xx;
+};
+
+typedef union cvmx_fpa_clk_count cvmx_fpa_clk_count_t;
+
+/**
+ * cvmx_fpa_ctl_status
+ *
+ * The FPA's interrupt enable register.
+ *
+ */
+union cvmx_fpa_ctl_status {
+	u64 u64;
+	struct cvmx_fpa_ctl_status_s {
+		u64 reserved_21_63 : 43;
+		u64 free_en : 1;
+		u64 ret_off : 1;
+		u64 req_off : 1;
+		u64 reset : 1;
+		u64 use_ldt : 1;
+		u64 use_stt : 1;
+		u64 enb : 1;
+		u64 mem1_err : 7;
+		u64 mem0_err : 7;
+	} s;
+	struct cvmx_fpa_ctl_status_cn30xx {
+		u64 reserved_18_63 : 46;
+		u64 reset : 1;
+		u64 use_ldt : 1;
+		u64 use_stt : 1;
+		u64 enb : 1;
+		u64 mem1_err : 7;
+		u64 mem0_err : 7;
+	} cn30xx;
+	struct cvmx_fpa_ctl_status_cn30xx cn31xx;
+	struct cvmx_fpa_ctl_status_cn30xx cn38xx;
+	struct cvmx_fpa_ctl_status_cn30xx cn38xxp2;
+	struct cvmx_fpa_ctl_status_cn30xx cn50xx;
+	struct cvmx_fpa_ctl_status_cn30xx cn52xx;
+	struct cvmx_fpa_ctl_status_cn30xx cn52xxp1;
+	struct cvmx_fpa_ctl_status_cn30xx cn56xx;
+	struct cvmx_fpa_ctl_status_cn30xx cn56xxp1;
+	struct cvmx_fpa_ctl_status_cn30xx cn58xx;
+	struct cvmx_fpa_ctl_status_cn30xx cn58xxp1;
+	struct cvmx_fpa_ctl_status_s cn61xx;
+	struct cvmx_fpa_ctl_status_s cn63xx;
+	struct cvmx_fpa_ctl_status_cn30xx cn63xxp1;
+	struct cvmx_fpa_ctl_status_s cn66xx;
+	struct cvmx_fpa_ctl_status_s cn68xx;
+	struct cvmx_fpa_ctl_status_s cn68xxp1;
+	struct cvmx_fpa_ctl_status_s cn70xx;
+	struct cvmx_fpa_ctl_status_s cn70xxp1;
+	struct cvmx_fpa_ctl_status_s cnf71xx;
+};
+
+typedef union cvmx_fpa_ctl_status cvmx_fpa_ctl_status_t;
+
+/**
+ * cvmx_fpa_ecc_ctl
+ *
+ * This register allows inserting ECC errors for testing.
+ *
+ */
+union cvmx_fpa_ecc_ctl {
+	u64 u64;
+	struct cvmx_fpa_ecc_ctl_s {
+		u64 reserved_62_63 : 2;
+		u64 ram_flip1 : 20;
+		u64 reserved_41_41 : 1;
+		u64 ram_flip0 : 20;
+		u64 reserved_20_20 : 1;
+		u64 ram_cdis : 20;
+	} s;
+	struct cvmx_fpa_ecc_ctl_s cn73xx;
+	struct cvmx_fpa_ecc_ctl_s cn78xx;
+	struct cvmx_fpa_ecc_ctl_s cn78xxp1;
+	struct cvmx_fpa_ecc_ctl_s cnf75xx;
+};
+
+typedef union cvmx_fpa_ecc_ctl cvmx_fpa_ecc_ctl_t;
+
+/**
+ * cvmx_fpa_ecc_int
+ *
+ * This register contains ECC error interrupt summary bits.
+ *
+ */
+union cvmx_fpa_ecc_int {
+	u64 u64;
+	struct cvmx_fpa_ecc_int_s {
+		u64 reserved_52_63 : 12;
+		u64 ram_dbe : 20;
+		u64 reserved_20_31 : 12;
+		u64 ram_sbe : 20;
+	} s;
+	struct cvmx_fpa_ecc_int_s cn73xx;
+	struct cvmx_fpa_ecc_int_s cn78xx;
+	struct cvmx_fpa_ecc_int_s cn78xxp1;
+	struct cvmx_fpa_ecc_int_s cnf75xx;
+};
+
+typedef union cvmx_fpa_ecc_int cvmx_fpa_ecc_int_t;
+
+/**
+ * cvmx_fpa_err_int
+ *
+ * This register contains the global (non-pool) error interrupt summary bits of the FPA.
+ *
+ */
+union cvmx_fpa_err_int {
+	u64 u64;
+	struct cvmx_fpa_err_int_s {
+		u64 reserved_4_63 : 60;
+		u64 hw_sub : 1;
+		u64 hw_add : 1;
+		u64 cnt_sub : 1;
+		u64 cnt_add : 1;
+	} s;
+	struct cvmx_fpa_err_int_s cn73xx;
+	struct cvmx_fpa_err_int_s cn78xx;
+	struct cvmx_fpa_err_int_s cn78xxp1;
+	struct cvmx_fpa_err_int_s cnf75xx;
+};
+
+typedef union cvmx_fpa_err_int cvmx_fpa_err_int_t;
+
+/**
+ * cvmx_fpa_fpf#_marks
+ *
+ * "The high and low watermark register that determines when we write and read free pages from
+ * L2C
+ * for Queue 1. The value of FPF_RD and FPF_WR should have at least a 33 difference. Recommend
+ * value
+ * is FPF_RD == (FPA_FPF#_SIZE[FPF_SIZ] * .25) and FPF_WR == (FPA_FPF#_SIZE[FPF_SIZ] * .75)"
+ */
+union cvmx_fpa_fpfx_marks {
+	u64 u64;
+	struct cvmx_fpa_fpfx_marks_s {
+		u64 reserved_22_63 : 42;
+		u64 fpf_wr : 11;
+		u64 fpf_rd : 11;
+	} s;
+	struct cvmx_fpa_fpfx_marks_s cn38xx;
+	struct cvmx_fpa_fpfx_marks_s cn38xxp2;
+	struct cvmx_fpa_fpfx_marks_s cn56xx;
+	struct cvmx_fpa_fpfx_marks_s cn56xxp1;
+	struct cvmx_fpa_fpfx_marks_s cn58xx;
+	struct cvmx_fpa_fpfx_marks_s cn58xxp1;
+	struct cvmx_fpa_fpfx_marks_s cn61xx;
+	struct cvmx_fpa_fpfx_marks_s cn63xx;
+	struct cvmx_fpa_fpfx_marks_s cn63xxp1;
+	struct cvmx_fpa_fpfx_marks_s cn66xx;
+	struct cvmx_fpa_fpfx_marks_s cn68xx;
+	struct cvmx_fpa_fpfx_marks_s cn68xxp1;
+	struct cvmx_fpa_fpfx_marks_s cn70xx;
+	struct cvmx_fpa_fpfx_marks_s cn70xxp1;
+	struct cvmx_fpa_fpfx_marks_s cnf71xx;
+};
+
+typedef union cvmx_fpa_fpfx_marks cvmx_fpa_fpfx_marks_t;
+
+/**
+ * cvmx_fpa_fpf#_size
+ *
+ * "FPA_FPFX_SIZE = FPA's Queue 1-7 Free Page FIFO Size
+ * The number of page pointers that will be kept local to the FPA for this Queue. FPA Queues are
+ * assigned in order from Queue 0 to Queue 7, though only Queue 0 through Queue x can be used.
+ * The sum of the 8 (0-7) FPA_FPF#_SIZE registers must be limited to 2048."
+ */
+union cvmx_fpa_fpfx_size {
+	u64 u64;
+	struct cvmx_fpa_fpfx_size_s {
+		u64 reserved_11_63 : 53;
+		u64 fpf_siz : 11;
+	} s;
+	struct cvmx_fpa_fpfx_size_s cn38xx;
+	struct cvmx_fpa_fpfx_size_s cn38xxp2;
+	struct cvmx_fpa_fpfx_size_s cn56xx;
+	struct cvmx_fpa_fpfx_size_s cn56xxp1;
+	struct cvmx_fpa_fpfx_size_s cn58xx;
+	struct cvmx_fpa_fpfx_size_s cn58xxp1;
+	struct cvmx_fpa_fpfx_size_s cn61xx;
+	struct cvmx_fpa_fpfx_size_s cn63xx;
+	struct cvmx_fpa_fpfx_size_s cn63xxp1;
+	struct cvmx_fpa_fpfx_size_s cn66xx;
+	struct cvmx_fpa_fpfx_size_s cn68xx;
+	struct cvmx_fpa_fpfx_size_s cn68xxp1;
+	struct cvmx_fpa_fpfx_size_s cn70xx;
+	struct cvmx_fpa_fpfx_size_s cn70xxp1;
+	struct cvmx_fpa_fpfx_size_s cnf71xx;
+};
+
+typedef union cvmx_fpa_fpfx_size cvmx_fpa_fpfx_size_t;
+
+/**
+ * cvmx_fpa_fpf0_marks
+ *
+ * "The high and low watermark register that determines when we write and read free pages from
+ * L2C
+ * for Queue 0. The value of FPF_RD and FPF_WR should have at least a 33 difference. Recommend
+ * value
+ * is FPF_RD == (FPA_FPF#_SIZE[FPF_SIZ] * .25) and FPF_WR == (FPA_FPF#_SIZE[FPF_SIZ] * .75)"
+ */
+union cvmx_fpa_fpf0_marks {
+	u64 u64;
+	struct cvmx_fpa_fpf0_marks_s {
+		u64 reserved_24_63 : 40;
+		u64 fpf_wr : 12;
+		u64 fpf_rd : 12;
+	} s;
+	struct cvmx_fpa_fpf0_marks_s cn38xx;
+	struct cvmx_fpa_fpf0_marks_s cn38xxp2;
+	struct cvmx_fpa_fpf0_marks_s cn56xx;
+	struct cvmx_fpa_fpf0_marks_s cn56xxp1;
+	struct cvmx_fpa_fpf0_marks_s cn58xx;
+	struct cvmx_fpa_fpf0_marks_s cn58xxp1;
+	struct cvmx_fpa_fpf0_marks_s cn61xx;
+	struct cvmx_fpa_fpf0_marks_s cn63xx;
+	struct cvmx_fpa_fpf0_marks_s cn63xxp1;
+	struct cvmx_fpa_fpf0_marks_s cn66xx;
+	struct cvmx_fpa_fpf0_marks_s cn68xx;
+	struct cvmx_fpa_fpf0_marks_s cn68xxp1;
+	struct cvmx_fpa_fpf0_marks_s cn70xx;
+	struct cvmx_fpa_fpf0_marks_s cn70xxp1;
+	struct cvmx_fpa_fpf0_marks_s cnf71xx;
+};
+
+typedef union cvmx_fpa_fpf0_marks cvmx_fpa_fpf0_marks_t;
+
+/**
+ * cvmx_fpa_fpf0_size
+ *
+ * "The number of page pointers that will be kept local to the FPA for this Queue. FPA Queues are
+ * assigned in order from Queue 0 to Queue 7, though only Queue 0 through Queue x can be used.
+ * The sum of the 8 (0-7) FPA_FPF#_SIZE registers must be limited to 2048."
+ */
+union cvmx_fpa_fpf0_size {
+	u64 u64;
+	struct cvmx_fpa_fpf0_size_s {
+		u64 reserved_12_63 : 52;
+		u64 fpf_siz : 12;
+	} s;
+	struct cvmx_fpa_fpf0_size_s cn38xx;
+	struct cvmx_fpa_fpf0_size_s cn38xxp2;
+	struct cvmx_fpa_fpf0_size_s cn56xx;
+	struct cvmx_fpa_fpf0_size_s cn56xxp1;
+	struct cvmx_fpa_fpf0_size_s cn58xx;
+	struct cvmx_fpa_fpf0_size_s cn58xxp1;
+	struct cvmx_fpa_fpf0_size_s cn61xx;
+	struct cvmx_fpa_fpf0_size_s cn63xx;
+	struct cvmx_fpa_fpf0_size_s cn63xxp1;
+	struct cvmx_fpa_fpf0_size_s cn66xx;
+	struct cvmx_fpa_fpf0_size_s cn68xx;
+	struct cvmx_fpa_fpf0_size_s cn68xxp1;
+	struct cvmx_fpa_fpf0_size_s cn70xx;
+	struct cvmx_fpa_fpf0_size_s cn70xxp1;
+	struct cvmx_fpa_fpf0_size_s cnf71xx;
+};
+
+typedef union cvmx_fpa_fpf0_size cvmx_fpa_fpf0_size_t;
+
+/**
+ * cvmx_fpa_fpf8_marks
+ *
+ * Reserved through 0x238 for additional thresholds
+ *
+ *                  FPA_FPF8_MARKS = FPA's Queue 8 Free Page FIFO Read Write Marks
+ *
+ * The high and low watermark register that determines when we write and read free pages from L2C
+ * for Queue 8. The value of FPF_RD and FPF_WR should have at least a 33 difference. Recommend value
+ * is FPF_RD == (FPA_FPF#_SIZE[FPF_SIZ] * .25) and FPF_WR == (FPA_FPF#_SIZE[FPF_SIZ] * .75)
+ */
+union cvmx_fpa_fpf8_marks {
+	u64 u64;
+	struct cvmx_fpa_fpf8_marks_s {
+		u64 reserved_22_63 : 42;
+		u64 fpf_wr : 11;
+		u64 fpf_rd : 11;
+	} s;
+	struct cvmx_fpa_fpf8_marks_s cn68xx;
+	struct cvmx_fpa_fpf8_marks_s cn68xxp1;
+};
+
+typedef union cvmx_fpa_fpf8_marks cvmx_fpa_fpf8_marks_t;
+
+/**
+ * cvmx_fpa_fpf8_size
+ *
+ * FPA_FPF8_SIZE = FPA's Queue 8 Free Page FIFO Size
+ *
+ * The number of page pointers that will be kept local to the FPA for this Queue. FPA Queues are
+ * assigned in order from Queue 0 to Queue 7, though only Queue 0 through Queue x can be used.
+ * The sum of the 9 (0-8) FPA_FPF#_SIZE registers must be limited to 2048.
+ */
+union cvmx_fpa_fpf8_size {
+	u64 u64;
+	struct cvmx_fpa_fpf8_size_s {
+		u64 reserved_12_63 : 52;
+		u64 fpf_siz : 12;
+	} s;
+	struct cvmx_fpa_fpf8_size_s cn68xx;
+	struct cvmx_fpa_fpf8_size_s cn68xxp1;
+};
+
+typedef union cvmx_fpa_fpf8_size cvmx_fpa_fpf8_size_t;
+
+/**
+ * cvmx_fpa_gen_cfg
+ *
+ * This register provides FPA control and status information.
+ *
+ */
+union cvmx_fpa_gen_cfg {
+	u64 u64;
+	struct cvmx_fpa_gen_cfg_s {
+		u64 reserved_12_63 : 52;
+		u64 halfrate : 1;
+		u64 ocla_bp : 1;
+		u64 lvl_dly : 6;
+		u64 pools : 2;
+		u64 avg_en : 1;
+		u64 clk_override : 1;
+	} s;
+	struct cvmx_fpa_gen_cfg_s cn73xx;
+	struct cvmx_fpa_gen_cfg_s cn78xx;
+	struct cvmx_fpa_gen_cfg_s cn78xxp1;
+	struct cvmx_fpa_gen_cfg_s cnf75xx;
+};
+
+typedef union cvmx_fpa_gen_cfg cvmx_fpa_gen_cfg_t;
+
+/**
+ * cvmx_fpa_int_enb
+ *
+ * The FPA's interrupt enable register.
+ *
+ */
+union cvmx_fpa_int_enb {
+	u64 u64;
+	struct cvmx_fpa_int_enb_s {
+		u64 reserved_50_63 : 14;
+		u64 paddr_e : 1;
+		u64 reserved_44_48 : 5;
+		u64 free7 : 1;
+		u64 free6 : 1;
+		u64 free5 : 1;
+		u64 free4 : 1;
+		u64 free3 : 1;
+		u64 free2 : 1;
+		u64 free1 : 1;
+		u64 free0 : 1;
+		u64 pool7th : 1;
+		u64 pool6th : 1;
+		u64 pool5th : 1;
+		u64 pool4th : 1;
+		u64 pool3th : 1;
+		u64 pool2th : 1;
+		u64 pool1th : 1;
+		u64 pool0th : 1;
+		u64 q7_perr : 1;
+		u64 q7_coff : 1;
+		u64 q7_und : 1;
+		u64 q6_perr : 1;
+		u64 q6_coff : 1;
+		u64 q6_und : 1;
+		u64 q5_perr : 1;
+		u64 q5_coff : 1;
+		u64 q5_und : 1;
+		u64 q4_perr : 1;
+		u64 q4_coff : 1;
+		u64 q4_und : 1;
+		u64 q3_perr : 1;
+		u64 q3_coff : 1;
+		u64 q3_und : 1;
+		u64 q2_perr : 1;
+		u64 q2_coff : 1;
+		u64 q2_und : 1;
+		u64 q1_perr : 1;
+		u64 q1_coff : 1;
+		u64 q1_und : 1;
+		u64 q0_perr : 1;
+		u64 q0_coff : 1;
+		u64 q0_und : 1;
+		u64 fed1_dbe : 1;
+		u64 fed1_sbe : 1;
+		u64 fed0_dbe : 1;
+		u64 fed0_sbe : 1;
+	} s;
+	struct cvmx_fpa_int_enb_cn30xx {
+		u64 reserved_28_63 : 36;
+		u64 q7_perr : 1;
+		u64 q7_coff : 1;
+		u64 q7_und : 1;
+		u64 q6_perr : 1;
+		u64 q6_coff : 1;
+		u64 q6_und : 1;
+		u64 q5_perr : 1;
+		u64 q5_coff : 1;
+		u64 q5_und : 1;
+		u64 q4_perr : 1;
+		u64 q4_coff : 1;
+		u64 q4_und : 1;
+		u64 q3_perr : 1;
+		u64 q3_coff : 1;
+		u64 q3_und : 1;
+		u64 q2_perr : 1;
+		u64 q2_coff : 1;
+		u64 q2_und : 1;
+		u64 q1_perr : 1;
+		u64 q1_coff : 1;
+		u64 q1_und : 1;
+		u64 q0_perr : 1;
+		u64 q0_coff : 1;
+		u64 q0_und : 1;
+		u64 fed1_dbe : 1;
+		u64 fed1_sbe : 1;
+		u64 fed0_dbe : 1;
+		u64 fed0_sbe : 1;
+	} cn30xx;
+	struct cvmx_fpa_int_enb_cn30xx cn31xx;
+	struct cvmx_fpa_int_enb_cn30xx cn38xx;
+	struct cvmx_fpa_int_enb_cn30xx cn38xxp2;
+	struct cvmx_fpa_int_enb_cn30xx cn50xx;
+	struct cvmx_fpa_int_enb_cn30xx cn52xx;
+	struct cvmx_fpa_int_enb_cn30xx cn52xxp1;
+	struct cvmx_fpa_int_enb_cn30xx cn56xx;
+	struct cvmx_fpa_int_enb_cn30xx cn56xxp1;
+	struct cvmx_fpa_int_enb_cn30xx cn58xx;
+	struct cvmx_fpa_int_enb_cn30xx cn58xxp1;
+	struct cvmx_fpa_int_enb_cn61xx {
+		u64 reserved_50_63 : 14;
+		u64 paddr_e : 1;
+		u64 res_44 : 5;
+		u64 free7 : 1;
+		u64 free6 : 1;
+		u64 free5 : 1;
+		u64 free4 : 1;
+		u64 free3 : 1;
+		u64 free2 : 1;
+		u64 free1 : 1;
+		u64 free0 : 1;
+		u64 pool7th : 1;
+		u64 pool6th : 1;
+		u64 pool5th : 1;
+		u64 pool4th : 1;
+		u64 pool3th : 1;
+		u64 pool2th : 1;
+		u64 pool1th : 1;
+		u64 pool0th : 1;
+		u64 q7_perr : 1;
+		u64 q7_coff : 1;
+		u64 q7_und : 1;
+		u64 q6_perr : 1;
+		u64 q6_coff : 1;
+		u64 q6_und : 1;
+		u64 q5_perr : 1;
+		u64 q5_coff : 1;
+		u64 q5_und : 1;
+		u64 q4_perr : 1;
+		u64 q4_coff : 1;
+		u64 q4_und : 1;
+		u64 q3_perr : 1;
+		u64 q3_coff : 1;
+		u64 q3_und : 1;
+		u64 q2_perr : 1;
+		u64 q2_coff : 1;
+		u64 q2_und : 1;
+		u64 q1_perr : 1;
+		u64 q1_coff : 1;
+		u64 q1_und : 1;
+		u64 q0_perr : 1;
+		u64 q0_coff : 1;
+		u64 q0_und : 1;
+		u64 fed1_dbe : 1;
+		u64 fed1_sbe : 1;
+		u64 fed0_dbe : 1;
+		u64 fed0_sbe : 1;
+	} cn61xx;
+	struct cvmx_fpa_int_enb_cn63xx {
+		u64 reserved_44_63 : 20;
+		u64 free7 : 1;
+		u64 free6 : 1;
+		u64 free5 : 1;
+		u64 free4 : 1;
+		u64 free3 : 1;
+		u64 free2 : 1;
+		u64 free1 : 1;
+		u64 free0 : 1;
+		u64 pool7th : 1;
+		u64 pool6th : 1;
+		u64 pool5th : 1;
+		u64 pool4th : 1;
+		u64 pool3th : 1;
+		u64 pool2th : 1;
+		u64 pool1th : 1;
+		u64 pool0th : 1;
+		u64 q7_perr : 1;
+		u64 q7_coff : 1;
+		u64 q7_und : 1;
+		u64 q6_perr : 1;
+		u64 q6_coff : 1;
+		u64 q6_und : 1;
+		u64 q5_perr : 1;
+		u64 q5_coff : 1;
+		u64 q5_und : 1;
+		u64 q4_perr : 1;
+		u64 q4_coff : 1;
+		u64 q4_und : 1;
+		u64 q3_perr : 1;
+		u64 q3_coff : 1;
+		u64 q3_und : 1;
+		u64 q2_perr : 1;
+		u64 q2_coff : 1;
+		u64 q2_und : 1;
+		u64 q1_perr : 1;
+		u64 q1_coff : 1;
+		u64 q1_und : 1;
+		u64 q0_perr : 1;
+		u64 q0_coff : 1;
+		u64 q0_und : 1;
+		u64 fed1_dbe : 1;
+		u64 fed1_sbe : 1;
+		u64 fed0_dbe : 1;
+		u64 fed0_sbe : 1;
+	} cn63xx;
+	struct cvmx_fpa_int_enb_cn30xx cn63xxp1;
+	struct cvmx_fpa_int_enb_cn61xx cn66xx;
+	struct cvmx_fpa_int_enb_cn68xx {
+		u64 reserved_50_63 : 14;
+		u64 paddr_e : 1;
+		u64 pool8th : 1;
+		u64 q8_perr : 1;
+		u64 q8_coff : 1;
+		u64 q8_und : 1;
+		u64 free8 : 1;
+		u64 free7 : 1;
+		u64 free6 : 1;
+		u64 free5 : 1;
+		u64 free4 : 1;
+		u64 free3 : 1;
+		u64 free2 : 1;
+		u64 free1 : 1;
+		u64 free0 : 1;
+		u64 pool7th : 1;
+		u64 pool6th : 1;
+		u64 pool5th : 1;
+		u64 pool4th : 1;
+		u64 pool3th : 1;
+		u64 pool2th : 1;
+		u64 pool1th : 1;
+		u64 pool0th : 1;
+		u64 q7_perr : 1;
+		u64 q7_coff : 1;
+		u64 q7_und : 1;
+		u64 q6_perr : 1;
+		u64 q6_coff : 1;
+		u64 q6_und : 1;
+		u64 q5_perr : 1;
+		u64 q5_coff : 1;
+		u64 q5_und : 1;
+		u64 q4_perr : 1;
+		u64 q4_coff : 1;
+		u64 q4_und : 1;
+		u64 q3_perr : 1;
+		u64 q3_coff : 1;
+		u64 q3_und : 1;
+		u64 q2_perr : 1;
+		u64 q2_coff : 1;
+		u64 q2_und : 1;
+		u64 q1_perr : 1;
+		u64 q1_coff : 1;
+		u64 q1_und : 1;
+		u64 q0_perr : 1;
+		u64 q0_coff : 1;
+		u64 q0_und : 1;
+		u64 fed1_dbe : 1;
+		u64 fed1_sbe : 1;
+		u64 fed0_dbe : 1;
+		u64 fed0_sbe : 1;
+	} cn68xx;
+	struct cvmx_fpa_int_enb_cn68xx cn68xxp1;
+	struct cvmx_fpa_int_enb_cn61xx cn70xx;
+	struct cvmx_fpa_int_enb_cn61xx cn70xxp1;
+	struct cvmx_fpa_int_enb_cn61xx cnf71xx;
+};
+
+typedef union cvmx_fpa_int_enb cvmx_fpa_int_enb_t;
+
+/**
+ * cvmx_fpa_int_sum
+ *
+ * Contains the different interrupt summary bits of the FPA.
+ *
+ */
+union cvmx_fpa_int_sum {
+	u64 u64;
+	struct cvmx_fpa_int_sum_s {
+		u64 reserved_50_63 : 14;
+		u64 paddr_e : 1;
+		u64 pool8th : 1;
+		u64 q8_perr : 1;
+		u64 q8_coff : 1;
+		u64 q8_und : 1;
+		u64 free8 : 1;
+		u64 free7 : 1;
+		u64 free6 : 1;
+		u64 free5 : 1;
+		u64 free4 : 1;
+		u64 free3 : 1;
+		u64 free2 : 1;
+		u64 free1 : 1;
+		u64 free0 : 1;
+		u64 pool7th : 1;
+		u64 pool6th : 1;
+		u64 pool5th : 1;
+		u64 pool4th : 1;
+		u64 pool3th : 1;
+		u64 pool2th : 1;
+		u64 pool1th : 1;
+		u64 pool0th : 1;
+		u64 q7_perr : 1;
+		u64 q7_coff : 1;
+		u64 q7_und : 1;
+		u64 q6_perr : 1;
+		u64 q6_coff : 1;
+		u64 q6_und : 1;
+		u64 q5_perr : 1;
+		u64 q5_coff : 1;
+		u64 q5_und : 1;
+		u64 q4_perr : 1;
+		u64 q4_coff : 1;
+		u64 q4_und : 1;
+		u64 q3_perr : 1;
+		u64 q3_coff : 1;
+		u64 q3_und : 1;
+		u64 q2_perr : 1;
+		u64 q2_coff : 1;
+		u64 q2_und : 1;
+		u64 q1_perr : 1;
+		u64 q1_coff : 1;
+		u64 q1_und : 1;
+		u64 q0_perr : 1;
+		u64 q0_coff : 1;
+		u64 q0_und : 1;
+		u64 fed1_dbe : 1;
+		u64 fed1_sbe : 1;
+		u64 fed0_dbe : 1;
+		u64 fed0_sbe : 1;
+	} s;
+	struct cvmx_fpa_int_sum_cn30xx {
+		u64 reserved_28_63 : 36;
+		u64 q7_perr : 1;
+		u64 q7_coff : 1;
+		u64 q7_und : 1;
+		u64 q6_perr : 1;
+		u64 q6_coff : 1;
+		u64 q6_und : 1;
+		u64 q5_perr : 1;
+		u64 q5_coff : 1;
+		u64 q5_und : 1;
+		u64 q4_perr : 1;
+		u64 q4_coff : 1;
+		u64 q4_und : 1;
+		u64 q3_perr : 1;
+		u64 q3_coff : 1;
+		u64 q3_und : 1;
+		u64 q2_perr : 1;
+		u64 q2_coff : 1;
+		u64 q2_und : 1;
+		u64 q1_perr : 1;
+		u64 q1_coff : 1;
+		u64 q1_und : 1;
+		u64 q0_perr : 1;
+		u64 q0_coff : 1;
+		u64 q0_und : 1;
+		u64 fed1_dbe : 1;
+		u64 fed1_sbe : 1;
+		u64 fed0_dbe : 1;
+		u64 fed0_sbe : 1;
+	} cn30xx;
+	struct cvmx_fpa_int_sum_cn30xx cn31xx;
+	struct cvmx_fpa_int_sum_cn30xx cn38xx;
+	struct cvmx_fpa_int_sum_cn30xx cn38xxp2;
+	struct cvmx_fpa_int_sum_cn30xx cn50xx;
+	struct cvmx_fpa_int_sum_cn30xx cn52xx;
+	struct cvmx_fpa_int_sum_cn30xx cn52xxp1;
+	struct cvmx_fpa_int_sum_cn30xx cn56xx;
+	struct cvmx_fpa_int_sum_cn30xx cn56xxp1;
+	struct cvmx_fpa_int_sum_cn30xx cn58xx;
+	struct cvmx_fpa_int_sum_cn30xx cn58xxp1;
+	struct cvmx_fpa_int_sum_cn61xx {
+		u64 reserved_50_63 : 14;
+		u64 paddr_e : 1;
+		u64 reserved_44_48 : 5;
+		u64 free7 : 1;
+		u64 free6 : 1;
+		u64 free5 : 1;
+		u64 free4 : 1;
+		u64 free3 : 1;
+		u64 free2 : 1;
+		u64 free1 : 1;
+		u64 free0 : 1;
+		u64 pool7th : 1;
+		u64 pool6th : 1;
+		u64 pool5th : 1;
+		u64 pool4th : 1;
+		u64 pool3th : 1;
+		u64 pool2th : 1;
+		u64 pool1th : 1;
+		u64 pool0th : 1;
+		u64 q7_perr : 1;
+		u64 q7_coff : 1;
+		u64 q7_und : 1;
+		u64 q6_perr : 1;
+		u64 q6_coff : 1;
+		u64 q6_und : 1;
+		u64 q5_perr : 1;
+		u64 q5_coff : 1;
+		u64 q5_und : 1;
+		u64 q4_perr : 1;
+		u64 q4_coff : 1;
+		u64 q4_und : 1;
+		u64 q3_perr : 1;
+		u64 q3_coff : 1;
+		u64 q3_und : 1;
+		u64 q2_perr : 1;
+		u64 q2_coff : 1;
+		u64 q2_und : 1;
+		u64 q1_perr : 1;
+		u64 q1_coff : 1;
+		u64 q1_und : 1;
+		u64 q0_perr : 1;
+		u64 q0_coff : 1;
+		u64 q0_und : 1;
+		u64 fed1_dbe : 1;
+		u64 fed1_sbe : 1;
+		u64 fed0_dbe : 1;
+		u64 fed0_sbe : 1;
+	} cn61xx;
+	struct cvmx_fpa_int_sum_cn63xx {
+		u64 reserved_44_63 : 20;
+		u64 free7 : 1;
+		u64 free6 : 1;
+		u64 free5 : 1;
+		u64 free4 : 1;
+		u64 free3 : 1;
+		u64 free2 : 1;
+		u64 free1 : 1;
+		u64 free0 : 1;
+		u64 pool7th : 1;
+		u64 pool6th : 1;
+		u64 pool5th : 1;
+		u64 pool4th : 1;
+		u64 pool3th : 1;
+		u64 pool2th : 1;
+		u64 pool1th : 1;
+		u64 pool0th : 1;
+		u64 q7_perr : 1;
+		u64 q7_coff : 1;
+		u64 q7_und : 1;
+		u64 q6_perr : 1;
+		u64 q6_coff : 1;
+		u64 q6_und : 1;
+		u64 q5_perr : 1;
+		u64 q5_coff : 1;
+		u64 q5_und : 1;
+		u64 q4_perr : 1;
+		u64 q4_coff : 1;
+		u64 q4_und : 1;
+		u64 q3_perr : 1;
+		u64 q3_coff : 1;
+		u64 q3_und : 1;
+		u64 q2_perr : 1;
+		u64 q2_coff : 1;
+		u64 q2_und : 1;
+		u64 q1_perr : 1;
+		u64 q1_coff : 1;
+		u64 q1_und : 1;
+		u64 q0_perr : 1;
+		u64 q0_coff : 1;
+		u64 q0_und : 1;
+		u64 fed1_dbe : 1;
+		u64 fed1_sbe : 1;
+		u64 fed0_dbe : 1;
+		u64 fed0_sbe : 1;
+	} cn63xx;
+	struct cvmx_fpa_int_sum_cn30xx cn63xxp1;
+	struct cvmx_fpa_int_sum_cn61xx cn66xx;
+	struct cvmx_fpa_int_sum_s cn68xx;
+	struct cvmx_fpa_int_sum_s cn68xxp1;
+	struct cvmx_fpa_int_sum_cn61xx cn70xx;
+	struct cvmx_fpa_int_sum_cn61xx cn70xxp1;
+	struct cvmx_fpa_int_sum_cn61xx cnf71xx;
+};
+
+typedef union cvmx_fpa_int_sum cvmx_fpa_int_sum_t;
+
+/**
+ * cvmx_fpa_packet_threshold
+ *
+ * When the value of FPA_QUE0_AVAILABLE[QUE_SIZ] is Less than the value of this register a low
+ * pool count signal is sent to the
+ * PCIe packet instruction engine (to make it stop reading instructions) and to the Packet-
+ * Arbiter informing it to not give grants
+ * to packets MAC with the exception of the PCIe MAC.
+ */
+union cvmx_fpa_packet_threshold {
+	u64 u64;
+	struct cvmx_fpa_packet_threshold_s {
+		u64 reserved_32_63 : 32;
+		u64 thresh : 32;
+	} s;
+	struct cvmx_fpa_packet_threshold_s cn61xx;
+	struct cvmx_fpa_packet_threshold_s cn63xx;
+	struct cvmx_fpa_packet_threshold_s cn66xx;
+	struct cvmx_fpa_packet_threshold_s cn68xx;
+	struct cvmx_fpa_packet_threshold_s cn68xxp1;
+	struct cvmx_fpa_packet_threshold_s cn70xx;
+	struct cvmx_fpa_packet_threshold_s cn70xxp1;
+	struct cvmx_fpa_packet_threshold_s cnf71xx;
+};
+
+typedef union cvmx_fpa_packet_threshold cvmx_fpa_packet_threshold_t;
+
+/**
+ * cvmx_fpa_pool#_available
+ */
+union cvmx_fpa_poolx_available {
+	u64 u64;
+	struct cvmx_fpa_poolx_available_s {
+		u64 reserved_36_63 : 28;
+		u64 count : 36;
+	} s;
+	struct cvmx_fpa_poolx_available_s cn73xx;
+	struct cvmx_fpa_poolx_available_s cn78xx;
+	struct cvmx_fpa_poolx_available_s cn78xxp1;
+	struct cvmx_fpa_poolx_available_s cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_available cvmx_fpa_poolx_available_t;
+
+/**
+ * cvmx_fpa_pool#_cfg
+ */
+union cvmx_fpa_poolx_cfg {
+	u64 u64;
+	struct cvmx_fpa_poolx_cfg_s {
+		u64 reserved_43_63 : 21;
+		u64 buf_size : 11;
+		u64 reserved_31_31 : 1;
+		u64 buf_offset : 15;
+		u64 reserved_5_15 : 11;
+		u64 l_type : 2;
+		u64 s_type : 1;
+		u64 nat_align : 1;
+		u64 ena : 1;
+	} s;
+	struct cvmx_fpa_poolx_cfg_s cn73xx;
+	struct cvmx_fpa_poolx_cfg_s cn78xx;
+	struct cvmx_fpa_poolx_cfg_s cn78xxp1;
+	struct cvmx_fpa_poolx_cfg_s cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_cfg cvmx_fpa_poolx_cfg_t;
+
+/**
+ * cvmx_fpa_pool#_end_addr
+ *
+ * Pointers sent to this pool after alignment must be equal to or less than this address.
+ *
+ */
+union cvmx_fpa_poolx_end_addr {
+	u64 u64;
+	struct cvmx_fpa_poolx_end_addr_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_fpa_poolx_end_addr_cn61xx {
+		u64 reserved_33_63 : 31;
+		u64 addr : 33;
+	} cn61xx;
+	struct cvmx_fpa_poolx_end_addr_cn61xx cn66xx;
+	struct cvmx_fpa_poolx_end_addr_cn61xx cn68xx;
+	struct cvmx_fpa_poolx_end_addr_cn61xx cn68xxp1;
+	struct cvmx_fpa_poolx_end_addr_cn61xx cn70xx;
+	struct cvmx_fpa_poolx_end_addr_cn61xx cn70xxp1;
+	struct cvmx_fpa_poolx_end_addr_cn73xx {
+		u64 reserved_42_63 : 22;
+		u64 addr : 35;
+		u64 reserved_0_6 : 7;
+	} cn73xx;
+	struct cvmx_fpa_poolx_end_addr_cn73xx cn78xx;
+	struct cvmx_fpa_poolx_end_addr_cn73xx cn78xxp1;
+	struct cvmx_fpa_poolx_end_addr_cn61xx cnf71xx;
+	struct cvmx_fpa_poolx_end_addr_cn73xx cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_end_addr cvmx_fpa_poolx_end_addr_t;
+
+/**
+ * cvmx_fpa_pool#_fpf_marks
+ *
+ * The low watermark register that determines when we read free pages from L2C.
+ *
+ */
+union cvmx_fpa_poolx_fpf_marks {
+	u64 u64;
+	struct cvmx_fpa_poolx_fpf_marks_s {
+		u64 reserved_27_63 : 37;
+		u64 fpf_rd : 11;
+		u64 reserved_11_15 : 5;
+		u64 fpf_level : 11;
+	} s;
+	struct cvmx_fpa_poolx_fpf_marks_s cn73xx;
+	struct cvmx_fpa_poolx_fpf_marks_s cn78xx;
+	struct cvmx_fpa_poolx_fpf_marks_s cn78xxp1;
+	struct cvmx_fpa_poolx_fpf_marks_s cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_fpf_marks cvmx_fpa_poolx_fpf_marks_t;
+
+/**
+ * cvmx_fpa_pool#_int
+ *
+ * This register indicates pool interrupts.
+ *
+ */
+union cvmx_fpa_poolx_int {
+	u64 u64;
+	struct cvmx_fpa_poolx_int_s {
+		u64 reserved_4_63 : 60;
+		u64 thresh : 1;
+		u64 range : 1;
+		u64 crcerr : 1;
+		u64 ovfls : 1;
+	} s;
+	struct cvmx_fpa_poolx_int_s cn73xx;
+	struct cvmx_fpa_poolx_int_s cn78xx;
+	struct cvmx_fpa_poolx_int_s cn78xxp1;
+	struct cvmx_fpa_poolx_int_s cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_int cvmx_fpa_poolx_int_t;
+
+/**
+ * cvmx_fpa_pool#_op_pc
+ */
+union cvmx_fpa_poolx_op_pc {
+	u64 u64;
+	struct cvmx_fpa_poolx_op_pc_s {
+		u64 count : 64;
+	} s;
+	struct cvmx_fpa_poolx_op_pc_s cn73xx;
+	struct cvmx_fpa_poolx_op_pc_s cn78xx;
+	struct cvmx_fpa_poolx_op_pc_s cn78xxp1;
+	struct cvmx_fpa_poolx_op_pc_s cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_op_pc cvmx_fpa_poolx_op_pc_t;
+
+/**
+ * cvmx_fpa_pool#_stack_addr
+ */
+union cvmx_fpa_poolx_stack_addr {
+	u64 u64;
+	struct cvmx_fpa_poolx_stack_addr_s {
+		u64 reserved_42_63 : 22;
+		u64 addr : 35;
+		u64 reserved_0_6 : 7;
+	} s;
+	struct cvmx_fpa_poolx_stack_addr_s cn73xx;
+	struct cvmx_fpa_poolx_stack_addr_s cn78xx;
+	struct cvmx_fpa_poolx_stack_addr_s cn78xxp1;
+	struct cvmx_fpa_poolx_stack_addr_s cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_stack_addr cvmx_fpa_poolx_stack_addr_t;
+
+/**
+ * cvmx_fpa_pool#_stack_base
+ */
+union cvmx_fpa_poolx_stack_base {
+	u64 u64;
+	struct cvmx_fpa_poolx_stack_base_s {
+		u64 reserved_42_63 : 22;
+		u64 addr : 35;
+		u64 reserved_0_6 : 7;
+	} s;
+	struct cvmx_fpa_poolx_stack_base_s cn73xx;
+	struct cvmx_fpa_poolx_stack_base_s cn78xx;
+	struct cvmx_fpa_poolx_stack_base_s cn78xxp1;
+	struct cvmx_fpa_poolx_stack_base_s cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_stack_base cvmx_fpa_poolx_stack_base_t;
+
+/**
+ * cvmx_fpa_pool#_stack_end
+ */
+union cvmx_fpa_poolx_stack_end {
+	u64 u64;
+	struct cvmx_fpa_poolx_stack_end_s {
+		u64 reserved_42_63 : 22;
+		u64 addr : 35;
+		u64 reserved_0_6 : 7;
+	} s;
+	struct cvmx_fpa_poolx_stack_end_s cn73xx;
+	struct cvmx_fpa_poolx_stack_end_s cn78xx;
+	struct cvmx_fpa_poolx_stack_end_s cn78xxp1;
+	struct cvmx_fpa_poolx_stack_end_s cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_stack_end cvmx_fpa_poolx_stack_end_t;
+
+/**
+ * cvmx_fpa_pool#_start_addr
+ *
+ * Pointers sent to this pool after alignment must be equal to or greater than this address.
+ *
+ */
+union cvmx_fpa_poolx_start_addr {
+	u64 u64;
+	struct cvmx_fpa_poolx_start_addr_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_fpa_poolx_start_addr_cn61xx {
+		u64 reserved_33_63 : 31;
+		u64 addr : 33;
+	} cn61xx;
+	struct cvmx_fpa_poolx_start_addr_cn61xx cn66xx;
+	struct cvmx_fpa_poolx_start_addr_cn61xx cn68xx;
+	struct cvmx_fpa_poolx_start_addr_cn61xx cn68xxp1;
+	struct cvmx_fpa_poolx_start_addr_cn61xx cn70xx;
+	struct cvmx_fpa_poolx_start_addr_cn61xx cn70xxp1;
+	struct cvmx_fpa_poolx_start_addr_cn73xx {
+		u64 reserved_42_63 : 22;
+		u64 addr : 35;
+		u64 reserved_0_6 : 7;
+	} cn73xx;
+	struct cvmx_fpa_poolx_start_addr_cn73xx cn78xx;
+	struct cvmx_fpa_poolx_start_addr_cn73xx cn78xxp1;
+	struct cvmx_fpa_poolx_start_addr_cn61xx cnf71xx;
+	struct cvmx_fpa_poolx_start_addr_cn73xx cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_start_addr cvmx_fpa_poolx_start_addr_t;
+
+/**
+ * cvmx_fpa_pool#_threshold
+ *
+ * FPA_POOLX_THRESHOLD = FPA's Pool 0-7 Threshold
+ * When the value of FPA_QUEX_AVAILABLE is equal to FPA_POOLX_THRESHOLD[THRESH] when a pointer is
+ * allocated
+ * or deallocated, set interrupt FPA_INT_SUM[POOLXTH].
+ */
+union cvmx_fpa_poolx_threshold {
+	u64 u64;
+	struct cvmx_fpa_poolx_threshold_s {
+		u64 reserved_36_63 : 28;
+		u64 thresh : 36;
+	} s;
+	struct cvmx_fpa_poolx_threshold_cn61xx {
+		u64 reserved_29_63 : 35;
+		u64 thresh : 29;
+	} cn61xx;
+	struct cvmx_fpa_poolx_threshold_cn61xx cn63xx;
+	struct cvmx_fpa_poolx_threshold_cn61xx cn66xx;
+	struct cvmx_fpa_poolx_threshold_cn68xx {
+		u64 reserved_32_63 : 32;
+		u64 thresh : 32;
+	} cn68xx;
+	struct cvmx_fpa_poolx_threshold_cn68xx cn68xxp1;
+	struct cvmx_fpa_poolx_threshold_cn61xx cn70xx;
+	struct cvmx_fpa_poolx_threshold_cn61xx cn70xxp1;
+	struct cvmx_fpa_poolx_threshold_s cn73xx;
+	struct cvmx_fpa_poolx_threshold_s cn78xx;
+	struct cvmx_fpa_poolx_threshold_s cn78xxp1;
+	struct cvmx_fpa_poolx_threshold_cn61xx cnf71xx;
+	struct cvmx_fpa_poolx_threshold_s cnf75xx;
+};
+
+typedef union cvmx_fpa_poolx_threshold cvmx_fpa_poolx_threshold_t;
+
+/**
+ * cvmx_fpa_que#_available
+ *
+ * FPA_QUEX_PAGES_AVAILABLE = FPA's Queue 0-7 Free Page Available Register
+ * The number of page pointers that are available in the FPA and local DRAM.
+ */
+union cvmx_fpa_quex_available {
+	u64 u64;
+	struct cvmx_fpa_quex_available_s {
+		u64 reserved_32_63 : 32;
+		u64 que_siz : 32;
+	} s;
+	struct cvmx_fpa_quex_available_cn30xx {
+		u64 reserved_29_63 : 35;
+		u64 que_siz : 29;
+	} cn30xx;
+	struct cvmx_fpa_quex_available_cn30xx cn31xx;
+	struct cvmx_fpa_quex_available_cn30xx cn38xx;
+	struct cvmx_fpa_quex_available_cn30xx cn38xxp2;
+	struct cvmx_fpa_quex_available_cn30xx cn50xx;
+	struct cvmx_fpa_quex_available_cn30xx cn52xx;
+	struct cvmx_fpa_quex_available_cn30xx cn52xxp1;
+	struct cvmx_fpa_quex_available_cn30xx cn56xx;
+	struct cvmx_fpa_quex_available_cn30xx cn56xxp1;
+	struct cvmx_fpa_quex_available_cn30xx cn58xx;
+	struct cvmx_fpa_quex_available_cn30xx cn58xxp1;
+	struct cvmx_fpa_quex_available_cn30xx cn61xx;
+	struct cvmx_fpa_quex_available_cn30xx cn63xx;
+	struct cvmx_fpa_quex_available_cn30xx cn63xxp1;
+	struct cvmx_fpa_quex_available_cn30xx cn66xx;
+	struct cvmx_fpa_quex_available_s cn68xx;
+	struct cvmx_fpa_quex_available_s cn68xxp1;
+	struct cvmx_fpa_quex_available_cn30xx cn70xx;
+	struct cvmx_fpa_quex_available_cn30xx cn70xxp1;
+	struct cvmx_fpa_quex_available_cn30xx cnf71xx;
+};
+
+typedef union cvmx_fpa_quex_available cvmx_fpa_quex_available_t;
+
+/**
+ * cvmx_fpa_que#_page_index
+ *
+ * The present index page for queue 0 of the FPA.
+ * This number reflects the number of pages of pointers that have been written to memory
+ * for this queue.
+ */
+union cvmx_fpa_quex_page_index {
+	u64 u64;
+	struct cvmx_fpa_quex_page_index_s {
+		u64 reserved_25_63 : 39;
+		u64 pg_num : 25;
+	} s;
+	struct cvmx_fpa_quex_page_index_s cn30xx;
+	struct cvmx_fpa_quex_page_index_s cn31xx;
+	struct cvmx_fpa_quex_page_index_s cn38xx;
+	struct cvmx_fpa_quex_page_index_s cn38xxp2;
+	struct cvmx_fpa_quex_page_index_s cn50xx;
+	struct cvmx_fpa_quex_page_index_s cn52xx;
+	struct cvmx_fpa_quex_page_index_s cn52xxp1;
+	struct cvmx_fpa_quex_page_index_s cn56xx;
+	struct cvmx_fpa_quex_page_index_s cn56xxp1;
+	struct cvmx_fpa_quex_page_index_s cn58xx;
+	struct cvmx_fpa_quex_page_index_s cn58xxp1;
+	struct cvmx_fpa_quex_page_index_s cn61xx;
+	struct cvmx_fpa_quex_page_index_s cn63xx;
+	struct cvmx_fpa_quex_page_index_s cn63xxp1;
+	struct cvmx_fpa_quex_page_index_s cn66xx;
+	struct cvmx_fpa_quex_page_index_s cn68xx;
+	struct cvmx_fpa_quex_page_index_s cn68xxp1;
+	struct cvmx_fpa_quex_page_index_s cn70xx;
+	struct cvmx_fpa_quex_page_index_s cn70xxp1;
+	struct cvmx_fpa_quex_page_index_s cnf71xx;
+};
+
+typedef union cvmx_fpa_quex_page_index cvmx_fpa_quex_page_index_t;
+
+/**
+ * cvmx_fpa_que8_page_index
+ *
+ * FPA_QUE8_PAGE_INDEX = FPA's Queue7 Page Index
+ *
+ * The present index page for queue 7 of the FPA.
+ * This number reflects the number of pages of pointers that have been written to memory
+ * for this queue.
+ * Because the address space is 38-bits the number of 128 byte pages could cause this register value to wrap.
+ */
+union cvmx_fpa_que8_page_index {
+	u64 u64;
+	struct cvmx_fpa_que8_page_index_s {
+		u64 reserved_25_63 : 39;
+		u64 pg_num : 25;
+	} s;
+	struct cvmx_fpa_que8_page_index_s cn68xx;
+	struct cvmx_fpa_que8_page_index_s cn68xxp1;
+};
+
+typedef union cvmx_fpa_que8_page_index cvmx_fpa_que8_page_index_t;
+
+/**
+ * cvmx_fpa_que_act
+ *
+ * "When a INT_SUM[PERR#] occurs this will be latched with the value read from L2C.
+ * This is latched on the first error and will not latch again unitl all errors are cleared."
+ */
+union cvmx_fpa_que_act {
+	u64 u64;
+	struct cvmx_fpa_que_act_s {
+		u64 reserved_29_63 : 35;
+		u64 act_que : 3;
+		u64 act_indx : 26;
+	} s;
+	struct cvmx_fpa_que_act_s cn30xx;
+	struct cvmx_fpa_que_act_s cn31xx;
+	struct cvmx_fpa_que_act_s cn38xx;
+	struct cvmx_fpa_que_act_s cn38xxp2;
+	struct cvmx_fpa_que_act_s cn50xx;
+	struct cvmx_fpa_que_act_s cn52xx;
+	struct cvmx_fpa_que_act_s cn52xxp1;
+	struct cvmx_fpa_que_act_s cn56xx;
+	struct cvmx_fpa_que_act_s cn56xxp1;
+	struct cvmx_fpa_que_act_s cn58xx;
+	struct cvmx_fpa_que_act_s cn58xxp1;
+	struct cvmx_fpa_que_act_s cn61xx;
+	struct cvmx_fpa_que_act_s cn63xx;
+	struct cvmx_fpa_que_act_s cn63xxp1;
+	struct cvmx_fpa_que_act_s cn66xx;
+	struct cvmx_fpa_que_act_s cn68xx;
+	struct cvmx_fpa_que_act_s cn68xxp1;
+	struct cvmx_fpa_que_act_s cn70xx;
+	struct cvmx_fpa_que_act_s cn70xxp1;
+	struct cvmx_fpa_que_act_s cnf71xx;
+};
+
+typedef union cvmx_fpa_que_act cvmx_fpa_que_act_t;
+
+/**
+ * cvmx_fpa_que_exp
+ *
+ * "When a INT_SUM[PERR#] occurs this will be latched with the expected value.
+ * This is latched on the first error and will not latch again unitl all errors are cleared."
+ */
+union cvmx_fpa_que_exp {
+	u64 u64;
+	struct cvmx_fpa_que_exp_s {
+		u64 reserved_29_63 : 35;
+		u64 exp_que : 3;
+		u64 exp_indx : 26;
+	} s;
+	struct cvmx_fpa_que_exp_s cn30xx;
+	struct cvmx_fpa_que_exp_s cn31xx;
+	struct cvmx_fpa_que_exp_s cn38xx;
+	struct cvmx_fpa_que_exp_s cn38xxp2;
+	struct cvmx_fpa_que_exp_s cn50xx;
+	struct cvmx_fpa_que_exp_s cn52xx;
+	struct cvmx_fpa_que_exp_s cn52xxp1;
+	struct cvmx_fpa_que_exp_s cn56xx;
+	struct cvmx_fpa_que_exp_s cn56xxp1;
+	struct cvmx_fpa_que_exp_s cn58xx;
+	struct cvmx_fpa_que_exp_s cn58xxp1;
+	struct cvmx_fpa_que_exp_s cn61xx;
+	struct cvmx_fpa_que_exp_s cn63xx;
+	struct cvmx_fpa_que_exp_s cn63xxp1;
+	struct cvmx_fpa_que_exp_s cn66xx;
+	struct cvmx_fpa_que_exp_s cn68xx;
+	struct cvmx_fpa_que_exp_s cn68xxp1;
+	struct cvmx_fpa_que_exp_s cn70xx;
+	struct cvmx_fpa_que_exp_s cn70xxp1;
+	struct cvmx_fpa_que_exp_s cnf71xx;
+};
+
+typedef union cvmx_fpa_que_exp cvmx_fpa_que_exp_t;
+
+/**
+ * cvmx_fpa_rd_latency_pc
+ */
+union cvmx_fpa_rd_latency_pc {
+	u64 u64;
+	struct cvmx_fpa_rd_latency_pc_s {
+		u64 count : 64;
+	} s;
+	struct cvmx_fpa_rd_latency_pc_s cn73xx;
+	struct cvmx_fpa_rd_latency_pc_s cn78xx;
+	struct cvmx_fpa_rd_latency_pc_s cn78xxp1;
+	struct cvmx_fpa_rd_latency_pc_s cnf75xx;
+};
+
+typedef union cvmx_fpa_rd_latency_pc cvmx_fpa_rd_latency_pc_t;
+
+/**
+ * cvmx_fpa_rd_req_pc
+ */
+union cvmx_fpa_rd_req_pc {
+	u64 u64;
+	struct cvmx_fpa_rd_req_pc_s {
+		u64 count : 64;
+	} s;
+	struct cvmx_fpa_rd_req_pc_s cn73xx;
+	struct cvmx_fpa_rd_req_pc_s cn78xx;
+	struct cvmx_fpa_rd_req_pc_s cn78xxp1;
+	struct cvmx_fpa_rd_req_pc_s cnf75xx;
+};
+
+typedef union cvmx_fpa_rd_req_pc cvmx_fpa_rd_req_pc_t;
+
+/**
+ * cvmx_fpa_red_delay
+ */
+union cvmx_fpa_red_delay {
+	u64 u64;
+	struct cvmx_fpa_red_delay_s {
+		u64 reserved_14_63 : 50;
+		u64 avg_dly : 14;
+	} s;
+	struct cvmx_fpa_red_delay_s cn73xx;
+	struct cvmx_fpa_red_delay_s cn78xx;
+	struct cvmx_fpa_red_delay_s cn78xxp1;
+	struct cvmx_fpa_red_delay_s cnf75xx;
+};
+
+typedef union cvmx_fpa_red_delay cvmx_fpa_red_delay_t;
+
+/**
+ * cvmx_fpa_sft_rst
+ *
+ * Allows soft reset.
+ *
+ */
+union cvmx_fpa_sft_rst {
+	u64 u64;
+	struct cvmx_fpa_sft_rst_s {
+		u64 busy : 1;
+		u64 reserved_1_62 : 62;
+		u64 rst : 1;
+	} s;
+	struct cvmx_fpa_sft_rst_s cn73xx;
+	struct cvmx_fpa_sft_rst_s cn78xx;
+	struct cvmx_fpa_sft_rst_s cn78xxp1;
+	struct cvmx_fpa_sft_rst_s cnf75xx;
+};
+
+typedef union cvmx_fpa_sft_rst cvmx_fpa_sft_rst_t;
+
+/**
+ * cvmx_fpa_wart_ctl
+ *
+ * FPA_WART_CTL = FPA's WART Control
+ *
+ * Control and status for the WART block.
+ */
+union cvmx_fpa_wart_ctl {
+	u64 u64;
+	struct cvmx_fpa_wart_ctl_s {
+		u64 reserved_16_63 : 48;
+		u64 ctl : 16;
+	} s;
+	struct cvmx_fpa_wart_ctl_s cn30xx;
+	struct cvmx_fpa_wart_ctl_s cn31xx;
+	struct cvmx_fpa_wart_ctl_s cn38xx;
+	struct cvmx_fpa_wart_ctl_s cn38xxp2;
+	struct cvmx_fpa_wart_ctl_s cn50xx;
+	struct cvmx_fpa_wart_ctl_s cn52xx;
+	struct cvmx_fpa_wart_ctl_s cn52xxp1;
+	struct cvmx_fpa_wart_ctl_s cn56xx;
+	struct cvmx_fpa_wart_ctl_s cn56xxp1;
+	struct cvmx_fpa_wart_ctl_s cn58xx;
+	struct cvmx_fpa_wart_ctl_s cn58xxp1;
+};
+
+typedef union cvmx_fpa_wart_ctl cvmx_fpa_wart_ctl_t;
+
+/**
+ * cvmx_fpa_wart_status
+ *
+ * FPA_WART_STATUS = FPA's WART Status
+ *
+ * Control and status for the WART block.
+ */
+union cvmx_fpa_wart_status {
+	u64 u64;
+	struct cvmx_fpa_wart_status_s {
+		u64 reserved_32_63 : 32;
+		u64 status : 32;
+	} s;
+	struct cvmx_fpa_wart_status_s cn30xx;
+	struct cvmx_fpa_wart_status_s cn31xx;
+	struct cvmx_fpa_wart_status_s cn38xx;
+	struct cvmx_fpa_wart_status_s cn38xxp2;
+	struct cvmx_fpa_wart_status_s cn50xx;
+	struct cvmx_fpa_wart_status_s cn52xx;
+	struct cvmx_fpa_wart_status_s cn52xxp1;
+	struct cvmx_fpa_wart_status_s cn56xx;
+	struct cvmx_fpa_wart_status_s cn56xxp1;
+	struct cvmx_fpa_wart_status_s cn58xx;
+	struct cvmx_fpa_wart_status_s cn58xxp1;
+};
+
+typedef union cvmx_fpa_wart_status cvmx_fpa_wart_status_t;
+
+/**
+ * cvmx_fpa_wqe_threshold
+ *
+ * "When the value of FPA_QUE#_AVAILABLE[QUE_SIZ] (\# is determined by the value of
+ * IPD_WQE_FPA_QUEUE) is Less than the value of this
+ * register a low pool count signal is sent to the PCIe packet instruction engine (to make it
+ * stop reading instructions) and to the
+ * Packet-Arbiter informing it to not give grants to packets MAC with the exception of the PCIe
+ * MAC."
+ */
+union cvmx_fpa_wqe_threshold {
+	u64 u64;
+	struct cvmx_fpa_wqe_threshold_s {
+		u64 reserved_32_63 : 32;
+		u64 thresh : 32;
+	} s;
+	struct cvmx_fpa_wqe_threshold_s cn61xx;
+	struct cvmx_fpa_wqe_threshold_s cn63xx;
+	struct cvmx_fpa_wqe_threshold_s cn66xx;
+	struct cvmx_fpa_wqe_threshold_s cn68xx;
+	struct cvmx_fpa_wqe_threshold_s cn68xxp1;
+	struct cvmx_fpa_wqe_threshold_s cn70xx;
+	struct cvmx_fpa_wqe_threshold_s cn70xxp1;
+	struct cvmx_fpa_wqe_threshold_s cnf71xx;
+};
+
+typedef union cvmx_fpa_wqe_threshold cvmx_fpa_wqe_threshold_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-fpa.h b/arch/mips/mach-octeon/include/mach/cvmx-fpa.h
new file mode 100644
index 0000000..297fb3f
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-fpa.h
@@ -0,0 +1,217 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the hardware Free Pool Allocator.
+ */
+
+#ifndef __CVMX_FPA_H__
+#define __CVMX_FPA_H__
+
+#include "cvmx-scratch.h"
+#include "cvmx-fpa-defs.h"
+#include "cvmx-fpa1.h"
+#include "cvmx-fpa3.h"
+
+#define CVMX_FPA_MIN_BLOCK_SIZE 128
+#define CVMX_FPA_ALIGNMENT	128
+#define CVMX_FPA_POOL_NAME_LEN	16
+
+/* On CN78XX in backward-compatible mode, pool is mapped to AURA */
+#define CVMX_FPA_NUM_POOLS                                                                         \
+	(octeon_has_feature(OCTEON_FEATURE_FPA3) ? cvmx_fpa3_num_auras() : CVMX_FPA1_NUM_POOLS)
+
+/**
+ * Structure to store FPA pool configuration parameters.
+ */
+struct cvmx_fpa_pool_config {
+	s64 pool_num;
+	u64 buffer_size;
+	u64 buffer_count;
+};
+
+typedef struct cvmx_fpa_pool_config cvmx_fpa_pool_config_t;
+
+/**
+ * Return the name of the pool
+ *
+ * @param pool_num   Pool to get the name of
+ * @return The name
+ */
+const char *cvmx_fpa_get_name(int pool_num);
+
+/**
+ * Initialize FPA per node
+ */
+int cvmx_fpa_global_init_node(int node);
+
+/**
+ * Enable the FPA
+ */
+static inline void cvmx_fpa_enable(void)
+{
+	if (!octeon_has_feature(OCTEON_FEATURE_FPA3))
+		cvmx_fpa1_enable();
+	else
+		cvmx_fpa_global_init_node(cvmx_get_node_num());
+}
+
+/**
+ * Disable the FPA
+ */
+static inline void cvmx_fpa_disable(void)
+{
+	if (!octeon_has_feature(OCTEON_FEATURE_FPA3))
+		cvmx_fpa1_disable();
+	/* FPA3 does not have a disable function */
+}
+
+/**
+ * @INTERNAL
+ * @deprecated OBSOLETE
+ *
+ * Kept for transition assistance only
+ */
+static inline void cvmx_fpa_global_initialize(void)
+{
+	cvmx_fpa_global_init_node(cvmx_get_node_num());
+}
+
+/**
+ * @INTERNAL
+ *
+ * Convert FPA1 style POOL into FPA3 AURA in
+ * backward compatibility mode.
+ */
+static inline cvmx_fpa3_gaura_t cvmx_fpa1_pool_to_fpa3_aura(cvmx_fpa1_pool_t pool)
+{
+	if ((octeon_has_feature(OCTEON_FEATURE_FPA3))) {
+		unsigned int node = cvmx_get_node_num();
+		cvmx_fpa3_gaura_t aura = __cvmx_fpa3_gaura(node, pool);
+		return aura;
+	}
+	return CVMX_FPA3_INVALID_GAURA;
+}
+
+/**
+ * Get a new block from the FPA
+ *
+ * @param pool   Pool to get the block from
+ * @return Pointer to the block or NULL on failure
+ */
+static inline void *cvmx_fpa_alloc(u64 pool)
+{
+	/* FPA3 is handled differently */
+	if ((octeon_has_feature(OCTEON_FEATURE_FPA3))) {
+		return cvmx_fpa3_alloc(cvmx_fpa1_pool_to_fpa3_aura(pool));
+	} else
+		return cvmx_fpa1_alloc(pool);
+}
+
+/**
+ * Asynchronously get a new block from the FPA
+ *
+ * The result of cvmx_fpa_async_alloc() may be retrieved using
+ * cvmx_fpa_async_alloc_finish().
+ *
+ * @param scr_addr Local scratch address to put response in.  This is a byte
+ *		   address but must be 8 byte aligned.
+ * @param pool      Pool to get the block from
+ */
+static inline void cvmx_fpa_async_alloc(u64 scr_addr, u64 pool)
+{
+	if ((octeon_has_feature(OCTEON_FEATURE_FPA3))) {
+		return cvmx_fpa3_async_alloc(scr_addr, cvmx_fpa1_pool_to_fpa3_aura(pool));
+	} else
+		return cvmx_fpa1_async_alloc(scr_addr, pool);
+}
+
+/**
+ * Retrieve the result of cvmx_fpa_async_alloc
+ *
+ * @param scr_addr The Local scratch address.  Must be the same value
+ * passed to cvmx_fpa_async_alloc().
+ *
+ * @param pool Pool the block came from.  Must be the same value
+ * passed to cvmx_fpa_async_alloc.
+ *
+ * @return Pointer to the block or NULL on failure
+ */
+static inline void *cvmx_fpa_async_alloc_finish(u64 scr_addr, u64 pool)
+{
+	if ((octeon_has_feature(OCTEON_FEATURE_FPA3)))
+		return cvmx_fpa3_async_alloc_finish(scr_addr, cvmx_fpa1_pool_to_fpa3_aura(pool));
+	else
+		return cvmx_fpa1_async_alloc_finish(scr_addr, pool);
+}
+
+/**
+ * Free a block allocated with a FPA pool.
+ * Does NOT provide memory ordering in cases where the memory block was
+ * modified by the core.
+ *
+ * @param ptr    Block to free
+ * @param pool   Pool to put it in
+ * @param num_cache_lines
+ *               Cache lines to invalidate
+ */
+static inline void cvmx_fpa_free_nosync(void *ptr, u64 pool, u64 num_cache_lines)
+{
+	/* FPA3 is handled differently */
+	if ((octeon_has_feature(OCTEON_FEATURE_FPA3)))
+		cvmx_fpa3_free_nosync(ptr, cvmx_fpa1_pool_to_fpa3_aura(pool), num_cache_lines);
+	else
+		cvmx_fpa1_free_nosync(ptr, pool, num_cache_lines);
+}
+
+/**
+ * Free a block allocated with a FPA pool.  Provides required memory
+ * ordering in cases where memory block was modified by core.
+ *
+ * @param ptr    Block to free
+ * @param pool   Pool to put it in
+ * @param num_cache_lines
+ *               Cache lines to invalidate
+ */
+static inline void cvmx_fpa_free(void *ptr, u64 pool, u64 num_cache_lines)
+{
+	if ((octeon_has_feature(OCTEON_FEATURE_FPA3)))
+		cvmx_fpa3_free(ptr, cvmx_fpa1_pool_to_fpa3_aura(pool), num_cache_lines);
+	else
+		cvmx_fpa1_free(ptr, pool, num_cache_lines);
+}
+
+/**
+ * Setup a FPA pool to control a new block of memory.
+ * This can only be called once per pool. Make sure proper
+ * locking enforces this.
+ *
+ * @param pool       Pool to initialize
+ * @param name       Constant character string to name this pool.
+ *                   String is not copied.
+ * @param buffer     Pointer to the block of memory to use. This must be
+ *                   accessible by all processors and external hardware.
+ * @param block_size Size for each block controlled by the FPA
+ * @param num_blocks Number of blocks
+ *
+ * @return the pool number on Success,
+ *         -1 on failure
+ */
+int cvmx_fpa_setup_pool(int pool, const char *name, void *buffer, u64 block_size, u64 num_blocks);
+
+int cvmx_fpa_shutdown_pool(int pool);
+
+/**
+ * Gets the block size of buffer in specified pool
+ * @param pool	 Pool to get the block size from
+ * @return       Size of buffer in specified pool
+ */
+unsigned int cvmx_fpa_get_block_size(int pool);
+
+int cvmx_fpa_is_pool_available(int pool_num);
+u64 cvmx_fpa_get_pool_owner(int pool_num);
+int cvmx_fpa_get_max_pools(void);
+int cvmx_fpa_get_current_count(int pool_num);
+int cvmx_fpa_validate_pool(int pool);
+
+#endif /*  __CVM_FPA_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-fpa1.h b/arch/mips/mach-octeon/include/mach/cvmx-fpa1.h
new file mode 100644
index 0000000..6985083
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-fpa1.h
@@ -0,0 +1,196 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the hardware Free Pool Allocator on Octeon chips.
+ * These are the legacy models, i.e. prior to CN78XX/CN76XX.
+ */
+
+#ifndef __CVMX_FPA1_HW_H__
+#define __CVMX_FPA1_HW_H__
+
+#include "cvmx-scratch.h"
+#include "cvmx-fpa-defs.h"
+#include "cvmx-fpa3.h"
+
+/* Legacy pool range is 0..7 and 8 on CN68XX */
+typedef int cvmx_fpa1_pool_t;
+
+#define CVMX_FPA1_NUM_POOLS    8
+#define CVMX_FPA1_INVALID_POOL ((cvmx_fpa1_pool_t)-1)
+#define CVMX_FPA1_NAME_SIZE    16
+
+/**
+ * Structure describing the data format used for stores to the FPA.
+ */
+typedef union {
+	u64 u64;
+	struct {
+		u64 scraddr : 8;
+		u64 len : 8;
+		u64 did : 8;
+		u64 addr : 40;
+	} s;
+} cvmx_fpa1_iobdma_data_t;
+
+/*
+ * Allocate or reserve the specified fpa pool.
+ *
+ * @param pool	  FPA pool to allocate/reserve. If -1 it
+ *                finds an empty pool to allocate.
+ * @return        Alloctaed pool number or CVMX_FPA1_POOL_INVALID
+ *                if fails to allocate the pool
+ */
+cvmx_fpa1_pool_t cvmx_fpa1_reserve_pool(cvmx_fpa1_pool_t pool);
+
+/**
+ * Free the specified fpa pool.
+ * @param pool	   Pool to free
+ * @return         0 for success -1 failure
+ */
+int cvmx_fpa1_release_pool(cvmx_fpa1_pool_t pool);
+
+static inline void cvmx_fpa1_free(void *ptr, cvmx_fpa1_pool_t pool, u64 num_cache_lines)
+{
+	cvmx_addr_t newptr;
+
+	newptr.u64 = cvmx_ptr_to_phys(ptr);
+	newptr.sfilldidspace.didspace = CVMX_ADDR_DIDSPACE(CVMX_FULL_DID(CVMX_OCT_DID_FPA, pool));
+	/* Make sure that any previous writes to memory go out before we free
+	 * this buffer.  This also serves as a barrier to prevent GCC from
+	 * reordering operations to after the free.
+	 */
+	CVMX_SYNCWS;
+	/* value written is number of cache lines not written back */
+	cvmx_write_io(newptr.u64, num_cache_lines);
+}
+
+static inline void cvmx_fpa1_free_nosync(void *ptr, cvmx_fpa1_pool_t pool,
+					 unsigned int num_cache_lines)
+{
+	cvmx_addr_t newptr;
+
+	newptr.u64 = cvmx_ptr_to_phys(ptr);
+	newptr.sfilldidspace.didspace = CVMX_ADDR_DIDSPACE(CVMX_FULL_DID(CVMX_OCT_DID_FPA, pool));
+	/* Prevent GCC from reordering around free */
+	asm volatile("" : : : "memory");
+	/* value written is number of cache lines not written back */
+	cvmx_write_io(newptr.u64, num_cache_lines);
+}
+
+/**
+ * Enable the FPA for use. Must be performed after any CSR
+ * configuration but before any other FPA functions.
+ */
+static inline void cvmx_fpa1_enable(void)
+{
+	cvmx_fpa_ctl_status_t status;
+
+	status.u64 = csr_rd(CVMX_FPA_CTL_STATUS);
+	if (status.s.enb) {
+		/*
+		 * CN68XXP1 should not reset the FPA (doing so may break
+		 * the SSO, so we may end up enabling it more than once.
+		 * Just return and don't spew messages.
+		 */
+		return;
+	}
+
+	status.u64 = 0;
+	status.s.enb = 1;
+	csr_wr(CVMX_FPA_CTL_STATUS, status.u64);
+}
+
+/**
+ * Reset FPA to disable. Make sure buffers from all FPA pools are freed
+ * before disabling FPA.
+ */
+static inline void cvmx_fpa1_disable(void)
+{
+	cvmx_fpa_ctl_status_t status;
+
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX_PASS1))
+		return;
+
+	status.u64 = csr_rd(CVMX_FPA_CTL_STATUS);
+	status.s.reset = 1;
+	csr_wr(CVMX_FPA_CTL_STATUS, status.u64);
+}
+
+static inline void *cvmx_fpa1_alloc(cvmx_fpa1_pool_t pool)
+{
+	u64 address;
+
+	for (;;) {
+		address = csr_rd(CVMX_ADDR_DID(CVMX_FULL_DID(CVMX_OCT_DID_FPA, pool)));
+		if (cvmx_likely(address)) {
+			return cvmx_phys_to_ptr(address);
+		} else {
+			if (csr_rd(CVMX_FPA_QUEX_AVAILABLE(pool)) > 0)
+				udelay(50);
+			else
+				return NULL;
+		}
+	}
+}
+
+/**
+ * Asynchronously get a new block from the FPA
+ * @INTERNAL
+ *
+ * The result of cvmx_fpa_async_alloc() may be retrieved using
+ * cvmx_fpa_async_alloc_finish().
+ *
+ * @param scr_addr Local scratch address to put response in.  This is a byte
+ *		   address but must be 8 byte aligned.
+ * @param pool      Pool to get the block from
+ */
+static inline void cvmx_fpa1_async_alloc(u64 scr_addr, cvmx_fpa1_pool_t pool)
+{
+	cvmx_fpa1_iobdma_data_t data;
+
+	/* Hardware only uses 64 bit aligned locations, so convert from byte
+	 * address to 64-bit index
+	 */
+	data.u64 = 0ull;
+	data.s.scraddr = scr_addr >> 3;
+	data.s.len = 1;
+	data.s.did = CVMX_FULL_DID(CVMX_OCT_DID_FPA, pool);
+	data.s.addr = 0;
+
+	cvmx_scratch_write64(scr_addr, 0ull);
+	CVMX_SYNCW;
+	cvmx_send_single(data.u64);
+}
+
+/**
+ * Retrieve the result of cvmx_fpa_async_alloc
+ * @INTERNAL
+ *
+ * @param scr_addr The Local scratch address.  Must be the same value
+ * passed to cvmx_fpa_async_alloc().
+ *
+ * @param pool Pool the block came from.  Must be the same value
+ * passed to cvmx_fpa_async_alloc.
+ *
+ * @return Pointer to the block or NULL on failure
+ */
+static inline void *cvmx_fpa1_async_alloc_finish(u64 scr_addr, cvmx_fpa1_pool_t pool)
+{
+	u64 address;
+
+	CVMX_SYNCIOBDMA;
+
+	address = cvmx_scratch_read64(scr_addr);
+	if (cvmx_likely(address))
+		return cvmx_phys_to_ptr(address);
+	else
+		return cvmx_fpa1_alloc(pool);
+}
+
+static inline u64 cvmx_fpa1_get_available(cvmx_fpa1_pool_t pool)
+{
+	return csr_rd(CVMX_FPA_QUEX_AVAILABLE(pool));
+}
+
+#endif /* __CVMX_FPA1_HW_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-fpa3.h b/arch/mips/mach-octeon/include/mach/cvmx-fpa3.h
new file mode 100644
index 0000000..229982b
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-fpa3.h
@@ -0,0 +1,566 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the CN78XX Free Pool Allocator, a.k.a. FPA3
+ */
+
+#include "cvmx-address.h"
+#include "cvmx-fpa-defs.h"
+#include "cvmx-scratch.h"
+
+#ifndef __CVMX_FPA3_H__
+#define __CVMX_FPA3_H__
+
+typedef struct {
+	unsigned res0 : 6;
+	unsigned node : 2;
+	unsigned res1 : 2;
+	unsigned lpool : 6;
+	unsigned valid_magic : 16;
+} cvmx_fpa3_pool_t;
+
+typedef struct {
+	unsigned res0 : 6;
+	unsigned node : 2;
+	unsigned res1 : 6;
+	unsigned laura : 10;
+	unsigned valid_magic : 16;
+} cvmx_fpa3_gaura_t;
+
+#define CVMX_FPA3_VALID_MAGIC	0xf9a3
+#define CVMX_FPA3_INVALID_GAURA ((cvmx_fpa3_gaura_t){ 0, 0, 0, 0, 0 })
+#define CVMX_FPA3_INVALID_POOL	((cvmx_fpa3_pool_t){ 0, 0, 0, 0, 0 })
+
+static inline bool __cvmx_fpa3_aura_valid(cvmx_fpa3_gaura_t aura)
+{
+	if (aura.valid_magic != CVMX_FPA3_VALID_MAGIC)
+		return false;
+	return true;
+}
+
+static inline bool __cvmx_fpa3_pool_valid(cvmx_fpa3_pool_t pool)
+{
+	if (pool.valid_magic != CVMX_FPA3_VALID_MAGIC)
+		return false;
+	return true;
+}
+
+static inline cvmx_fpa3_gaura_t __cvmx_fpa3_gaura(int node, int laura)
+{
+	cvmx_fpa3_gaura_t aura;
+
+	if (node < 0)
+		node = cvmx_get_node_num();
+	if (laura < 0)
+		return CVMX_FPA3_INVALID_GAURA;
+
+	aura.node = node;
+	aura.laura = laura;
+	aura.valid_magic = CVMX_FPA3_VALID_MAGIC;
+	return aura;
+}
+
+static inline cvmx_fpa3_pool_t __cvmx_fpa3_pool(int node, int lpool)
+{
+	cvmx_fpa3_pool_t pool;
+
+	if (node < 0)
+		node = cvmx_get_node_num();
+	if (lpool < 0)
+		return CVMX_FPA3_INVALID_POOL;
+
+	pool.node = node;
+	pool.lpool = lpool;
+	pool.valid_magic = CVMX_FPA3_VALID_MAGIC;
+	return pool;
+}
+
+#undef CVMX_FPA3_VALID_MAGIC
+
+/**
+ * Structure describing the data format used for stores to the FPA.
+ */
+typedef union {
+	u64 u64;
+	struct {
+		u64 scraddr : 8;
+		u64 len : 8;
+		u64 did : 8;
+		u64 addr : 40;
+	} s;
+	struct {
+		u64 scraddr : 8;
+		u64 len : 8;
+		u64 did : 8;
+		u64 node : 4;
+		u64 red : 1;
+		u64 reserved2 : 9;
+		u64 aura : 10;
+		u64 reserved3 : 16;
+	} cn78xx;
+} cvmx_fpa3_iobdma_data_t;
+
+/**
+ * Struct describing load allocate operation addresses for FPA pool.
+ */
+union cvmx_fpa3_load_data {
+	u64 u64;
+	struct {
+		u64 seg : 2;
+		u64 reserved1 : 13;
+		u64 io : 1;
+		u64 did : 8;
+		u64 node : 4;
+		u64 red : 1;
+		u64 reserved2 : 9;
+		u64 aura : 10;
+		u64 reserved3 : 16;
+	};
+};
+
+typedef union cvmx_fpa3_load_data cvmx_fpa3_load_data_t;
+
+/**
+ * Struct describing store free operation addresses from FPA pool.
+ */
+union cvmx_fpa3_store_addr {
+	u64 u64;
+	struct {
+		u64 seg : 2;
+		u64 reserved1 : 13;
+		u64 io : 1;
+		u64 did : 8;
+		u64 node : 4;
+		u64 reserved2 : 10;
+		u64 aura : 10;
+		u64 fabs : 1;
+		u64 reserved3 : 3;
+		u64 dwb_count : 9;
+		u64 reserved4 : 3;
+	};
+};
+
+typedef union cvmx_fpa3_store_addr cvmx_fpa3_store_addr_t;
+
+enum cvmx_fpa3_pool_alignment_e {
+	FPA_NATURAL_ALIGNMENT,
+	FPA_OFFSET_ALIGNMENT,
+	FPA_OPAQUE_ALIGNMENT
+};
+
+#define CVMX_FPA3_AURAX_LIMIT_MAX ((1ull << 40) - 1)
+
+/**
+ * @INTERNAL
+ * Accessor functions to return number of POOLS in an FPA3
+ * depending on SoC model.
+ * The number is per-node for models supporting multi-node configurations.
+ */
+static inline int cvmx_fpa3_num_pools(void)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return 64;
+	if (OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		return 32;
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX))
+		return 32;
+	printf("ERROR: %s: Unknowm model\n", __func__);
+	return -1;
+}
+
+/**
+ * @INTERNAL
+ * Accessor functions to return number of AURAS in an FPA3
+ * depending on SoC model.
+ * The number is per-node for models supporting multi-node configurations.
+ */
+static inline int cvmx_fpa3_num_auras(void)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return 1024;
+	if (OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		return 512;
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX))
+		return 512;
+	printf("ERROR: %s: Unknowm model\n", __func__);
+	return -1;
+}
+
+/**
+ * Get the FPA3 POOL underneath FPA3 AURA, containing all its buffers
+ *
+ */
+static inline cvmx_fpa3_pool_t cvmx_fpa3_aura_to_pool(cvmx_fpa3_gaura_t aura)
+{
+	cvmx_fpa3_pool_t pool;
+	cvmx_fpa_aurax_pool_t aurax_pool;
+
+	aurax_pool.u64 = cvmx_read_csr_node(aura.node, CVMX_FPA_AURAX_POOL(aura.laura));
+
+	pool = __cvmx_fpa3_pool(aura.node, aurax_pool.s.pool);
+	return pool;
+}
+
+/**
+ * Get a new block from the FPA pool
+ *
+ * @param aura  - aura number
+ * @return pointer to the block or NULL on failure
+ */
+static inline void *cvmx_fpa3_alloc(cvmx_fpa3_gaura_t aura)
+{
+	u64 address;
+	cvmx_fpa3_load_data_t load_addr;
+
+	load_addr.u64 = 0;
+	load_addr.seg = CVMX_MIPS_SPACE_XKPHYS;
+	load_addr.io = 1;
+	load_addr.did = 0x29; /* Device ID. Indicates FPA. */
+	load_addr.node = aura.node;
+	load_addr.red = 0; /* Perform RED on allocation.
+				  * FIXME to use config option
+				  */
+	load_addr.aura = aura.laura;
+
+	address = cvmx_read64_uint64(load_addr.u64);
+	if (!address)
+		return NULL;
+	return cvmx_phys_to_ptr(address);
+}
+
+/**
+ * Asynchronously get a new block from the FPA
+ *
+ * The result of cvmx_fpa_async_alloc() may be retrieved using
+ * cvmx_fpa_async_alloc_finish().
+ *
+ * @param scr_addr Local scratch address to put response in.  This is a byte
+ *		   address but must be 8 byte aligned.
+ * @param aura     Global aura to get the block from
+ */
+static inline void cvmx_fpa3_async_alloc(u64 scr_addr, cvmx_fpa3_gaura_t aura)
+{
+	cvmx_fpa3_iobdma_data_t data;
+
+	/* Hardware only uses 64 bit aligned locations, so convert from byte
+	 * address to 64-bit index
+	 */
+	data.u64 = 0ull;
+	data.cn78xx.scraddr = scr_addr >> 3;
+	data.cn78xx.len = 1;
+	data.cn78xx.did = 0x29;
+	data.cn78xx.node = aura.node;
+	data.cn78xx.aura = aura.laura;
+	cvmx_scratch_write64(scr_addr, 0ull);
+
+	CVMX_SYNCW;
+	cvmx_send_single(data.u64);
+}
+
+/**
+ * Retrieve the result of cvmx_fpa3_async_alloc
+ *
+ * @param scr_addr The Local scratch address.  Must be the same value
+ * passed to cvmx_fpa_async_alloc().
+ *
+ * @param aura Global aura the block came from.  Must be the same value
+ * passed to cvmx_fpa_async_alloc.
+ *
+ * @return Pointer to the block or NULL on failure
+ */
+static inline void *cvmx_fpa3_async_alloc_finish(u64 scr_addr, cvmx_fpa3_gaura_t aura)
+{
+	u64 address;
+
+	CVMX_SYNCIOBDMA;
+
+	address = cvmx_scratch_read64(scr_addr);
+	if (cvmx_likely(address))
+		return cvmx_phys_to_ptr(address);
+	else
+		/* Try regular alloc if async failed */
+		return cvmx_fpa3_alloc(aura);
+}
+
+/**
+ * Free a pointer back to the pool.
+ *
+ * @param aura   global aura number
+ * @param ptr    physical address of block to free.
+ * @param num_cache_lines Cache lines to invalidate
+ */
+static inline void cvmx_fpa3_free(void *ptr, cvmx_fpa3_gaura_t aura, unsigned int num_cache_lines)
+{
+	cvmx_fpa3_store_addr_t newptr;
+	cvmx_addr_t newdata;
+
+	newdata.u64 = cvmx_ptr_to_phys(ptr);
+
+	/* Make sure that any previous writes to memory go out before we free
+	   this buffer. This also serves as a barrier to prevent GCC from
+	   reordering operations to after the free. */
+	CVMX_SYNCWS;
+
+	newptr.u64 = 0;
+	newptr.seg = CVMX_MIPS_SPACE_XKPHYS;
+	newptr.io = 1;
+	newptr.did = 0x29; /* Device id, indicates FPA */
+	newptr.node = aura.node;
+	newptr.aura = aura.laura;
+	newptr.fabs = 0; /* Free absolute. FIXME to use config option */
+	newptr.dwb_count = num_cache_lines;
+
+	cvmx_write_io(newptr.u64, newdata.u64);
+}
+
+/**
+ * Free a pointer back to the pool without flushing the write buffer.
+ *
+ * @param aura   global aura number
+ * @param ptr    physical address of block to free.
+ * @param num_cache_lines Cache lines to invalidate
+ */
+static inline void cvmx_fpa3_free_nosync(void *ptr, cvmx_fpa3_gaura_t aura,
+					 unsigned int num_cache_lines)
+{
+	cvmx_fpa3_store_addr_t newptr;
+	cvmx_addr_t newdata;
+
+	newdata.u64 = cvmx_ptr_to_phys(ptr);
+
+	/* Prevent GCC from reordering writes to (*ptr) */
+	asm volatile("" : : : "memory");
+
+	newptr.u64 = 0;
+	newptr.seg = CVMX_MIPS_SPACE_XKPHYS;
+	newptr.io = 1;
+	newptr.did = 0x29; /* Device id, indicates FPA */
+	newptr.node = aura.node;
+	newptr.aura = aura.laura;
+	newptr.fabs = 0; /* Free absolute. FIXME to use config option */
+	newptr.dwb_count = num_cache_lines;
+
+	cvmx_write_io(newptr.u64, newdata.u64);
+}
+
+static inline int cvmx_fpa3_pool_is_enabled(cvmx_fpa3_pool_t pool)
+{
+	cvmx_fpa_poolx_cfg_t pool_cfg;
+
+	if (!__cvmx_fpa3_pool_valid(pool))
+		return -1;
+
+	pool_cfg.u64 = cvmx_read_csr_node(pool.node, CVMX_FPA_POOLX_CFG(pool.lpool));
+	return pool_cfg.cn78xx.ena;
+}
+
+static inline int cvmx_fpa3_config_red_params(unsigned int node, int qos_avg_en, int red_lvl_dly,
+					      int avg_dly)
+{
+	cvmx_fpa_gen_cfg_t fpa_cfg;
+	cvmx_fpa_red_delay_t red_delay;
+
+	fpa_cfg.u64 = cvmx_read_csr_node(node, CVMX_FPA_GEN_CFG);
+	fpa_cfg.s.avg_en = qos_avg_en;
+	fpa_cfg.s.lvl_dly = red_lvl_dly;
+	cvmx_write_csr_node(node, CVMX_FPA_GEN_CFG, fpa_cfg.u64);
+
+	red_delay.u64 = cvmx_read_csr_node(node, CVMX_FPA_RED_DELAY);
+	red_delay.s.avg_dly = avg_dly;
+	cvmx_write_csr_node(node, CVMX_FPA_RED_DELAY, red_delay.u64);
+	return 0;
+}
+
+/**
+ * Gets the buffer size of the specified pool,
+ *
+ * @param aura Global aura number
+ * @return Returns size of the buffers in the specified pool.
+ */
+static inline int cvmx_fpa3_get_aura_buf_size(cvmx_fpa3_gaura_t aura)
+{
+	cvmx_fpa3_pool_t pool;
+	cvmx_fpa_poolx_cfg_t pool_cfg;
+	int block_size;
+
+	pool = cvmx_fpa3_aura_to_pool(aura);
+
+	pool_cfg.u64 = cvmx_read_csr_node(pool.node, CVMX_FPA_POOLX_CFG(pool.lpool));
+	block_size = pool_cfg.cn78xx.buf_size << 7;
+	return block_size;
+}
+
+/**
+ * Return the number of available buffers in an AURA
+ *
+ * @param aura to receive count for
+ * @return available buffer count
+ */
+static inline long long cvmx_fpa3_get_available(cvmx_fpa3_gaura_t aura)
+{
+	cvmx_fpa3_pool_t pool;
+	cvmx_fpa_poolx_available_t avail_reg;
+	cvmx_fpa_aurax_cnt_t cnt_reg;
+	cvmx_fpa_aurax_cnt_limit_t limit_reg;
+	long long ret;
+
+	pool = cvmx_fpa3_aura_to_pool(aura);
+
+	/* Get POOL available buffer count */
+	avail_reg.u64 = cvmx_read_csr_node(pool.node, CVMX_FPA_POOLX_AVAILABLE(pool.lpool));
+
+	/* Get AURA current available count */
+	cnt_reg.u64 = cvmx_read_csr_node(aura.node, CVMX_FPA_AURAX_CNT(aura.laura));
+	limit_reg.u64 = cvmx_read_csr_node(aura.node, CVMX_FPA_AURAX_CNT_LIMIT(aura.laura));
+
+	if (limit_reg.cn78xx.limit < cnt_reg.cn78xx.cnt)
+		return 0;
+
+	/* Calculate AURA-based buffer allowance */
+	ret = limit_reg.cn78xx.limit - cnt_reg.cn78xx.cnt;
+
+	/* Use POOL real buffer availability when less then allowance */
+	if (ret > (long long)avail_reg.cn78xx.count)
+		ret = avail_reg.cn78xx.count;
+
+	return ret;
+}
+
+/**
+ * Configure the QoS parameters of an FPA3 AURA
+ *
+ * @param aura is the FPA3 AURA handle
+ * @param ena_bp enables backpressure when outstanding count exceeds 'bp_thresh'
+ * @param ena_red enables random early discard when outstanding count exceeds 'pass_thresh'
+ * @param pass_thresh is the maximum count to invoke flow control
+ * @param drop_thresh is the count threshold to begin dropping packets
+ * @param bp_thresh is the back-pressure threshold
+ *
+ */
+static inline void cvmx_fpa3_setup_aura_qos(cvmx_fpa3_gaura_t aura, bool ena_red, u64 pass_thresh,
+					    u64 drop_thresh, bool ena_bp, u64 bp_thresh)
+{
+	unsigned int shift = 0;
+	u64 shift_thresh;
+	cvmx_fpa_aurax_cnt_limit_t limit_reg;
+	cvmx_fpa_aurax_cnt_levels_t aura_level;
+
+	if (!__cvmx_fpa3_aura_valid(aura))
+		return;
+
+	/* Get AURAX count limit for validation */
+	limit_reg.u64 = cvmx_read_csr_node(aura.node, CVMX_FPA_AURAX_CNT_LIMIT(aura.laura));
+
+	if (pass_thresh < 256)
+		pass_thresh = 255;
+
+	if (drop_thresh <= pass_thresh || drop_thresh > limit_reg.cn78xx.limit)
+		drop_thresh = limit_reg.cn78xx.limit;
+
+	if (bp_thresh < 256 || bp_thresh > limit_reg.cn78xx.limit)
+		bp_thresh = limit_reg.cn78xx.limit >> 1;
+
+	shift_thresh = (bp_thresh > drop_thresh) ? bp_thresh : drop_thresh;
+
+	/* Calculate shift so that the largest threshold fits in 8 bits */
+	for (shift = 0; shift < (1 << 6); shift++) {
+		if (0 == ((shift_thresh >> shift) & ~0xffull))
+			break;
+	};
+
+	aura_level.u64 = cvmx_read_csr_node(aura.node, CVMX_FPA_AURAX_CNT_LEVELS(aura.laura));
+	aura_level.s.pass = pass_thresh >> shift;
+	aura_level.s.drop = drop_thresh >> shift;
+	aura_level.s.bp = bp_thresh >> shift;
+	aura_level.s.shift = shift;
+	aura_level.s.red_ena = ena_red;
+	aura_level.s.bp_ena = ena_bp;
+	cvmx_write_csr_node(aura.node, CVMX_FPA_AURAX_CNT_LEVELS(aura.laura), aura_level.u64);
+}
+
+cvmx_fpa3_gaura_t cvmx_fpa3_reserve_aura(int node, int desired_aura_num);
+int cvmx_fpa3_release_aura(cvmx_fpa3_gaura_t aura);
+cvmx_fpa3_pool_t cvmx_fpa3_reserve_pool(int node, int desired_pool_num);
+int cvmx_fpa3_release_pool(cvmx_fpa3_pool_t pool);
+int cvmx_fpa3_is_aura_available(int node, int aura_num);
+int cvmx_fpa3_is_pool_available(int node, int pool_num);
+
+cvmx_fpa3_pool_t cvmx_fpa3_setup_fill_pool(int node, int desired_pool, const char *name,
+					   unsigned int block_size, unsigned int num_blocks,
+					   void *buffer);
+
+/**
+ * Function to attach an aura to an existing pool
+ *
+ * @param node - configure fpa on this node
+ * @param pool - configured pool to attach aura to
+ * @param desired_aura - pointer to aura to use, set to -1 to allocate
+ * @param name - name to register
+ * @param block_size - size of buffers to use
+ * @param num_blocks - number of blocks to allocate
+ *
+ * @return configured gaura on success, CVMX_FPA3_INVALID_GAURA on failure
+ */
+cvmx_fpa3_gaura_t cvmx_fpa3_set_aura_for_pool(cvmx_fpa3_pool_t pool, int desired_aura,
+					      const char *name, unsigned int block_size,
+					      unsigned int num_blocks);
+
+/**
+ * Function to setup and initialize a pool.
+ *
+ * @param node - configure fpa on this node
+ * @param desired_aura - aura to use, -1 for dynamic allocation
+ * @param name - name to register
+ * @param block_size - size of buffers in pool
+ * @param num_blocks - max number of buffers allowed
+ */
+cvmx_fpa3_gaura_t cvmx_fpa3_setup_aura_and_pool(int node, int desired_aura, const char *name,
+						void *buffer, unsigned int block_size,
+						unsigned int num_blocks);
+
+int cvmx_fpa3_shutdown_aura_and_pool(cvmx_fpa3_gaura_t aura);
+int cvmx_fpa3_shutdown_aura(cvmx_fpa3_gaura_t aura);
+int cvmx_fpa3_shutdown_pool(cvmx_fpa3_pool_t pool);
+const char *cvmx_fpa3_get_pool_name(cvmx_fpa3_pool_t pool);
+int cvmx_fpa3_get_pool_buf_size(cvmx_fpa3_pool_t pool);
+const char *cvmx_fpa3_get_aura_name(cvmx_fpa3_gaura_t aura);
+
+/* FIXME: Need a different macro for stage2 of u-boot */
+
+static inline void cvmx_fpa3_stage2_init(int aura, int pool, u64 stack_paddr, int stacklen,
+					 int buffer_sz, int buf_cnt)
+{
+	cvmx_fpa_poolx_cfg_t pool_cfg;
+
+	/* Configure pool stack */
+	cvmx_write_csr_node(0, CVMX_FPA_POOLX_STACK_BASE(pool), stack_paddr);
+	cvmx_write_csr_node(0, CVMX_FPA_POOLX_STACK_ADDR(pool), stack_paddr);
+	cvmx_write_csr_node(0, CVMX_FPA_POOLX_STACK_END(pool), stack_paddr + stacklen);
+
+	/* Configure pool with buffer size */
+	pool_cfg.u64 = 0;
+	pool_cfg.cn78xx.nat_align = 1;
+	pool_cfg.cn78xx.buf_size = buffer_sz >> 7;
+	pool_cfg.cn78xx.l_type = 0x2;
+	pool_cfg.cn78xx.ena = 0;
+	cvmx_write_csr_node(0, CVMX_FPA_POOLX_CFG(pool), pool_cfg.u64);
+	/* Reset pool before starting */
+	pool_cfg.cn78xx.ena = 1;
+	cvmx_write_csr_node(0, CVMX_FPA_POOLX_CFG(pool), pool_cfg.u64);
+
+	cvmx_write_csr_node(0, CVMX_FPA_AURAX_CFG(aura), 0);
+	cvmx_write_csr_node(0, CVMX_FPA_AURAX_CNT_ADD(aura), buf_cnt);
+	cvmx_write_csr_node(0, CVMX_FPA_AURAX_POOL(aura), (u64)pool);
+}
+
+static inline void cvmx_fpa3_stage2_disable(int aura, int pool)
+{
+	cvmx_write_csr_node(0, CVMX_FPA_AURAX_POOL(aura), 0);
+	cvmx_write_csr_node(0, CVMX_FPA_POOLX_CFG(pool), 0);
+	cvmx_write_csr_node(0, CVMX_FPA_POOLX_STACK_BASE(pool), 0);
+	cvmx_write_csr_node(0, CVMX_FPA_POOLX_STACK_ADDR(pool), 0);
+	cvmx_write_csr_node(0, CVMX_FPA_POOLX_STACK_END(pool), 0);
+}
+
+#endif /* __CVMX_FPA3_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-global-resources.h b/arch/mips/mach-octeon/include/mach/cvmx-global-resources.h
new file mode 100644
index 0000000..28c32dd
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-global-resources.h
@@ -0,0 +1,213 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef _CVMX_GLOBAL_RESOURCES_T_
+#define _CVMX_GLOBAL_RESOURCES_T_
+
+#define CVMX_GLOBAL_RESOURCES_DATA_NAME "cvmx-global-resources"
+
+/*In macros below abbreviation GR stands for global resources. */
+#define CVMX_GR_TAG_INVALID                                                                        \
+	cvmx_get_gr_tag('i', 'n', 'v', 'a', 'l', 'i', 'd', '.', '.', '.', '.', '.', '.', '.', '.', \
+			'.')
+/*Tag for pko que table range. */
+#define CVMX_GR_TAG_PKO_QUEUES                                                                     \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'p', 'k', 'o', '_', 'q', 'u', 'e', 'u', 's', '.', '.', \
+			'.')
+/*Tag for a pko internal ports range */
+#define CVMX_GR_TAG_PKO_IPORTS                                                                     \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'p', 'k', 'o', '_', 'i', 'p', 'o', 'r', 't', '.', '.', \
+			'.')
+#define CVMX_GR_TAG_FPA                                                                            \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'f', 'p', 'a', '.', '.', '.', '.', '.', '.', '.', '.', \
+			'.')
+#define CVMX_GR_TAG_FAU                                                                            \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'f', 'a', 'u', '.', '.', '.', '.', '.', '.', '.', '.', \
+			'.')
+#define CVMX_GR_TAG_SSO_GRP(n)                                                                     \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 's', 's', 'o', '_', '0', (n) + '0', '.', '.', '.',     \
+			'.', '.', '.');
+#define CVMX_GR_TAG_TIM(n)                                                                         \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 't', 'i', 'm', '_', (n) + '0', '.', '.', '.', '.',     \
+			'.', '.', '.')
+#define CVMX_GR_TAG_CLUSTERS(x)                                                                    \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'c', 'l', 'u', 's', 't', 'e', 'r', '_', (x + '0'),     \
+			'.', '.', '.')
+#define CVMX_GR_TAG_CLUSTER_GRP(x)                                                                 \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'c', 'l', 'g', 'r', 'p', '_', (x + '0'), '.', '.',     \
+			'.', '.', '.')
+#define CVMX_GR_TAG_STYLE(x)                                                                       \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 's', 't', 'y', 'l', 'e', '_', (x + '0'), '.', '.',     \
+			'.', '.', '.')
+#define CVMX_GR_TAG_QPG_ENTRY(x)                                                                   \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'q', 'p', 'g', 'e', 't', '_', (x + '0'), '.', '.',     \
+			'.', '.', '.')
+#define CVMX_GR_TAG_BPID(x)                                                                        \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'b', 'p', 'i', 'd', 's', '_', (x + '0'), '.', '.',     \
+			'.', '.', '.')
+#define CVMX_GR_TAG_MTAG_IDX(x)                                                                    \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'm', 't', 'a', 'g', 'x', '_', (x + '0'), '.', '.',     \
+			'.', '.', '.')
+#define CVMX_GR_TAG_PCAM(x, y, z)                                                                  \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'p', 'c', 'a', 'm', '_', (x + '0'), (y + '0'),         \
+			(z + '0'), '.', '.', '.', '.')
+
+#define CVMX_GR_TAG_CIU3_IDT(_n)                                                                   \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'c', 'i', 'u', '3', '_', ((_n) + '0'), '_', 'i', 'd',  \
+			't', '.', '.')
+
+/* Allocation of the 512 SW INTSTs (in the  12 bit SW INTSN space) */
+#define CVMX_GR_TAG_CIU3_SWINTSN(_n)                                                               \
+	cvmx_get_gr_tag('c', 'v', 'm', '_', 'c', 'i', 'u', '3', '_', ((_n) + '0'), '_', 's', 'w',  \
+			'i', 's', 'n')
+
+#define TAG_INIT_PART(A, B, C, D, E, F, G, H)                                                      \
+	((((u64)(A) & 0xff) << 56) | (((u64)(B) & 0xff) << 48) | (((u64)(C) & 0xff) << 40) |             \
+	 (((u64)(D) & 0xff) << 32) | (((u64)(E) & 0xff) << 24) | (((u64)(F) & 0xff) << 16) |             \
+	 (((u64)(G) & 0xff) << 8) | (((u64)(H) & 0xff)))
+
+struct global_resource_tag {
+	u64 lo;
+	u64 hi;
+};
+
+enum cvmx_resource_err { CVMX_RESOURCE_ALLOC_FAILED = -1, CVMX_RESOURCE_ALREADY_RESERVED = -2 };
+
+/*
+ * @INTERNAL
+ * Creates a tag from the specified characters.
+ */
+static inline struct global_resource_tag cvmx_get_gr_tag(char a, char b, char c, char d, char e,
+							 char f, char g, char h, char i, char j,
+							 char k, char l, char m, char n, char o,
+							 char p)
+{
+	struct global_resource_tag tag;
+
+	tag.lo = TAG_INIT_PART(a, b, c, d, e, f, g, h);
+	tag.hi = TAG_INIT_PART(i, j, k, l, m, n, o, p);
+	return tag;
+}
+
+static inline int cvmx_gr_same_tag(struct global_resource_tag gr1, struct global_resource_tag gr2)
+{
+	return (gr1.hi == gr2.hi) && (gr1.lo == gr2.lo);
+}
+
+/*
+ * @INTERNAL
+ * Creates a global resource range that can hold the specified number of
+ * elements
+ * @param tag is the tag of the range. The taga is created using the method
+ * cvmx_get_gr_tag()
+ * @param nelements is the number of elements to be held in the resource range.
+ */
+int cvmx_create_global_resource_range(struct global_resource_tag tag, int nelements);
+
+/*
+ * @INTERNAL
+ * Allocate nelements in the global resource range with the specified tag. It
+ * is assumed that prior
+ * to calling this the global resource range has already been created using
+ * cvmx_create_global_resource_range().
+ * @param tag is the tag of the global resource range.
+ * @param nelements is the number of elements to be allocated.
+ * @param owner is a 64 bit number that identifes the owner of this range.
+ * @aligment specifes the required alignment of the returned base number.
+ * @return returns the base of the allocated range. -1 return value indicates
+ * failure.
+ */
+int cvmx_allocate_global_resource_range(struct global_resource_tag tag, u64 owner, int nelements,
+					int alignment);
+
+/*
+ * @INTERNAL
+ * Allocate nelements in the global resource range with the specified tag.
+ * The elements allocated need not be contiguous. It is assumed that prior to
+ * calling this the global resource range has already
+ * been created using cvmx_create_global_resource_range().
+ * @param tag is the tag of the global resource range.
+ * @param nelements is the number of elements to be allocated.
+ * @param owner is a 64 bit number that identifes the owner of the allocated
+ * elements.
+ * @param allocated_elements returns indexs of the allocated entries.
+ * @return returns 0 on success and -1 on failure.
+ */
+int cvmx_resource_alloc_many(struct global_resource_tag tag, u64 owner, int nelements,
+			     int allocated_elements[]);
+int cvmx_resource_alloc_reverse(struct global_resource_tag, u64 owner);
+/*
+ * @INTERNAL
+ * Reserve nelements starting from base in the global resource range with the
+ * specified tag.
+ * It is assumed that prior to calling this the global resource range has
+ * already been created using cvmx_create_global_resource_range().
+ * @param tag is the tag of the global resource range.
+ * @param nelements is the number of elements to be allocated.
+ * @param owner is a 64 bit number that identifes the owner of this range.
+ * @base specifies the base start of nelements.
+ * @return returns the base of the allocated range. -1 return value indicates
+ * failure.
+ */
+int cvmx_reserve_global_resource_range(struct global_resource_tag tag, u64 owner, int base,
+				       int nelements);
+/*
+ * @INTERNAL
+ * Free nelements starting at base in the global resource range with the
+ * specified tag.
+ * @param tag is the tag of the global resource range.
+ * @param base is the base number
+ * @param nelements is the number of elements that are to be freed.
+ * @return returns 0 if successful and -1 on failure.
+ */
+int cvmx_free_global_resource_range_with_base(struct global_resource_tag tag, int base,
+					      int nelements);
+
+/*
+ * @INTERNAL
+ * Free nelements with the bases specified in bases[] with the
+ * specified tag.
+ * @param tag is the tag of the global resource range.
+ * @param bases is an array containing the bases to be freed.
+ * @param nelements is the number of elements that are to be freed.
+ * @return returns 0 if successful and -1 on failure.
+ */
+int cvmx_free_global_resource_range_multiple(struct global_resource_tag tag, int bases[],
+					     int nelements);
+/*
+ * @INTERNAL
+ * Free elements from the specified owner in the global resource range with the
+ * specified tag.
+ * @param tag is the tag of the global resource range.
+ * @param owner is the owner of resources that are to be freed.
+ * @return returns 0 if successful and -1 on failure.
+ */
+int cvmx_free_global_resource_range_with_owner(struct global_resource_tag tag, int owner);
+
+/*
+ * @INTERNAL
+ * Frees all the global resources that have been created.
+ * For use only from the bootloader, when it shutdown and boots up the
+ * application or kernel.
+ */
+int free_global_resources(void);
+
+u64 cvmx_get_global_resource_owner(struct global_resource_tag tag, int base);
+/*
+ * @INTERNAL
+ * Shows the global resource range with the specified tag. Use mainly for debug.
+ */
+void cvmx_show_global_resource_range(struct global_resource_tag tag);
+
+/*
+ * @INTERNAL
+ * Shows all the global resources. Used mainly for debug.
+ */
+void cvmx_global_resources_show(void);
+
+u64 cvmx_allocate_app_id(void);
+u64 cvmx_get_app_id(void);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-gmx.h b/arch/mips/mach-octeon/include/mach/cvmx-gmx.h
new file mode 100644
index 0000000..2df7da1
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-gmx.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the GMX hardware.
+ */
+
+#ifndef __CVMX_GMX_H__
+#define __CVMX_GMX_H__
+
+/* CSR typedefs have been moved to cvmx-gmx-defs.h */
+
+int cvmx_gmx_set_backpressure_override(u32 interface, u32 port_mask);
+int cvmx_agl_set_backpressure_override(u32 interface, u32 port_mask);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-gmxx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-gmxx-defs.h
new file mode 100644
index 0000000..8231fef
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-gmxx-defs.h
@@ -0,0 +1,6378 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon gmxx.
+ */
+
+#ifndef __CVMX_GMXX_DEFS_H__
+#define __CVMX_GMXX_DEFS_H__
+
+static inline u64 CVMX_GMXX_BAD_REG(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000518ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000518ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000518ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000518ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_BIST(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000400ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000400ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000400ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000400ull + (offset) * 0x8000000ull;
+}
+
+#define CVMX_GMXX_BPID_MAPX(offset, block_id)                                                      \
+	(0x0001180008000680ull + (((offset) & 15) + ((block_id) & 7) * 0x200000ull) * 8)
+#define CVMX_GMXX_BPID_MSK(offset) (0x0001180008000700ull + ((offset) & 7) * 0x1000000ull)
+static inline u64 CVMX_GMXX_CLK_EN(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007F0ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007F0ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007F0ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080007F0ull + (offset) * 0x8000000ull;
+}
+
+#define CVMX_GMXX_EBP_DIS(offset) (0x0001180008000608ull + ((offset) & 7) * 0x1000000ull)
+#define CVMX_GMXX_EBP_MSK(offset) (0x0001180008000600ull + ((offset) & 7) * 0x1000000ull)
+static inline u64 CVMX_GMXX_HG2_CONTROL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000550ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000550ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000550ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000550ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_INF_MODE(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007F8ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007F8ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007F8ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080007F8ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_NXA_ADR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000510ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000510ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000510ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000510ull + (offset) * 0x8000000ull;
+}
+
+#define CVMX_GMXX_PIPE_STATUS(offset) (0x0001180008000760ull + ((offset) & 7) * 0x1000000ull)
+static inline u64 CVMX_GMXX_PRTX_CBFC_CTL(unsigned long __attribute__((unused)) offset,
+					  unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000580ull + (block_id) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000580ull + (block_id) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000580ull + (block_id) * 0x1000000ull;
+	}
+	return 0x0001180008000580ull + (block_id) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_PRTX_CFG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000010ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000010ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000010ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+#define CVMX_GMXX_QSGMII_CTL(offset) (0x0001180008000760ull + ((offset) & 1) * 0x8000000ull)
+static inline u64 CVMX_GMXX_RXAUI_CTL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000740ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000740ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000740ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_RXX_ADR_CAM0(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000180ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000180ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000180ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_ADR_CAM1(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000188ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000188ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000188ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_ADR_CAM2(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000190ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000190ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000190ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_ADR_CAM3(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000198ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000198ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000198ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_ADR_CAM4(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080001A0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080001A0ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080001A0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_ADR_CAM5(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080001A8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080001A8ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080001A8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_ADR_CAM_ALL_EN(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000110ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000110ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000110ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000110ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_ADR_CAM_EN(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000108ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000108ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000108ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_ADR_CTL(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000100ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000100ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000100ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_DECISION(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000040ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000040ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000040ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_FRM_CHK(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000020ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000020ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000020ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_FRM_CTL(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000018ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000018ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000018ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+#define CVMX_GMXX_RXX_FRM_MAX(offset, block_id)                                                    \
+	(0x0001180008000030ull + (((offset) & 3) + ((block_id) & 1) * 0x10000ull) * 2048)
+#define CVMX_GMXX_RXX_FRM_MIN(offset, block_id)                                                    \
+	(0x0001180008000028ull + (((offset) & 3) + ((block_id) & 1) * 0x10000ull) * 2048)
+static inline u64 CVMX_GMXX_RXX_IFG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000058ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000058ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000058ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_INT_EN(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000008ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000008ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000008ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_INT_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000000ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000000ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000000ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_JABBER(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000038ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000038ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000038ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_PAUSE_DROP_TIME(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000068ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000068ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000068ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000068ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000068ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+#define CVMX_GMXX_RXX_RX_INBND(offset, block_id)                                                   \
+	(0x0001180008000060ull + (((offset) & 3) + ((block_id) & 1) * 0x10000ull) * 2048)
+static inline u64 CVMX_GMXX_RXX_STATS_CTL(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000050ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000050ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000050ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_STATS_OCTS(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000088ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000088ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000088ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_STATS_OCTS_CTL(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000098ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000098ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000098ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_STATS_OCTS_DMAC(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080000A8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080000A8ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080000A8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_STATS_OCTS_DRP(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080000B8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080000B8ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080000B8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_STATS_PKTS(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000080ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000080ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000080ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_STATS_PKTS_BAD(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080000C0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080000C0ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080000C0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_STATS_PKTS_CTL(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000090ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000090ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000090ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_STATS_PKTS_DMAC(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080000A0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080000A0ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080000A0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_STATS_PKTS_DRP(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080000B0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080000B0ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080000B0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RXX_UDD_SKP(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000048ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000048ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000048ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_RX_BP_DROPX(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000420ull + ((offset) + (block_id) * 0x1000000ull) * 8;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000420ull + ((offset) + (block_id) * 0x200000ull) * 8;
+	}
+	return 0x0001180008000420ull + ((offset) + (block_id) * 0x1000000ull) * 8;
+}
+
+static inline u64 CVMX_GMXX_RX_BP_OFFX(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000460ull + ((offset) + (block_id) * 0x1000000ull) * 8;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000460ull + ((offset) + (block_id) * 0x200000ull) * 8;
+	}
+	return 0x0001180008000460ull + ((offset) + (block_id) * 0x1000000ull) * 8;
+}
+
+static inline u64 CVMX_GMXX_RX_BP_ONX(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000440ull + ((offset) + (block_id) * 0x1000000ull) * 8;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000440ull + ((offset) + (block_id) * 0x200000ull) * 8;
+	}
+	return 0x0001180008000440ull + ((offset) + (block_id) * 0x1000000ull) * 8;
+}
+
+static inline u64 CVMX_GMXX_RX_HG2_STATUS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000548ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000548ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000548ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000548ull + (offset) * 0x8000000ull;
+}
+
+#define CVMX_GMXX_RX_PASS_EN(offset) (0x00011800080005F8ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_GMXX_RX_PASS_MAPX(offset, block_id)                                                   \
+	(0x0001180008000600ull + (((offset) & 15) + ((block_id) & 1) * 0x1000000ull) * 8)
+static inline u64 CVMX_GMXX_RX_PRTS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000410ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000410ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000410ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000410ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_RX_PRT_INFO(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004E8ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004E8ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004E8ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080004E8ull + (offset) * 0x8000000ull;
+}
+
+#define CVMX_GMXX_RX_TX_STATUS(offset) (0x00011800080007E8ull)
+static inline u64 CVMX_GMXX_RX_XAUI_BAD_COL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000538ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000538ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000538ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000538ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_RX_XAUI_CTL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000530ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000530ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000530ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000530ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_SMACX(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000230ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000230ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000230ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_SOFT_BIST(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007E8ull + (offset) * 0x8000000ull;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007E8ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007E8ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080007E8ull + (offset) * 0x1000000ull;
+}
+
+static inline u64 CVMX_GMXX_STAT_BP(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000520ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000520ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000520ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000520ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TB_REG(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007E0ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007E0ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080007E0ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080007E0ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TXX_APPEND(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000218ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000218ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000218ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+#define CVMX_GMXX_TXX_BCK_CRDT(offset, block_id)                                                   \
+	(0x0001180008000388ull + (((offset) & 3) + ((block_id) & 1) * 0x10000ull) * 2048)
+static inline u64 CVMX_GMXX_TXX_BURST(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000228ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000228ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000228ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_CBFC_XOFF(unsigned long __attribute__((unused)) offset,
+					  unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080005A0ull + (block_id) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080005A0ull + (block_id) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080005A0ull + (block_id) * 0x1000000ull;
+	}
+	return 0x00011800080005A0ull + (block_id) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TXX_CBFC_XON(unsigned long __attribute__((unused)) offset,
+					 unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080005C0ull + (block_id) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080005C0ull + (block_id) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080005C0ull + (block_id) * 0x1000000ull;
+	}
+	return 0x00011800080005C0ull + (block_id) * 0x8000000ull;
+}
+
+#define CVMX_GMXX_TXX_CLK(offset, block_id)                                                        \
+	(0x0001180008000208ull + (((offset) & 3) + ((block_id) & 1) * 0x10000ull) * 2048)
+static inline u64 CVMX_GMXX_TXX_CTL(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000270ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000270ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000270ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+#define CVMX_GMXX_TXX_JAM_MODE(offset, block_id)                                                   \
+	(0x0001180008000380ull + (((offset) & 3) + ((block_id) & 1) * 0x10000ull) * 2048)
+static inline u64 CVMX_GMXX_TXX_MIN_PKT(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000240ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000240ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000240ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_PAUSE_PKT_INTERVAL(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000248ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000248ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000248ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_PAUSE_PKT_TIME(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000238ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000238ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000238ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_PAUSE_TOGO(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000258ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000258ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000258ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_PAUSE_ZERO(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000260ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000260ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000260ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+#define CVMX_GMXX_TXX_PIPE(offset, block_id)                                                       \
+	(0x0001180008000310ull + (((offset) & 3) + ((block_id) & 7) * 0x2000ull) * 2048)
+static inline u64 CVMX_GMXX_TXX_SGMII_CTL(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000300ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000300ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000300ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000300ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_SLOT(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000220ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000220ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000220ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_SOFT_PAUSE(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000250ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000250ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000250ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STAT0(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000280ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000280ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000280ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STAT1(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000288ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000288ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000288ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STAT2(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000290ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000290ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000290ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STAT3(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000298ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000298ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000298ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STAT4(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002A0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002A0ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080002A0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STAT5(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002A8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002A8ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080002A8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STAT6(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002B0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002B0ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080002B0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STAT7(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002B8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002B8ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080002B8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STAT8(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002C0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002C0ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080002C0ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STAT9(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002C8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080002C8ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x00011800080002C8ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_STATS_CTL(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000268ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000268ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000268ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TXX_THRESH(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000210ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000210ull + ((offset) + (block_id) * 0x2000ull) * 2048;
+	}
+	return 0x0001180008000210ull + ((offset) + (block_id) * 0x10000ull) * 2048;
+}
+
+static inline u64 CVMX_GMXX_TX_BP(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004D0ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004D0ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004D0ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080004D0ull + (offset) * 0x8000000ull;
+}
+
+#define CVMX_GMXX_TX_CLK_MSKX(offset, block_id)                                                    \
+	(0x0001180008000780ull + (((offset) & 1) + ((block_id) & 0) * 0x0ull) * 8)
+static inline u64 CVMX_GMXX_TX_COL_ATTEMPT(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000498ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000498ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000498ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000498ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_CORRUPT(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004D8ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004D8ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004D8ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080004D8ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_HG2_REG1(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000558ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000558ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000558ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000558ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_HG2_REG2(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000560ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000560ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000560ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000560ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_IFG(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000488ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000488ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000488ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000488ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_INT_EN(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000508ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000508ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000508ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000508ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_INT_REG(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000500ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000500ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000500ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000500ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_JAM(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000490ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000490ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000490ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000490ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_LFSR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004F8ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004F8ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004F8ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080004F8ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_OVR_BP(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004C8ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004C8ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004C8ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080004C8ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_PAUSE_PKT_DMAC(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004A0ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004A0ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004A0ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080004A0ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_PAUSE_PKT_TYPE(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004A8ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004A8ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800080004A8ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800080004A8ull + (offset) * 0x8000000ull;
+}
+
+static inline u64 CVMX_GMXX_TX_PRTS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000480ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000480ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000480ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000480ull + (offset) * 0x8000000ull;
+}
+
+#define CVMX_GMXX_TX_SPI_CTL(offset)   (0x00011800080004C0ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_GMXX_TX_SPI_DRAIN(offset) (0x00011800080004E0ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_GMXX_TX_SPI_MAX(offset)   (0x00011800080004B0ull + ((offset) & 1) * 0x8000000ull)
+#define CVMX_GMXX_TX_SPI_ROUNDX(offset, block_id)                                                  \
+	(0x0001180008000680ull + (((offset) & 31) + ((block_id) & 1) * 0x1000000ull) * 8)
+#define CVMX_GMXX_TX_SPI_THRESH(offset) (0x00011800080004B8ull + ((offset) & 1) * 0x8000000ull)
+static inline u64 CVMX_GMXX_TX_XAUI_CTL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000528ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000528ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000528ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000528ull + (offset) * 0x8000000ull;
+}
+
+#define CVMX_GMXX_WOL_CTL(offset) (0x0001180008000780ull + ((offset) & 1) * 0x8000000ull)
+static inline u64 CVMX_GMXX_XAUI_EXT_LOOPBACK(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000540ull + (offset) * 0x8000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000540ull + (offset) * 0x8000000ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180008000540ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180008000540ull + (offset) * 0x8000000ull;
+}
+
+/**
+ * cvmx_gmx#_bad_reg
+ *
+ * GMX_BAD_REG = A collection of things that have gone very, very wrong
+ *
+ *
+ * Notes:
+ * In XAUI mode, only the lsb (corresponding to port0) of INB_NXA, LOSTSTAT, OUT_OVR, are used.
+ *
+ */
+union cvmx_gmxx_bad_reg {
+	u64 u64;
+	struct cvmx_gmxx_bad_reg_s {
+		u64 reserved_31_63 : 33;
+		u64 inb_nxa : 4;
+		u64 statovr : 1;
+		u64 loststat : 4;
+		u64 reserved_18_21 : 4;
+		u64 out_ovr : 16;
+		u64 ncb_ovr : 1;
+		u64 out_col : 1;
+	} s;
+	struct cvmx_gmxx_bad_reg_cn30xx {
+		u64 reserved_31_63 : 33;
+		u64 inb_nxa : 4;
+		u64 statovr : 1;
+		u64 reserved_25_25 : 1;
+		u64 loststat : 3;
+		u64 reserved_5_21 : 17;
+		u64 out_ovr : 3;
+		u64 reserved_0_1 : 2;
+	} cn30xx;
+	struct cvmx_gmxx_bad_reg_cn30xx cn31xx;
+	struct cvmx_gmxx_bad_reg_s cn38xx;
+	struct cvmx_gmxx_bad_reg_s cn38xxp2;
+	struct cvmx_gmxx_bad_reg_cn30xx cn50xx;
+	struct cvmx_gmxx_bad_reg_cn52xx {
+		u64 reserved_31_63 : 33;
+		u64 inb_nxa : 4;
+		u64 statovr : 1;
+		u64 loststat : 4;
+		u64 reserved_6_21 : 16;
+		u64 out_ovr : 4;
+		u64 reserved_0_1 : 2;
+	} cn52xx;
+	struct cvmx_gmxx_bad_reg_cn52xx cn52xxp1;
+	struct cvmx_gmxx_bad_reg_cn52xx cn56xx;
+	struct cvmx_gmxx_bad_reg_cn52xx cn56xxp1;
+	struct cvmx_gmxx_bad_reg_s cn58xx;
+	struct cvmx_gmxx_bad_reg_s cn58xxp1;
+	struct cvmx_gmxx_bad_reg_cn52xx cn61xx;
+	struct cvmx_gmxx_bad_reg_cn52xx cn63xx;
+	struct cvmx_gmxx_bad_reg_cn52xx cn63xxp1;
+	struct cvmx_gmxx_bad_reg_cn52xx cn66xx;
+	struct cvmx_gmxx_bad_reg_cn52xx cn68xx;
+	struct cvmx_gmxx_bad_reg_cn52xx cn68xxp1;
+	struct cvmx_gmxx_bad_reg_cn52xx cn70xx;
+	struct cvmx_gmxx_bad_reg_cn52xx cn70xxp1;
+	struct cvmx_gmxx_bad_reg_cn52xx cnf71xx;
+};
+
+typedef union cvmx_gmxx_bad_reg cvmx_gmxx_bad_reg_t;
+
+/**
+ * cvmx_gmx#_bist
+ *
+ * GMX_BIST = GMX BIST Results
+ *
+ */
+union cvmx_gmxx_bist {
+	u64 u64;
+	struct cvmx_gmxx_bist_s {
+		u64 reserved_25_63 : 39;
+		u64 status : 25;
+	} s;
+	struct cvmx_gmxx_bist_cn30xx {
+		u64 reserved_10_63 : 54;
+		u64 status : 10;
+	} cn30xx;
+	struct cvmx_gmxx_bist_cn30xx cn31xx;
+	struct cvmx_gmxx_bist_cn30xx cn38xx;
+	struct cvmx_gmxx_bist_cn30xx cn38xxp2;
+	struct cvmx_gmxx_bist_cn50xx {
+		u64 reserved_12_63 : 52;
+		u64 status : 12;
+	} cn50xx;
+	struct cvmx_gmxx_bist_cn52xx {
+		u64 reserved_16_63 : 48;
+		u64 status : 16;
+	} cn52xx;
+	struct cvmx_gmxx_bist_cn52xx cn52xxp1;
+	struct cvmx_gmxx_bist_cn52xx cn56xx;
+	struct cvmx_gmxx_bist_cn52xx cn56xxp1;
+	struct cvmx_gmxx_bist_cn58xx {
+		u64 reserved_17_63 : 47;
+		u64 status : 17;
+	} cn58xx;
+	struct cvmx_gmxx_bist_cn58xx cn58xxp1;
+	struct cvmx_gmxx_bist_s cn61xx;
+	struct cvmx_gmxx_bist_s cn63xx;
+	struct cvmx_gmxx_bist_s cn63xxp1;
+	struct cvmx_gmxx_bist_s cn66xx;
+	struct cvmx_gmxx_bist_s cn68xx;
+	struct cvmx_gmxx_bist_s cn68xxp1;
+	struct cvmx_gmxx_bist_s cn70xx;
+	struct cvmx_gmxx_bist_s cn70xxp1;
+	struct cvmx_gmxx_bist_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_bist cvmx_gmxx_bist_t;
+
+/**
+ * cvmx_gmx#_bpid_map#
+ *
+ * Notes:
+ * GMX will build BPID_VECTOR<15:0> using the 16 GMX_BPID_MAP entries and the BPID
+ * state from IPD.  In XAUI/RXAUI mode when PFC/CBFC/HiGig2 is used, the
+ * BPID_VECTOR becomes the logical backpressure.  In XAUI/RXAUI mode when
+ * PFC/CBFC/HiGig2 is not used or when in 4xSGMII mode, the BPID_VECTOR can be used
+ * with the GMX_BPID_MSK register to determine the physical backpressure.
+ *
+ * In XAUI/RXAUI mode, the entire BPID_VECTOR<15:0> is available determining physical
+ * backpressure for the single XAUI/RXAUI interface.
+ *
+ * In SGMII mode, BPID_VECTOR is broken up as follows:
+ *    SGMII interface0 uses BPID_VECTOR<3:0>
+ *    SGMII interface1 uses BPID_VECTOR<7:4>
+ *    SGMII interface2 uses BPID_VECTOR<11:8>
+ *    SGMII interface3 uses BPID_VECTOR<15:12>
+ *
+ * In all SGMII configurations, and in some XAUI/RXAUI configurations, the
+ * interface protocols only support physical backpressure. In these cases, a single
+ * BPID will commonly drive the physical backpressure for the physical
+ * interface. We provide example programmings for these simple cases.
+ *
+ * In XAUI/RXAUI mode where PFC/CBFC/HiGig2 is not used, an example programming
+ * would be as follows:
+ *
+ *    @verbatim
+ *    GMX_BPID_MAP0[VAL]    = 1;
+ *    GMX_BPID_MAP0[BPID]   = xaui_bpid;
+ *    GMX_BPID_MSK[MSK_OR]  = 1;
+ *    GMX_BPID_MSK[MSK_AND] = 0;
+ *    @endverbatim
+ *
+ * In SGMII mode, an example programming would be as follows:
+ *
+ *    @verbatim
+ *    for (i=0; i<4; i++) [
+ *       if (GMX_PRTi_CFG[EN]) [
+ *          GMX_BPID_MAP(i*4)[VAL]    = 1;
+ *          GMX_BPID_MAP(i*4)[BPID]   = sgmii_bpid(i);
+ *          GMX_BPID_MSK[MSK_OR]      = (1 << (i*4)) | GMX_BPID_MSK[MSK_OR];
+ *       ]
+ *    ]
+ *    GMX_BPID_MSK[MSK_AND] = 0;
+ *    @endverbatim
+ */
+union cvmx_gmxx_bpid_mapx {
+	u64 u64;
+	struct cvmx_gmxx_bpid_mapx_s {
+		u64 reserved_17_63 : 47;
+		u64 status : 1;
+		u64 reserved_9_15 : 7;
+		u64 val : 1;
+		u64 reserved_6_7 : 2;
+		u64 bpid : 6;
+	} s;
+	struct cvmx_gmxx_bpid_mapx_s cn68xx;
+	struct cvmx_gmxx_bpid_mapx_s cn68xxp1;
+};
+
+typedef union cvmx_gmxx_bpid_mapx cvmx_gmxx_bpid_mapx_t;
+
+/**
+ * cvmx_gmx#_bpid_msk
+ */
+union cvmx_gmxx_bpid_msk {
+	u64 u64;
+	struct cvmx_gmxx_bpid_msk_s {
+		u64 reserved_48_63 : 16;
+		u64 msk_or : 16;
+		u64 reserved_16_31 : 16;
+		u64 msk_and : 16;
+	} s;
+	struct cvmx_gmxx_bpid_msk_s cn68xx;
+	struct cvmx_gmxx_bpid_msk_s cn68xxp1;
+};
+
+typedef union cvmx_gmxx_bpid_msk cvmx_gmxx_bpid_msk_t;
+
+/**
+ * cvmx_gmx#_clk_en
+ *
+ * DON'T PUT IN HRM*
+ *
+ */
+union cvmx_gmxx_clk_en {
+	u64 u64;
+	struct cvmx_gmxx_clk_en_s {
+		u64 reserved_1_63 : 63;
+		u64 clk_en : 1;
+	} s;
+	struct cvmx_gmxx_clk_en_s cn52xx;
+	struct cvmx_gmxx_clk_en_s cn52xxp1;
+	struct cvmx_gmxx_clk_en_s cn56xx;
+	struct cvmx_gmxx_clk_en_s cn56xxp1;
+	struct cvmx_gmxx_clk_en_s cn61xx;
+	struct cvmx_gmxx_clk_en_s cn63xx;
+	struct cvmx_gmxx_clk_en_s cn63xxp1;
+	struct cvmx_gmxx_clk_en_s cn66xx;
+	struct cvmx_gmxx_clk_en_s cn68xx;
+	struct cvmx_gmxx_clk_en_s cn68xxp1;
+	struct cvmx_gmxx_clk_en_s cn70xx;
+	struct cvmx_gmxx_clk_en_s cn70xxp1;
+	struct cvmx_gmxx_clk_en_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_clk_en cvmx_gmxx_clk_en_t;
+
+/**
+ * cvmx_gmx#_ebp_dis
+ */
+union cvmx_gmxx_ebp_dis {
+	u64 u64;
+	struct cvmx_gmxx_ebp_dis_s {
+		u64 reserved_16_63 : 48;
+		u64 dis : 16;
+	} s;
+	struct cvmx_gmxx_ebp_dis_s cn68xx;
+	struct cvmx_gmxx_ebp_dis_s cn68xxp1;
+};
+
+typedef union cvmx_gmxx_ebp_dis cvmx_gmxx_ebp_dis_t;
+
+/**
+ * cvmx_gmx#_ebp_msk
+ */
+union cvmx_gmxx_ebp_msk {
+	u64 u64;
+	struct cvmx_gmxx_ebp_msk_s {
+		u64 reserved_16_63 : 48;
+		u64 msk : 16;
+	} s;
+	struct cvmx_gmxx_ebp_msk_s cn68xx;
+	struct cvmx_gmxx_ebp_msk_s cn68xxp1;
+};
+
+typedef union cvmx_gmxx_ebp_msk cvmx_gmxx_ebp_msk_t;
+
+/**
+ * cvmx_gmx#_hg2_control
+ *
+ * Notes:
+ * The HiGig2 TX and RX enable would normally be both set together for HiGig2 messaging. However
+ * setting just the TX or RX bit will result in only the HG2 message transmit or the receive
+ * capability.
+ * PHYS_EN and LOGL_EN bits when 1, allow link pause or back pressure to PKO as per received
+ * HiGig2 message. When 0, link pause and back pressure to PKO in response to received messages
+ * are disabled.
+ *
+ * GMX*_TX_XAUI_CTL[HG_EN] must be set to one(to enable HiGig) whenever either HG2TX_EN or HG2RX_EN
+ * are set.
+ *
+ * GMX*_RX0_UDD_SKP[LEN] must be set to 16 (to select HiGig2) whenever either HG2TX_EN or HG2RX_EN
+ * are set.
+ *
+ * GMX*_TX_OVR_BP[EN<0>] must be set to one and GMX*_TX_OVR_BP[BP<0>] must be cleared to zero
+ * (to forcibly disable HW-automatic 802.3 pause packet generation) with the HiGig2 Protocol when
+ * GMX*_HG2_CONTROL[HG2TX_EN]=0. (The HiGig2 protocol is indicated by GMX*_TX_XAUI_CTL[HG_EN]=1
+ * and GMX*_RX0_UDD_SKP[LEN]=16.) The HW can only auto-generate backpressure via HiGig2 messages
+ * (optionally, when HG2TX_EN=1) with the HiGig2 protocol.
+ */
+union cvmx_gmxx_hg2_control {
+	u64 u64;
+	struct cvmx_gmxx_hg2_control_s {
+		u64 reserved_19_63 : 45;
+		u64 hg2tx_en : 1;
+		u64 hg2rx_en : 1;
+		u64 phys_en : 1;
+		u64 logl_en : 16;
+	} s;
+	struct cvmx_gmxx_hg2_control_s cn52xx;
+	struct cvmx_gmxx_hg2_control_s cn52xxp1;
+	struct cvmx_gmxx_hg2_control_s cn56xx;
+	struct cvmx_gmxx_hg2_control_s cn61xx;
+	struct cvmx_gmxx_hg2_control_s cn63xx;
+	struct cvmx_gmxx_hg2_control_s cn63xxp1;
+	struct cvmx_gmxx_hg2_control_s cn66xx;
+	struct cvmx_gmxx_hg2_control_s cn68xx;
+	struct cvmx_gmxx_hg2_control_s cn68xxp1;
+	struct cvmx_gmxx_hg2_control_s cn70xx;
+	struct cvmx_gmxx_hg2_control_s cn70xxp1;
+	struct cvmx_gmxx_hg2_control_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_hg2_control cvmx_gmxx_hg2_control_t;
+
+/**
+ * cvmx_gmx#_inf_mode
+ *
+ * GMX_INF_MODE = Interface Mode
+ *
+ */
+union cvmx_gmxx_inf_mode {
+	u64 u64;
+	struct cvmx_gmxx_inf_mode_s {
+		u64 reserved_20_63 : 44;
+		u64 rate : 4;
+		u64 reserved_12_15 : 4;
+		u64 speed : 4;
+		u64 reserved_7_7 : 1;
+		u64 mode : 3;
+		u64 reserved_3_3 : 1;
+		u64 p0mii : 1;
+		u64 en : 1;
+		u64 type : 1;
+	} s;
+	struct cvmx_gmxx_inf_mode_cn30xx {
+		u64 reserved_3_63 : 61;
+		u64 p0mii : 1;
+		u64 en : 1;
+		u64 type : 1;
+	} cn30xx;
+	struct cvmx_gmxx_inf_mode_cn31xx {
+		u64 reserved_2_63 : 62;
+		u64 en : 1;
+		u64 type : 1;
+	} cn31xx;
+	struct cvmx_gmxx_inf_mode_cn31xx cn38xx;
+	struct cvmx_gmxx_inf_mode_cn31xx cn38xxp2;
+	struct cvmx_gmxx_inf_mode_cn30xx cn50xx;
+	struct cvmx_gmxx_inf_mode_cn52xx {
+		u64 reserved_10_63 : 54;
+		u64 speed : 2;
+		u64 reserved_6_7 : 2;
+		u64 mode : 2;
+		u64 reserved_2_3 : 2;
+		u64 en : 1;
+		u64 type : 1;
+	} cn52xx;
+	struct cvmx_gmxx_inf_mode_cn52xx cn52xxp1;
+	struct cvmx_gmxx_inf_mode_cn52xx cn56xx;
+	struct cvmx_gmxx_inf_mode_cn52xx cn56xxp1;
+	struct cvmx_gmxx_inf_mode_cn31xx cn58xx;
+	struct cvmx_gmxx_inf_mode_cn31xx cn58xxp1;
+	struct cvmx_gmxx_inf_mode_cn61xx {
+		u64 reserved_12_63 : 52;
+		u64 speed : 4;
+		u64 reserved_5_7 : 3;
+		u64 mode : 1;
+		u64 reserved_2_3 : 2;
+		u64 en : 1;
+		u64 type : 1;
+	} cn61xx;
+	struct cvmx_gmxx_inf_mode_cn61xx cn63xx;
+	struct cvmx_gmxx_inf_mode_cn61xx cn63xxp1;
+	struct cvmx_gmxx_inf_mode_cn66xx {
+		u64 reserved_20_63 : 44;
+		u64 rate : 4;
+		u64 reserved_12_15 : 4;
+		u64 speed : 4;
+		u64 reserved_5_7 : 3;
+		u64 mode : 1;
+		u64 reserved_2_3 : 2;
+		u64 en : 1;
+		u64 type : 1;
+	} cn66xx;
+	struct cvmx_gmxx_inf_mode_cn68xx {
+		u64 reserved_12_63 : 52;
+		u64 speed : 4;
+		u64 reserved_7_7 : 1;
+		u64 mode : 3;
+		u64 reserved_2_3 : 2;
+		u64 en : 1;
+		u64 type : 1;
+	} cn68xx;
+	struct cvmx_gmxx_inf_mode_cn68xx cn68xxp1;
+	struct cvmx_gmxx_inf_mode_cn70xx {
+		u64 reserved_6_63 : 58;
+		u64 mode : 2;
+		u64 reserved_2_3 : 2;
+		u64 en : 1;
+		u64 reserved_0_0 : 1;
+	} cn70xx;
+	struct cvmx_gmxx_inf_mode_cn70xx cn70xxp1;
+	struct cvmx_gmxx_inf_mode_cn61xx cnf71xx;
+};
+
+typedef union cvmx_gmxx_inf_mode cvmx_gmxx_inf_mode_t;
+
+/**
+ * cvmx_gmx#_nxa_adr
+ *
+ * GMX_NXA_ADR = NXA Port Address
+ *
+ */
+union cvmx_gmxx_nxa_adr {
+	u64 u64;
+	struct cvmx_gmxx_nxa_adr_s {
+		u64 reserved_23_63 : 41;
+		u64 pipe : 7;
+		u64 reserved_6_15 : 10;
+		u64 prt : 6;
+	} s;
+	struct cvmx_gmxx_nxa_adr_cn30xx {
+		u64 reserved_6_63 : 58;
+		u64 prt : 6;
+	} cn30xx;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn31xx;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn38xx;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn38xxp2;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn50xx;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn52xx;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn52xxp1;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn56xx;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn56xxp1;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn58xx;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn58xxp1;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn61xx;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn63xx;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn63xxp1;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn66xx;
+	struct cvmx_gmxx_nxa_adr_s cn68xx;
+	struct cvmx_gmxx_nxa_adr_s cn68xxp1;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn70xx;
+	struct cvmx_gmxx_nxa_adr_cn30xx cn70xxp1;
+	struct cvmx_gmxx_nxa_adr_cn30xx cnf71xx;
+};
+
+typedef union cvmx_gmxx_nxa_adr cvmx_gmxx_nxa_adr_t;
+
+/**
+ * cvmx_gmx#_pipe_status
+ *
+ * DON'T PUT IN HRM*
+ *
+ */
+union cvmx_gmxx_pipe_status {
+	u64 u64;
+	struct cvmx_gmxx_pipe_status_s {
+		u64 reserved_20_63 : 44;
+		u64 ovr : 4;
+		u64 reserved_12_15 : 4;
+		u64 bp : 4;
+		u64 reserved_4_7 : 4;
+		u64 stop : 4;
+	} s;
+	struct cvmx_gmxx_pipe_status_s cn68xx;
+	struct cvmx_gmxx_pipe_status_s cn68xxp1;
+};
+
+typedef union cvmx_gmxx_pipe_status cvmx_gmxx_pipe_status_t;
+
+/**
+ * cvmx_gmx#_prt#_cbfc_ctl
+ *
+ * ** HG2 message CSRs end
+ *
+ */
+union cvmx_gmxx_prtx_cbfc_ctl {
+	u64 u64;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s {
+		u64 phys_en : 16;
+		u64 logl_en : 16;
+		u64 phys_bp : 16;
+		u64 reserved_4_15 : 12;
+		u64 bck_en : 1;
+		u64 drp_en : 1;
+		u64 tx_en : 1;
+		u64 rx_en : 1;
+	} s;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cn52xx;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cn56xx;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cn61xx;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cn63xx;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cn63xxp1;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cn66xx;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cn68xx;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cn68xxp1;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cn70xx;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cn70xxp1;
+	struct cvmx_gmxx_prtx_cbfc_ctl_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_prtx_cbfc_ctl cvmx_gmxx_prtx_cbfc_ctl_t;
+
+/**
+ * cvmx_gmx#_prt#_cfg
+ *
+ * GMX_PRT_CFG = Port description
+ *
+ */
+union cvmx_gmxx_prtx_cfg {
+	u64 u64;
+	struct cvmx_gmxx_prtx_cfg_s {
+		u64 reserved_22_63 : 42;
+		u64 pknd : 6;
+		u64 reserved_14_15 : 2;
+		u64 tx_idle : 1;
+		u64 rx_idle : 1;
+		u64 reserved_9_11 : 3;
+		u64 speed_msb : 1;
+		u64 reserved_4_7 : 4;
+		u64 slottime : 1;
+		u64 duplex : 1;
+		u64 speed : 1;
+		u64 en : 1;
+	} s;
+	struct cvmx_gmxx_prtx_cfg_cn30xx {
+		u64 reserved_4_63 : 60;
+		u64 slottime : 1;
+		u64 duplex : 1;
+		u64 speed : 1;
+		u64 en : 1;
+	} cn30xx;
+	struct cvmx_gmxx_prtx_cfg_cn30xx cn31xx;
+	struct cvmx_gmxx_prtx_cfg_cn30xx cn38xx;
+	struct cvmx_gmxx_prtx_cfg_cn30xx cn38xxp2;
+	struct cvmx_gmxx_prtx_cfg_cn30xx cn50xx;
+	struct cvmx_gmxx_prtx_cfg_cn52xx {
+		u64 reserved_14_63 : 50;
+		u64 tx_idle : 1;
+		u64 rx_idle : 1;
+		u64 reserved_9_11 : 3;
+		u64 speed_msb : 1;
+		u64 reserved_4_7 : 4;
+		u64 slottime : 1;
+		u64 duplex : 1;
+		u64 speed : 1;
+		u64 en : 1;
+	} cn52xx;
+	struct cvmx_gmxx_prtx_cfg_cn52xx cn52xxp1;
+	struct cvmx_gmxx_prtx_cfg_cn52xx cn56xx;
+	struct cvmx_gmxx_prtx_cfg_cn52xx cn56xxp1;
+	struct cvmx_gmxx_prtx_cfg_cn30xx cn58xx;
+	struct cvmx_gmxx_prtx_cfg_cn30xx cn58xxp1;
+	struct cvmx_gmxx_prtx_cfg_cn52xx cn61xx;
+	struct cvmx_gmxx_prtx_cfg_cn52xx cn63xx;
+	struct cvmx_gmxx_prtx_cfg_cn52xx cn63xxp1;
+	struct cvmx_gmxx_prtx_cfg_cn52xx cn66xx;
+	struct cvmx_gmxx_prtx_cfg_s cn68xx;
+	struct cvmx_gmxx_prtx_cfg_s cn68xxp1;
+	struct cvmx_gmxx_prtx_cfg_cn52xx cn70xx;
+	struct cvmx_gmxx_prtx_cfg_cn52xx cn70xxp1;
+	struct cvmx_gmxx_prtx_cfg_cn52xx cnf71xx;
+};
+
+typedef union cvmx_gmxx_prtx_cfg cvmx_gmxx_prtx_cfg_t;
+
+/**
+ * cvmx_gmx#_qsgmii_ctl
+ */
+union cvmx_gmxx_qsgmii_ctl {
+	u64 u64;
+	struct cvmx_gmxx_qsgmii_ctl_s {
+		u64 reserved_1_63 : 63;
+		u64 disparity : 1;
+	} s;
+	struct cvmx_gmxx_qsgmii_ctl_s cn70xx;
+	struct cvmx_gmxx_qsgmii_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_gmxx_qsgmii_ctl cvmx_gmxx_qsgmii_ctl_t;
+
+/**
+ * cvmx_gmx#_rx#_adr_cam0
+ *
+ * GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_gmxx_rxx_adr_cam0 {
+	u64 u64;
+	struct cvmx_gmxx_rxx_adr_cam0_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn30xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn31xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn38xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn38xxp2;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn50xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn52xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn52xxp1;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn56xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn56xxp1;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn58xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn58xxp1;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn61xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn63xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn63xxp1;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn66xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn68xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn68xxp1;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn70xx;
+	struct cvmx_gmxx_rxx_adr_cam0_s cn70xxp1;
+	struct cvmx_gmxx_rxx_adr_cam0_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_adr_cam0 cvmx_gmxx_rxx_adr_cam0_t;
+
+/**
+ * cvmx_gmx#_rx#_adr_cam1
+ *
+ * GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_gmxx_rxx_adr_cam1 {
+	u64 u64;
+	struct cvmx_gmxx_rxx_adr_cam1_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn30xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn31xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn38xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn38xxp2;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn50xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn52xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn52xxp1;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn56xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn56xxp1;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn58xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn58xxp1;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn61xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn63xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn63xxp1;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn66xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn68xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn68xxp1;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn70xx;
+	struct cvmx_gmxx_rxx_adr_cam1_s cn70xxp1;
+	struct cvmx_gmxx_rxx_adr_cam1_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_adr_cam1 cvmx_gmxx_rxx_adr_cam1_t;
+
+/**
+ * cvmx_gmx#_rx#_adr_cam2
+ *
+ * GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_gmxx_rxx_adr_cam2 {
+	u64 u64;
+	struct cvmx_gmxx_rxx_adr_cam2_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn30xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn31xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn38xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn38xxp2;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn50xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn52xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn52xxp1;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn56xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn56xxp1;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn58xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn58xxp1;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn61xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn63xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn63xxp1;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn66xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn68xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn68xxp1;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn70xx;
+	struct cvmx_gmxx_rxx_adr_cam2_s cn70xxp1;
+	struct cvmx_gmxx_rxx_adr_cam2_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_adr_cam2 cvmx_gmxx_rxx_adr_cam2_t;
+
+/**
+ * cvmx_gmx#_rx#_adr_cam3
+ *
+ * GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_gmxx_rxx_adr_cam3 {
+	u64 u64;
+	struct cvmx_gmxx_rxx_adr_cam3_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn30xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn31xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn38xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn38xxp2;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn50xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn52xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn52xxp1;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn56xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn56xxp1;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn58xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn58xxp1;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn61xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn63xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn63xxp1;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn66xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn68xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn68xxp1;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn70xx;
+	struct cvmx_gmxx_rxx_adr_cam3_s cn70xxp1;
+	struct cvmx_gmxx_rxx_adr_cam3_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_adr_cam3 cvmx_gmxx_rxx_adr_cam3_t;
+
+/**
+ * cvmx_gmx#_rx#_adr_cam4
+ *
+ * GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_gmxx_rxx_adr_cam4 {
+	u64 u64;
+	struct cvmx_gmxx_rxx_adr_cam4_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn30xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn31xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn38xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn38xxp2;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn50xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn52xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn52xxp1;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn56xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn56xxp1;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn58xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn58xxp1;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn61xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn63xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn63xxp1;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn66xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn68xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn68xxp1;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn70xx;
+	struct cvmx_gmxx_rxx_adr_cam4_s cn70xxp1;
+	struct cvmx_gmxx_rxx_adr_cam4_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_adr_cam4 cvmx_gmxx_rxx_adr_cam4_t;
+
+/**
+ * cvmx_gmx#_rx#_adr_cam5
+ *
+ * GMX_RX_ADR_CAM = Address Filtering Control
+ *
+ */
+union cvmx_gmxx_rxx_adr_cam5 {
+	u64 u64;
+	struct cvmx_gmxx_rxx_adr_cam5_s {
+		u64 adr : 64;
+	} s;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn30xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn31xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn38xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn38xxp2;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn50xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn52xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn52xxp1;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn56xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn56xxp1;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn58xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn58xxp1;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn61xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn63xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn63xxp1;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn66xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn68xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn68xxp1;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn70xx;
+	struct cvmx_gmxx_rxx_adr_cam5_s cn70xxp1;
+	struct cvmx_gmxx_rxx_adr_cam5_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_adr_cam5 cvmx_gmxx_rxx_adr_cam5_t;
+
+/**
+ * cvmx_gmx#_rx#_adr_cam_all_en
+ *
+ * GMX_RX_ADR_CAM_ALL_EN = Address Filtering Control Enable
+ *
+ */
+union cvmx_gmxx_rxx_adr_cam_all_en {
+	u64 u64;
+	struct cvmx_gmxx_rxx_adr_cam_all_en_s {
+		u64 reserved_32_63 : 32;
+		u64 en : 32;
+	} s;
+	struct cvmx_gmxx_rxx_adr_cam_all_en_s cn61xx;
+	struct cvmx_gmxx_rxx_adr_cam_all_en_s cn66xx;
+	struct cvmx_gmxx_rxx_adr_cam_all_en_s cn68xx;
+	struct cvmx_gmxx_rxx_adr_cam_all_en_s cn70xx;
+	struct cvmx_gmxx_rxx_adr_cam_all_en_s cn70xxp1;
+	struct cvmx_gmxx_rxx_adr_cam_all_en_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_adr_cam_all_en cvmx_gmxx_rxx_adr_cam_all_en_t;
+
+/**
+ * cvmx_gmx#_rx#_adr_cam_en
+ *
+ * GMX_RX_ADR_CAM_EN = Address Filtering Control Enable
+ *
+ */
+union cvmx_gmxx_rxx_adr_cam_en {
+	u64 u64;
+	struct cvmx_gmxx_rxx_adr_cam_en_s {
+		u64 reserved_8_63 : 56;
+		u64 en : 8;
+	} s;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn30xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn31xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn38xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn38xxp2;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn50xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn52xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn52xxp1;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn56xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn56xxp1;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn58xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn58xxp1;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn61xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn63xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn63xxp1;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn66xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn68xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn68xxp1;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn70xx;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cn70xxp1;
+	struct cvmx_gmxx_rxx_adr_cam_en_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_adr_cam_en cvmx_gmxx_rxx_adr_cam_en_t;
+
+/**
+ * cvmx_gmx#_rx#_adr_ctl
+ *
+ * GMX_RX_ADR_CTL = Address Filtering Control
+ *
+ *
+ * Notes:
+ * * ALGORITHM
+ *   Here is some pseudo code that represents the address filter behavior.
+ *
+ *      @verbatim
+ *      bool dmac_addr_filter(uint8 prt, uint48 dmac) [
+ *        ASSERT(prt >= 0 && prt <= 3);
+ *        if (is_bcst(dmac))                               // broadcast accept
+ *          return (GMX_RX[prt]_ADR_CTL[BCST] ? ACCEPT : REJECT);
+ *        if (is_mcst(dmac) & GMX_RX[prt]_ADR_CTL[MCST] == 1)   // multicast reject
+ *          return REJECT;
+ *        if (is_mcst(dmac) & GMX_RX[prt]_ADR_CTL[MCST] == 2)   // multicast accept
+ *          return ACCEPT;
+ *
+ *        cam_hit = 0;
+ *
+ *        for (i=0; i<32; i++) [
+ *          if (GMX_RX[prt]_ADR_CAM_ALL_EN[EN<i>] == 0)
+ *            continue;
+ *          uint48 unswizzled_mac_adr = 0x0;
+ *          for (j=5; j>=0; j--) [
+ *             unswizzled_mac_adr = (unswizzled_mac_adr << 8) | GMX_RX[i>>3]_ADR_CAM[j][ADR<(i&7)*8+7:(i&7)*8>];
+ *          ]
+ *          if (unswizzled_mac_adr == dmac) [
+ *            cam_hit = 1;
+ *            break;
+ *          ]
+ *        ]
+ *
+ *        if (cam_hit)
+ *          return (GMX_RX[prt]_ADR_CTL[CAM_MODE] ? ACCEPT : REJECT);
+ *        else
+ *          return (GMX_RX[prt]_ADR_CTL[CAM_MODE] ? REJECT : ACCEPT);
+ *      ]
+ *      @endverbatim
+ *
+ * * XAUI Mode
+ *
+ *   In XAUI mode, only GMX_RX0_ADR_CTL is used.  GMX_RX[1,2,3]_ADR_CTL should not be used.
+ */
+union cvmx_gmxx_rxx_adr_ctl {
+	u64 u64;
+	struct cvmx_gmxx_rxx_adr_ctl_s {
+		u64 reserved_4_63 : 60;
+		u64 cam_mode : 1;
+		u64 mcst : 2;
+		u64 bcst : 1;
+	} s;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn30xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn31xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn38xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn38xxp2;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn50xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn52xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn52xxp1;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn56xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn56xxp1;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn58xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn58xxp1;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn61xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn63xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn63xxp1;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn66xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn68xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn68xxp1;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn70xx;
+	struct cvmx_gmxx_rxx_adr_ctl_s cn70xxp1;
+	struct cvmx_gmxx_rxx_adr_ctl_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_adr_ctl cvmx_gmxx_rxx_adr_ctl_t;
+
+/**
+ * cvmx_gmx#_rx#_decision
+ *
+ * GMX_RX_DECISION = The byte count to decide when to accept or filter a packet
+ *
+ *
+ * Notes:
+ * As each byte in a packet is received by GMX, the L2 byte count is compared
+ * against the GMX_RX_DECISION[CNT].  The L2 byte count is the number of bytes
+ * from the beginning of the L2 header (DMAC).  In normal operation, the L2
+ * header begins after the PREAMBLE+SFD (GMX_RX_FRM_CTL[PRE_CHK]=1) and any
+ * optional UDD skip data (GMX_RX_UDD_SKP[LEN]).
+ *
+ * When GMX_RX_FRM_CTL[PRE_CHK] is clear, PREAMBLE+SFD are prepended to the
+ * packet and would require UDD skip length to account for them.
+ *
+ *                                                 L2 Size
+ * Port Mode             <GMX_RX_DECISION bytes (default=24)       >=GMX_RX_DECISION bytes (default=24)
+ *
+ * Full Duplex           accept packet                             apply filters
+ *                       no filtering is applied                   accept packet based on DMAC and PAUSE packet filters
+ *
+ * Half Duplex           drop packet                               apply filters
+ *                       packet is unconditionally dropped         accept packet based on DMAC
+ *
+ * where l2_size = MAX(0, total_packet_size - GMX_RX_UDD_SKP[LEN] - ((GMX_RX_FRM_CTL[PRE_CHK]==1)*8)
+ */
+union cvmx_gmxx_rxx_decision {
+	u64 u64;
+	struct cvmx_gmxx_rxx_decision_s {
+		u64 reserved_5_63 : 59;
+		u64 cnt : 5;
+	} s;
+	struct cvmx_gmxx_rxx_decision_s cn30xx;
+	struct cvmx_gmxx_rxx_decision_s cn31xx;
+	struct cvmx_gmxx_rxx_decision_s cn38xx;
+	struct cvmx_gmxx_rxx_decision_s cn38xxp2;
+	struct cvmx_gmxx_rxx_decision_s cn50xx;
+	struct cvmx_gmxx_rxx_decision_s cn52xx;
+	struct cvmx_gmxx_rxx_decision_s cn52xxp1;
+	struct cvmx_gmxx_rxx_decision_s cn56xx;
+	struct cvmx_gmxx_rxx_decision_s cn56xxp1;
+	struct cvmx_gmxx_rxx_decision_s cn58xx;
+	struct cvmx_gmxx_rxx_decision_s cn58xxp1;
+	struct cvmx_gmxx_rxx_decision_s cn61xx;
+	struct cvmx_gmxx_rxx_decision_s cn63xx;
+	struct cvmx_gmxx_rxx_decision_s cn63xxp1;
+	struct cvmx_gmxx_rxx_decision_s cn66xx;
+	struct cvmx_gmxx_rxx_decision_s cn68xx;
+	struct cvmx_gmxx_rxx_decision_s cn68xxp1;
+	struct cvmx_gmxx_rxx_decision_s cn70xx;
+	struct cvmx_gmxx_rxx_decision_s cn70xxp1;
+	struct cvmx_gmxx_rxx_decision_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_decision cvmx_gmxx_rxx_decision_t;
+
+/**
+ * cvmx_gmx#_rx#_frm_chk
+ *
+ * GMX_RX_FRM_CHK = Which frame errors will set the ERR bit of the frame
+ *
+ *
+ * Notes:
+ * If GMX_RX_UDD_SKP[LEN] != 0, then LENERR will be forced to zero in HW.
+ *
+ * In XAUI mode prt0 is used for checking.
+ */
+union cvmx_gmxx_rxx_frm_chk {
+	u64 u64;
+	struct cvmx_gmxx_rxx_frm_chk_s {
+		u64 reserved_10_63 : 54;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} s;
+	struct cvmx_gmxx_rxx_frm_chk_s cn30xx;
+	struct cvmx_gmxx_rxx_frm_chk_s cn31xx;
+	struct cvmx_gmxx_rxx_frm_chk_s cn38xx;
+	struct cvmx_gmxx_rxx_frm_chk_s cn38xxp2;
+	struct cvmx_gmxx_rxx_frm_chk_cn50xx {
+		u64 reserved_10_63 : 54;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_6_6 : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 reserved_0_0 : 1;
+	} cn50xx;
+	struct cvmx_gmxx_rxx_frm_chk_cn52xx {
+		u64 reserved_9_63 : 55;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 reserved_0_0 : 1;
+	} cn52xx;
+	struct cvmx_gmxx_rxx_frm_chk_cn52xx cn52xxp1;
+	struct cvmx_gmxx_rxx_frm_chk_cn52xx cn56xx;
+	struct cvmx_gmxx_rxx_frm_chk_cn52xx cn56xxp1;
+	struct cvmx_gmxx_rxx_frm_chk_s cn58xx;
+	struct cvmx_gmxx_rxx_frm_chk_s cn58xxp1;
+	struct cvmx_gmxx_rxx_frm_chk_cn61xx {
+		u64 reserved_9_63 : 55;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn61xx;
+	struct cvmx_gmxx_rxx_frm_chk_cn61xx cn63xx;
+	struct cvmx_gmxx_rxx_frm_chk_cn61xx cn63xxp1;
+	struct cvmx_gmxx_rxx_frm_chk_cn61xx cn66xx;
+	struct cvmx_gmxx_rxx_frm_chk_cn61xx cn68xx;
+	struct cvmx_gmxx_rxx_frm_chk_cn61xx cn68xxp1;
+	struct cvmx_gmxx_rxx_frm_chk_cn61xx cn70xx;
+	struct cvmx_gmxx_rxx_frm_chk_cn61xx cn70xxp1;
+	struct cvmx_gmxx_rxx_frm_chk_cn61xx cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_frm_chk cvmx_gmxx_rxx_frm_chk_t;
+
+/**
+ * cvmx_gmx#_rx#_frm_ctl
+ *
+ * GMX_RX_FRM_CTL = Frame Control
+ *
+ *
+ * Notes:
+ * * PRE_STRP
+ *   When PRE_CHK is set (indicating that the PREAMBLE will be sent), PRE_STRP
+ *   determines if the PREAMBLE+SFD bytes are thrown away or sent to the Octane
+ *   core as part of the packet.
+ *
+ *   In either mode, the PREAMBLE+SFD bytes are not counted toward the packet
+ *   size when checking against the MIN and MAX bounds.  Furthermore, the bytes
+ *   are skipped when locating the start of the L2 header for DMAC and Control
+ *   frame recognition.
+ *
+ * * CTL_BCK/CTL_DRP
+ *   These bits control how the HW handles incoming PAUSE packets.  Here are
+ *   the most common modes of operation:
+ *     CTL_BCK=1,CTL_DRP=1   - HW does it all
+ *     CTL_BCK=0,CTL_DRP=0   - SW sees all pause frames
+ *     CTL_BCK=0,CTL_DRP=1   - all pause frames are completely ignored
+ *
+ *   These control bits should be set to CTL_BCK=0,CTL_DRP=0 in halfdup mode.
+ *   Since PAUSE packets only apply to fulldup operation, any PAUSE packet
+ *   would constitute an exception which should be handled by the processing
+ *   cores.  PAUSE packets should not be forwarded.
+ */
+union cvmx_gmxx_rxx_frm_ctl {
+	u64 u64;
+	struct cvmx_gmxx_rxx_frm_ctl_s {
+		u64 reserved_13_63 : 51;
+		u64 ptp_mode : 1;
+		u64 reserved_11_11 : 1;
+		u64 null_dis : 1;
+		u64 pre_align : 1;
+		u64 pad_len : 1;
+		u64 vlan_len : 1;
+		u64 pre_free : 1;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} s;
+	struct cvmx_gmxx_rxx_frm_ctl_cn30xx {
+		u64 reserved_9_63 : 55;
+		u64 pad_len : 1;
+		u64 vlan_len : 1;
+		u64 pre_free : 1;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} cn30xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn31xx {
+		u64 reserved_8_63 : 56;
+		u64 vlan_len : 1;
+		u64 pre_free : 1;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} cn31xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn30xx cn38xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn31xx cn38xxp2;
+	struct cvmx_gmxx_rxx_frm_ctl_cn50xx {
+		u64 reserved_11_63 : 53;
+		u64 null_dis : 1;
+		u64 pre_align : 1;
+		u64 reserved_7_8 : 2;
+		u64 pre_free : 1;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} cn50xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn50xx cn52xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn50xx cn52xxp1;
+	struct cvmx_gmxx_rxx_frm_ctl_cn50xx cn56xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn56xxp1 {
+		u64 reserved_10_63 : 54;
+		u64 pre_align : 1;
+		u64 reserved_7_8 : 2;
+		u64 pre_free : 1;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} cn56xxp1;
+	struct cvmx_gmxx_rxx_frm_ctl_cn58xx {
+		u64 reserved_11_63 : 53;
+		u64 null_dis : 1;
+		u64 pre_align : 1;
+		u64 pad_len : 1;
+		u64 vlan_len : 1;
+		u64 pre_free : 1;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} cn58xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn30xx cn58xxp1;
+	struct cvmx_gmxx_rxx_frm_ctl_cn61xx {
+		u64 reserved_13_63 : 51;
+		u64 ptp_mode : 1;
+		u64 reserved_11_11 : 1;
+		u64 null_dis : 1;
+		u64 pre_align : 1;
+		u64 reserved_7_8 : 2;
+		u64 pre_free : 1;
+		u64 ctl_smac : 1;
+		u64 ctl_mcst : 1;
+		u64 ctl_bck : 1;
+		u64 ctl_drp : 1;
+		u64 pre_strp : 1;
+		u64 pre_chk : 1;
+	} cn61xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn61xx cn63xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn61xx cn63xxp1;
+	struct cvmx_gmxx_rxx_frm_ctl_cn61xx cn66xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn61xx cn68xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn61xx cn68xxp1;
+	struct cvmx_gmxx_rxx_frm_ctl_cn61xx cn70xx;
+	struct cvmx_gmxx_rxx_frm_ctl_cn61xx cn70xxp1;
+	struct cvmx_gmxx_rxx_frm_ctl_cn61xx cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_frm_ctl cvmx_gmxx_rxx_frm_ctl_t;
+
+/**
+ * cvmx_gmx#_rx#_frm_max
+ *
+ * GMX_RX_FRM_MAX = Frame Max length
+ *
+ *
+ * Notes:
+ * In spi4 mode, all spi4 ports use prt0 for checking.
+ *
+ * When changing the LEN field, be sure that LEN does not exceed
+ * GMX_RX_JABBER[CNT]. Failure to meet this constraint will cause packets that
+ * are within the maximum length parameter to be rejected because they exceed
+ * the GMX_RX_JABBER[CNT] limit.
+ */
+union cvmx_gmxx_rxx_frm_max {
+	u64 u64;
+	struct cvmx_gmxx_rxx_frm_max_s {
+		u64 reserved_16_63 : 48;
+		u64 len : 16;
+	} s;
+	struct cvmx_gmxx_rxx_frm_max_s cn30xx;
+	struct cvmx_gmxx_rxx_frm_max_s cn31xx;
+	struct cvmx_gmxx_rxx_frm_max_s cn38xx;
+	struct cvmx_gmxx_rxx_frm_max_s cn38xxp2;
+	struct cvmx_gmxx_rxx_frm_max_s cn58xx;
+	struct cvmx_gmxx_rxx_frm_max_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_rxx_frm_max cvmx_gmxx_rxx_frm_max_t;
+
+/**
+ * cvmx_gmx#_rx#_frm_min
+ *
+ * GMX_RX_FRM_MIN = Frame Min length
+ *
+ *
+ * Notes:
+ * In spi4 mode, all spi4 ports use prt0 for checking.
+ *
+ */
+union cvmx_gmxx_rxx_frm_min {
+	u64 u64;
+	struct cvmx_gmxx_rxx_frm_min_s {
+		u64 reserved_16_63 : 48;
+		u64 len : 16;
+	} s;
+	struct cvmx_gmxx_rxx_frm_min_s cn30xx;
+	struct cvmx_gmxx_rxx_frm_min_s cn31xx;
+	struct cvmx_gmxx_rxx_frm_min_s cn38xx;
+	struct cvmx_gmxx_rxx_frm_min_s cn38xxp2;
+	struct cvmx_gmxx_rxx_frm_min_s cn58xx;
+	struct cvmx_gmxx_rxx_frm_min_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_rxx_frm_min cvmx_gmxx_rxx_frm_min_t;
+
+/**
+ * cvmx_gmx#_rx#_ifg
+ *
+ * GMX_RX_IFG = RX Min IFG
+ *
+ */
+union cvmx_gmxx_rxx_ifg {
+	u64 u64;
+	struct cvmx_gmxx_rxx_ifg_s {
+		u64 reserved_4_63 : 60;
+		u64 ifg : 4;
+	} s;
+	struct cvmx_gmxx_rxx_ifg_s cn30xx;
+	struct cvmx_gmxx_rxx_ifg_s cn31xx;
+	struct cvmx_gmxx_rxx_ifg_s cn38xx;
+	struct cvmx_gmxx_rxx_ifg_s cn38xxp2;
+	struct cvmx_gmxx_rxx_ifg_s cn50xx;
+	struct cvmx_gmxx_rxx_ifg_s cn52xx;
+	struct cvmx_gmxx_rxx_ifg_s cn52xxp1;
+	struct cvmx_gmxx_rxx_ifg_s cn56xx;
+	struct cvmx_gmxx_rxx_ifg_s cn56xxp1;
+	struct cvmx_gmxx_rxx_ifg_s cn58xx;
+	struct cvmx_gmxx_rxx_ifg_s cn58xxp1;
+	struct cvmx_gmxx_rxx_ifg_s cn61xx;
+	struct cvmx_gmxx_rxx_ifg_s cn63xx;
+	struct cvmx_gmxx_rxx_ifg_s cn63xxp1;
+	struct cvmx_gmxx_rxx_ifg_s cn66xx;
+	struct cvmx_gmxx_rxx_ifg_s cn68xx;
+	struct cvmx_gmxx_rxx_ifg_s cn68xxp1;
+	struct cvmx_gmxx_rxx_ifg_s cn70xx;
+	struct cvmx_gmxx_rxx_ifg_s cn70xxp1;
+	struct cvmx_gmxx_rxx_ifg_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_ifg cvmx_gmxx_rxx_ifg_t;
+
+/**
+ * cvmx_gmx#_rx#_int_en
+ *
+ * GMX_RX_INT_EN = Interrupt Enable
+ *
+ *
+ * Notes:
+ * In XAUI mode prt0 is used for checking.
+ *
+ */
+union cvmx_gmxx_rxx_int_en {
+	u64 u64;
+	struct cvmx_gmxx_rxx_int_en_s {
+		u64 reserved_30_63 : 34;
+		u64 wol : 1;
+		u64 hg2cc : 1;
+		u64 hg2fld : 1;
+		u64 undat : 1;
+		u64 uneop : 1;
+		u64 unsop : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 pause_drp : 1;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} s;
+	struct cvmx_gmxx_rxx_int_en_cn30xx {
+		u64 reserved_19_63 : 45;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn30xx;
+	struct cvmx_gmxx_rxx_int_en_cn30xx cn31xx;
+	struct cvmx_gmxx_rxx_int_en_cn30xx cn38xx;
+	struct cvmx_gmxx_rxx_int_en_cn30xx cn38xxp2;
+	struct cvmx_gmxx_rxx_int_en_cn50xx {
+		u64 reserved_20_63 : 44;
+		u64 pause_drp : 1;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_6_6 : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 reserved_0_0 : 1;
+	} cn50xx;
+	struct cvmx_gmxx_rxx_int_en_cn52xx {
+		u64 reserved_29_63 : 35;
+		u64 hg2cc : 1;
+		u64 hg2fld : 1;
+		u64 undat : 1;
+		u64 uneop : 1;
+		u64 unsop : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 pause_drp : 1;
+		u64 reserved_16_18 : 3;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 reserved_9_9 : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 reserved_0_0 : 1;
+	} cn52xx;
+	struct cvmx_gmxx_rxx_int_en_cn52xx cn52xxp1;
+	struct cvmx_gmxx_rxx_int_en_cn52xx cn56xx;
+	struct cvmx_gmxx_rxx_int_en_cn56xxp1 {
+		u64 reserved_27_63 : 37;
+		u64 undat : 1;
+		u64 uneop : 1;
+		u64 unsop : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 pause_drp : 1;
+		u64 reserved_16_18 : 3;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 reserved_9_9 : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 reserved_0_0 : 1;
+	} cn56xxp1;
+	struct cvmx_gmxx_rxx_int_en_cn58xx {
+		u64 reserved_20_63 : 44;
+		u64 pause_drp : 1;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn58xx;
+	struct cvmx_gmxx_rxx_int_en_cn58xx cn58xxp1;
+	struct cvmx_gmxx_rxx_int_en_cn61xx {
+		u64 reserved_29_63 : 35;
+		u64 hg2cc : 1;
+		u64 hg2fld : 1;
+		u64 undat : 1;
+		u64 uneop : 1;
+		u64 unsop : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 pause_drp : 1;
+		u64 reserved_16_18 : 3;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 reserved_9_9 : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn61xx;
+	struct cvmx_gmxx_rxx_int_en_cn61xx cn63xx;
+	struct cvmx_gmxx_rxx_int_en_cn61xx cn63xxp1;
+	struct cvmx_gmxx_rxx_int_en_cn61xx cn66xx;
+	struct cvmx_gmxx_rxx_int_en_cn61xx cn68xx;
+	struct cvmx_gmxx_rxx_int_en_cn61xx cn68xxp1;
+	struct cvmx_gmxx_rxx_int_en_cn70xx {
+		u64 reserved_30_63 : 34;
+		u64 wol : 1;
+		u64 hg2cc : 1;
+		u64 hg2fld : 1;
+		u64 undat : 1;
+		u64 uneop : 1;
+		u64 unsop : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 pause_drp : 1;
+		u64 reserved_16_18 : 3;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 reserved_9_9 : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn70xx;
+	struct cvmx_gmxx_rxx_int_en_cn70xx cn70xxp1;
+	struct cvmx_gmxx_rxx_int_en_cn61xx cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_int_en cvmx_gmxx_rxx_int_en_t;
+
+/**
+ * cvmx_gmx#_rx#_int_reg
+ *
+ * GMX_RX_INT_REG = Interrupt Register
+ *
+ *
+ * Notes:
+ * (1) exceptions will only be raised to the control processor if the
+ *     corresponding bit in the GMX_RX_INT_EN register is set.
+ *
+ * (2) exception conditions 10:0 can also set the rcv/opcode in the received
+ *     packet's workQ entry.  The GMX_RX_FRM_CHK register provides a bit mask
+ *     for configuring which conditions set the error.
+ *
+ * (3) in half duplex operation, the expectation is that collisions will appear
+ *     as either MINERR o r CAREXT errors.
+ *
+ * (4) JABBER - An RX Jabber error indicates that a packet was received which
+ *              is longer than the maximum allowed packet as defined by the
+ *              system.  GMX will truncate the packet at the JABBER count.
+ *              Failure to do so could lead to system instabilty.
+ *
+ * (5) NIBERR - This error is illegal at 1000Mbs speeds
+ *              (GMX_RX_PRT_CFG[SPEED]==0) and will never assert.
+ *
+ * (6) MAXERR - for untagged frames, the total frame DA+SA+TL+DATA+PAD+FCS >
+ *              GMX_RX_FRM_MAX.  For tagged frames, DA+SA+VLAN+TL+DATA+PAD+FCS
+ *              > GMX_RX_FRM_MAX + 4*VLAN_VAL + 4*VLAN_STACKED.
+ *
+ * (7) MINERR - total frame DA+SA+TL+DATA+PAD+FCS < 64
+ *
+ * (8) ALNERR - Indicates that the packet received was not an integer number of
+ *              bytes.  If FCS checking is enabled, ALNERR will only assert if
+ *              the FCS is bad.  If FCS checking is disabled, ALNERR will
+ *              assert in all non-integer frame cases.
+ *
+ * (9) Collisions - Collisions can only occur in half-duplex mode.  A collision
+ *                  is assumed by the receiver when the slottime
+ *                  (GMX_PRT_CFG[SLOTTIME]) is not satisfied.  In 10/100 mode,
+ *                  this will result in a frame < SLOTTIME.  In 1000 mode, it
+ *                  could result either in frame < SLOTTIME or a carrier extend
+ *                  error with the SLOTTIME.  These conditions are visible by...
+ *
+ *                  . transfer ended before slottime - COLDET
+ *                  . carrier extend error           - CAREXT
+ *
+ * (A) LENERR - Length errors occur when the received packet does not match the
+ *              length field.  LENERR is only checked for packets between 64
+ *              and 1500 bytes.  For untagged frames, the length must exact
+ *              match.  For tagged frames the length or length+4 must match.
+ *
+ * (B) PCTERR - checks that the frame begins with a valid PREAMBLE sequence.
+ *              Does not check the number of PREAMBLE cycles.
+ *
+ * (C) OVRERR -
+ *
+ *              OVRERR is an architectural assertion check internal to GMX to
+ *              make sure no assumption was violated.  In a correctly operating
+ *              system, this interrupt can never fire.
+ *
+ *              GMX has an internal arbiter which selects which of 4 ports to
+ *              buffer in the main RX FIFO.  If we normally buffer 8 bytes,
+ *              then each port will typically push a tick every 8 cycles - if
+ *              the packet interface is going as fast as possible.  If there
+ *              are four ports, they push every two cycles.  So that's the
+ *              assumption.  That the inbound module will always be able to
+ *              consume the tick before another is produced.  If that doesn't
+ *              happen - that's when OVRERR will assert.
+ *
+ * (D) In XAUI mode prt0 is used for interrupt logging.
+ */
+union cvmx_gmxx_rxx_int_reg {
+	u64 u64;
+	struct cvmx_gmxx_rxx_int_reg_s {
+		u64 reserved_30_63 : 34;
+		u64 wol : 1;
+		u64 hg2cc : 1;
+		u64 hg2fld : 1;
+		u64 undat : 1;
+		u64 uneop : 1;
+		u64 unsop : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 pause_drp : 1;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} s;
+	struct cvmx_gmxx_rxx_int_reg_cn30xx {
+		u64 reserved_19_63 : 45;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn30xx;
+	struct cvmx_gmxx_rxx_int_reg_cn30xx cn31xx;
+	struct cvmx_gmxx_rxx_int_reg_cn30xx cn38xx;
+	struct cvmx_gmxx_rxx_int_reg_cn30xx cn38xxp2;
+	struct cvmx_gmxx_rxx_int_reg_cn50xx {
+		u64 reserved_20_63 : 44;
+		u64 pause_drp : 1;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_6_6 : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 reserved_0_0 : 1;
+	} cn50xx;
+	struct cvmx_gmxx_rxx_int_reg_cn52xx {
+		u64 reserved_29_63 : 35;
+		u64 hg2cc : 1;
+		u64 hg2fld : 1;
+		u64 undat : 1;
+		u64 uneop : 1;
+		u64 unsop : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 pause_drp : 1;
+		u64 reserved_16_18 : 3;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 reserved_9_9 : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 reserved_0_0 : 1;
+	} cn52xx;
+	struct cvmx_gmxx_rxx_int_reg_cn52xx cn52xxp1;
+	struct cvmx_gmxx_rxx_int_reg_cn52xx cn56xx;
+	struct cvmx_gmxx_rxx_int_reg_cn56xxp1 {
+		u64 reserved_27_63 : 37;
+		u64 undat : 1;
+		u64 uneop : 1;
+		u64 unsop : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 pause_drp : 1;
+		u64 reserved_16_18 : 3;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 reserved_9_9 : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 reserved_0_0 : 1;
+	} cn56xxp1;
+	struct cvmx_gmxx_rxx_int_reg_cn58xx {
+		u64 reserved_20_63 : 44;
+		u64 pause_drp : 1;
+		u64 phy_dupx : 1;
+		u64 phy_spd : 1;
+		u64 phy_link : 1;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 niberr : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 lenerr : 1;
+		u64 alnerr : 1;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 maxerr : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn58xx;
+	struct cvmx_gmxx_rxx_int_reg_cn58xx cn58xxp1;
+	struct cvmx_gmxx_rxx_int_reg_cn61xx {
+		u64 reserved_29_63 : 35;
+		u64 hg2cc : 1;
+		u64 hg2fld : 1;
+		u64 undat : 1;
+		u64 uneop : 1;
+		u64 unsop : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 pause_drp : 1;
+		u64 reserved_16_18 : 3;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 reserved_9_9 : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn61xx;
+	struct cvmx_gmxx_rxx_int_reg_cn61xx cn63xx;
+	struct cvmx_gmxx_rxx_int_reg_cn61xx cn63xxp1;
+	struct cvmx_gmxx_rxx_int_reg_cn61xx cn66xx;
+	struct cvmx_gmxx_rxx_int_reg_cn61xx cn68xx;
+	struct cvmx_gmxx_rxx_int_reg_cn61xx cn68xxp1;
+	struct cvmx_gmxx_rxx_int_reg_cn70xx {
+		u64 reserved_30_63 : 34;
+		u64 wol : 1;
+		u64 hg2cc : 1;
+		u64 hg2fld : 1;
+		u64 undat : 1;
+		u64 uneop : 1;
+		u64 unsop : 1;
+		u64 bad_term : 1;
+		u64 bad_seq : 1;
+		u64 rem_fault : 1;
+		u64 loc_fault : 1;
+		u64 pause_drp : 1;
+		u64 reserved_16_18 : 3;
+		u64 ifgerr : 1;
+		u64 coldet : 1;
+		u64 falerr : 1;
+		u64 rsverr : 1;
+		u64 pcterr : 1;
+		u64 ovrerr : 1;
+		u64 reserved_9_9 : 1;
+		u64 skperr : 1;
+		u64 rcverr : 1;
+		u64 reserved_5_6 : 2;
+		u64 fcserr : 1;
+		u64 jabber : 1;
+		u64 reserved_2_2 : 1;
+		u64 carext : 1;
+		u64 minerr : 1;
+	} cn70xx;
+	struct cvmx_gmxx_rxx_int_reg_cn70xx cn70xxp1;
+	struct cvmx_gmxx_rxx_int_reg_cn61xx cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_int_reg cvmx_gmxx_rxx_int_reg_t;
+
+/**
+ * cvmx_gmx#_rx#_jabber
+ *
+ * GMX_RX_JABBER = The max size packet after which GMX will truncate
+ *
+ *
+ * Notes:
+ * CNT must be 8-byte aligned such that CNT[2:0] == 0
+ *
+ * The packet that will be sent to the packet input logic will have an
+ * additionl 8 bytes if GMX_RX_FRM_CTL[PRE_CHK] is set and
+ * GMX_RX_FRM_CTL[PRE_STRP] is clear.  The max packet that will be sent is
+ * defined as...
+ *
+ *      max_sized_packet = GMX_RX_JABBER[CNT]+((GMX_RX_FRM_CTL[PRE_CHK] & !GMX_RX_FRM_CTL[PRE_STRP])*8)
+ *
+ * In XAUI mode prt0 is used for checking.
+ */
+union cvmx_gmxx_rxx_jabber {
+	u64 u64;
+	struct cvmx_gmxx_rxx_jabber_s {
+		u64 reserved_16_63 : 48;
+		u64 cnt : 16;
+	} s;
+	struct cvmx_gmxx_rxx_jabber_s cn30xx;
+	struct cvmx_gmxx_rxx_jabber_s cn31xx;
+	struct cvmx_gmxx_rxx_jabber_s cn38xx;
+	struct cvmx_gmxx_rxx_jabber_s cn38xxp2;
+	struct cvmx_gmxx_rxx_jabber_s cn50xx;
+	struct cvmx_gmxx_rxx_jabber_s cn52xx;
+	struct cvmx_gmxx_rxx_jabber_s cn52xxp1;
+	struct cvmx_gmxx_rxx_jabber_s cn56xx;
+	struct cvmx_gmxx_rxx_jabber_s cn56xxp1;
+	struct cvmx_gmxx_rxx_jabber_s cn58xx;
+	struct cvmx_gmxx_rxx_jabber_s cn58xxp1;
+	struct cvmx_gmxx_rxx_jabber_s cn61xx;
+	struct cvmx_gmxx_rxx_jabber_s cn63xx;
+	struct cvmx_gmxx_rxx_jabber_s cn63xxp1;
+	struct cvmx_gmxx_rxx_jabber_s cn66xx;
+	struct cvmx_gmxx_rxx_jabber_s cn68xx;
+	struct cvmx_gmxx_rxx_jabber_s cn68xxp1;
+	struct cvmx_gmxx_rxx_jabber_s cn70xx;
+	struct cvmx_gmxx_rxx_jabber_s cn70xxp1;
+	struct cvmx_gmxx_rxx_jabber_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_jabber cvmx_gmxx_rxx_jabber_t;
+
+/**
+ * cvmx_gmx#_rx#_pause_drop_time
+ *
+ * GMX_RX_PAUSE_DROP_TIME = The TIME field in a PAUSE Packet which was dropped due to GMX RX FIFO full condition
+ *
+ */
+union cvmx_gmxx_rxx_pause_drop_time {
+	u64 u64;
+	struct cvmx_gmxx_rxx_pause_drop_time_s {
+		u64 reserved_16_63 : 48;
+		u64 status : 16;
+	} s;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn50xx;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn52xx;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn52xxp1;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn56xx;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn56xxp1;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn58xx;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn58xxp1;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn61xx;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn63xx;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn63xxp1;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn66xx;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn68xx;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn68xxp1;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn70xx;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cn70xxp1;
+	struct cvmx_gmxx_rxx_pause_drop_time_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_pause_drop_time cvmx_gmxx_rxx_pause_drop_time_t;
+
+/**
+ * cvmx_gmx#_rx#_rx_inbnd
+ *
+ * GMX_RX_INBND = RGMII InBand Link Status
+ *
+ *
+ * Notes:
+ * These fields are only valid if the attached PHY is operating in RGMII mode
+ * and supports the optional in-band status (see section 3.4.1 of the RGMII
+ * specification, version 1.3 for more information).
+ */
+union cvmx_gmxx_rxx_rx_inbnd {
+	u64 u64;
+	struct cvmx_gmxx_rxx_rx_inbnd_s {
+		u64 reserved_4_63 : 60;
+		u64 duplex : 1;
+		u64 speed : 2;
+		u64 status : 1;
+	} s;
+	struct cvmx_gmxx_rxx_rx_inbnd_s cn30xx;
+	struct cvmx_gmxx_rxx_rx_inbnd_s cn31xx;
+	struct cvmx_gmxx_rxx_rx_inbnd_s cn38xx;
+	struct cvmx_gmxx_rxx_rx_inbnd_s cn38xxp2;
+	struct cvmx_gmxx_rxx_rx_inbnd_s cn50xx;
+	struct cvmx_gmxx_rxx_rx_inbnd_s cn58xx;
+	struct cvmx_gmxx_rxx_rx_inbnd_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_rxx_rx_inbnd cvmx_gmxx_rxx_rx_inbnd_t;
+
+/**
+ * cvmx_gmx#_rx#_stats_ctl
+ *
+ * GMX_RX_STATS_CTL = RX Stats Control register
+ *
+ */
+union cvmx_gmxx_rxx_stats_ctl {
+	u64 u64;
+	struct cvmx_gmxx_rxx_stats_ctl_s {
+		u64 reserved_1_63 : 63;
+		u64 rd_clr : 1;
+	} s;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn30xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn31xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn38xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn38xxp2;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn50xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn52xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn52xxp1;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn56xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn56xxp1;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn58xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn58xxp1;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn61xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn63xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn63xxp1;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn66xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn68xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn68xxp1;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn70xx;
+	struct cvmx_gmxx_rxx_stats_ctl_s cn70xxp1;
+	struct cvmx_gmxx_rxx_stats_ctl_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_stats_ctl cvmx_gmxx_rxx_stats_ctl_t;
+
+/**
+ * cvmx_gmx#_rx#_stats_octs
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_rxx_stats_octs {
+	u64 u64;
+	struct cvmx_gmxx_rxx_stats_octs_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_gmxx_rxx_stats_octs_s cn30xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn31xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn38xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn38xxp2;
+	struct cvmx_gmxx_rxx_stats_octs_s cn50xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn52xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn52xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_s cn56xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn56xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_s cn58xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn58xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_s cn61xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn63xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn63xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_s cn66xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn68xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn68xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_s cn70xx;
+	struct cvmx_gmxx_rxx_stats_octs_s cn70xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_stats_octs cvmx_gmxx_rxx_stats_octs_t;
+
+/**
+ * cvmx_gmx#_rx#_stats_octs_ctl
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_rxx_stats_octs_ctl {
+	u64 u64;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn30xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn31xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn38xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn38xxp2;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn50xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn52xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn52xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn56xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn56xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn58xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn58xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn61xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn63xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn63xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn66xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn68xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn68xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn70xx;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cn70xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_ctl_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_stats_octs_ctl cvmx_gmxx_rxx_stats_octs_ctl_t;
+
+/**
+ * cvmx_gmx#_rx#_stats_octs_dmac
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_rxx_stats_octs_dmac {
+	u64 u64;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn30xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn31xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn38xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn38xxp2;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn50xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn52xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn52xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn56xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn56xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn58xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn58xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn61xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn63xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn63xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn66xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn68xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn68xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn70xx;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cn70xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_dmac_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_stats_octs_dmac cvmx_gmxx_rxx_stats_octs_dmac_t;
+
+/**
+ * cvmx_gmx#_rx#_stats_octs_drp
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_rxx_stats_octs_drp {
+	u64 u64;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s {
+		u64 reserved_48_63 : 16;
+		u64 cnt : 48;
+	} s;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn30xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn31xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn38xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn38xxp2;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn50xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn52xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn52xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn56xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn56xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn58xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn58xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn61xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn63xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn63xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn66xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn68xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn68xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn70xx;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cn70xxp1;
+	struct cvmx_gmxx_rxx_stats_octs_drp_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_stats_octs_drp cvmx_gmxx_rxx_stats_octs_drp_t;
+
+/**
+ * cvmx_gmx#_rx#_stats_pkts
+ *
+ * Count of good received packets - packets that are not recognized as PAUSE
+ * packets, dropped due the DMAC filter, dropped due FIFO full status, or
+ * have any other OPCODE (FCS, Length, etc).
+ */
+union cvmx_gmxx_rxx_stats_pkts {
+	u64 u64;
+	struct cvmx_gmxx_rxx_stats_pkts_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn30xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn31xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn38xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn38xxp2;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn50xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn52xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn52xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn56xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn56xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn58xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn58xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn61xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn63xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn63xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn66xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn68xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn68xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn70xx;
+	struct cvmx_gmxx_rxx_stats_pkts_s cn70xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_stats_pkts cvmx_gmxx_rxx_stats_pkts_t;
+
+/**
+ * cvmx_gmx#_rx#_stats_pkts_bad
+ *
+ * Count of all packets received with some error that were not dropped
+ * either due to the dmac filter or lack of room in the receive FIFO.
+ */
+union cvmx_gmxx_rxx_stats_pkts_bad {
+	u64 u64;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn30xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn31xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn38xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn38xxp2;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn50xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn52xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn52xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn56xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn56xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn58xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn58xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn61xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn63xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn63xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn66xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn68xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn68xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn70xx;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cn70xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_bad_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_stats_pkts_bad cvmx_gmxx_rxx_stats_pkts_bad_t;
+
+/**
+ * cvmx_gmx#_rx#_stats_pkts_ctl
+ *
+ * Count of all packets received that were recognized as Flow Control or
+ * PAUSE packets.  PAUSE packets with any kind of error are counted in
+ * GMX_RX_STATS_PKTS_BAD.  Pause packets can be optionally dropped or
+ * forwarded based on the GMX_RX_FRM_CTL[CTL_DRP] bit.  This count
+ * increments regardless of whether the packet is dropped.  Pause packets
+ * will never be counted in GMX_RX_STATS_PKTS.  Packets dropped due the dmac
+ * filter will be counted in GMX_RX_STATS_PKTS_DMAC and not here.
+ */
+union cvmx_gmxx_rxx_stats_pkts_ctl {
+	u64 u64;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn30xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn31xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn38xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn38xxp2;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn50xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn52xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn52xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn56xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn56xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn58xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn58xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn61xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn63xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn63xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn66xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn68xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn68xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn70xx;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn70xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_ctl_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_stats_pkts_ctl cvmx_gmxx_rxx_stats_pkts_ctl_t;
+
+/**
+ * cvmx_gmx#_rx#_stats_pkts_dmac
+ *
+ * Count of all packets received that were dropped by the dmac filter.
+ * Packets that match the DMAC will be dropped and counted here regardless
+ * of if they were bad packets.  These packets will never be counted in
+ * GMX_RX_STATS_PKTS.
+ * Some packets that were not able to satisify the DECISION_CNT may not
+ * actually be dropped by Octeon, but they will be counted here as if they
+ * were dropped.
+ */
+union cvmx_gmxx_rxx_stats_pkts_dmac {
+	u64 u64;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn30xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn31xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn38xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn38xxp2;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn50xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn52xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn52xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn56xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn56xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn58xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn58xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn61xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn63xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn63xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn66xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn68xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn68xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn70xx;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn70xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_dmac_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_stats_pkts_dmac cvmx_gmxx_rxx_stats_pkts_dmac_t;
+
+/**
+ * cvmx_gmx#_rx#_stats_pkts_drp
+ *
+ * Count of all packets received that were dropped due to a full receive FIFO.
+ * This counts both partial packets in which there was enough space in the RX
+ * FIFO to begin to buffer and the packet and total drops in which no packet was
+ * sent to PKI.  This counts good and bad packets received - all packets dropped
+ * by the FIFO.  It does not count packets dropped by the dmac or pause packet
+ * filters.
+ */
+union cvmx_gmxx_rxx_stats_pkts_drp {
+	u64 u64;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn30xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn31xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn38xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn38xxp2;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn50xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn52xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn52xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn56xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn56xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn58xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn58xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn61xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn63xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn63xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn66xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn68xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn68xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn70xx;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cn70xxp1;
+	struct cvmx_gmxx_rxx_stats_pkts_drp_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_stats_pkts_drp cvmx_gmxx_rxx_stats_pkts_drp_t;
+
+/**
+ * cvmx_gmx#_rx#_udd_skp
+ *
+ * GMX_RX_UDD_SKP = Amount of User-defined data before the start of the L2 data
+ *
+ *
+ * Notes:
+ * (1) The skip bytes are part of the packet and will be sent down the NCB
+ *     packet interface and will be handled by PKI.
+ *
+ * (2) The system can determine if the UDD bytes are included in the FCS check
+ *     by using the FCSSEL field - if the FCS check is enabled.
+ *
+ * (3) Assume that the preamble/sfd is always at the start of the frame - even
+ *     before UDD bytes.  In most cases, there will be no preamble in these
+ *     cases since it will be packet interface in direct communication to
+ *     another packet interface (MAC to MAC) without a PHY involved.
+ *
+ * (4) We can still do address filtering and control packet filtering is the
+ *     user desires.
+ *
+ * (5) UDD_SKP must be 0 in half-duplex operation unless
+ *     GMX_RX_FRM_CTL[PRE_CHK] is clear.  If GMX_RX_FRM_CTL[PRE_CHK] is clear,
+ *     then UDD_SKP will normally be 8.
+ *
+ * (6) In all cases, the UDD bytes will be sent down the packet interface as
+ *     part of the packet.  The UDD bytes are never stripped from the actual
+ *     packet.
+ *
+ * (7) If LEN != 0, then GMX_RX_FRM_CHK[LENERR] will be disabled and GMX_RX_INT_REG[LENERR] will be zero
+ */
+union cvmx_gmxx_rxx_udd_skp {
+	u64 u64;
+	struct cvmx_gmxx_rxx_udd_skp_s {
+		u64 reserved_9_63 : 55;
+		u64 fcssel : 1;
+		u64 reserved_7_7 : 1;
+		u64 len : 7;
+	} s;
+	struct cvmx_gmxx_rxx_udd_skp_s cn30xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn31xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn38xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn38xxp2;
+	struct cvmx_gmxx_rxx_udd_skp_s cn50xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn52xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn52xxp1;
+	struct cvmx_gmxx_rxx_udd_skp_s cn56xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn56xxp1;
+	struct cvmx_gmxx_rxx_udd_skp_s cn58xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn58xxp1;
+	struct cvmx_gmxx_rxx_udd_skp_s cn61xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn63xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn63xxp1;
+	struct cvmx_gmxx_rxx_udd_skp_s cn66xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn68xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn68xxp1;
+	struct cvmx_gmxx_rxx_udd_skp_s cn70xx;
+	struct cvmx_gmxx_rxx_udd_skp_s cn70xxp1;
+	struct cvmx_gmxx_rxx_udd_skp_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rxx_udd_skp cvmx_gmxx_rxx_udd_skp_t;
+
+/**
+ * cvmx_gmx#_rx_bp_drop#
+ *
+ * GMX_RX_BP_DROP = FIFO mark for packet drop
+ *
+ *
+ * Notes:
+ * The actual watermark is dynamic with respect to the GMX_RX_PRTS
+ * register.  The GMX_RX_PRTS controls the depth of the port's
+ * FIFO so as ports are added or removed, the drop point may change.
+ *
+ * In XAUI mode prt0 is used for checking.
+ */
+union cvmx_gmxx_rx_bp_dropx {
+	u64 u64;
+	struct cvmx_gmxx_rx_bp_dropx_s {
+		u64 reserved_6_63 : 58;
+		u64 mark : 6;
+	} s;
+	struct cvmx_gmxx_rx_bp_dropx_s cn30xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn31xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn38xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn38xxp2;
+	struct cvmx_gmxx_rx_bp_dropx_s cn50xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn52xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn52xxp1;
+	struct cvmx_gmxx_rx_bp_dropx_s cn56xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn56xxp1;
+	struct cvmx_gmxx_rx_bp_dropx_s cn58xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn58xxp1;
+	struct cvmx_gmxx_rx_bp_dropx_s cn61xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn63xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn63xxp1;
+	struct cvmx_gmxx_rx_bp_dropx_s cn66xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn68xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn68xxp1;
+	struct cvmx_gmxx_rx_bp_dropx_s cn70xx;
+	struct cvmx_gmxx_rx_bp_dropx_s cn70xxp1;
+	struct cvmx_gmxx_rx_bp_dropx_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rx_bp_dropx cvmx_gmxx_rx_bp_dropx_t;
+
+/**
+ * cvmx_gmx#_rx_bp_off#
+ *
+ * GMX_RX_BP_OFF = Lowater mark for packet drop
+ *
+ *
+ * Notes:
+ * In XAUI mode, prt0 is used for checking.
+ *
+ */
+union cvmx_gmxx_rx_bp_offx {
+	u64 u64;
+	struct cvmx_gmxx_rx_bp_offx_s {
+		u64 reserved_6_63 : 58;
+		u64 mark : 6;
+	} s;
+	struct cvmx_gmxx_rx_bp_offx_s cn30xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn31xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn38xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn38xxp2;
+	struct cvmx_gmxx_rx_bp_offx_s cn50xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn52xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn52xxp1;
+	struct cvmx_gmxx_rx_bp_offx_s cn56xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn56xxp1;
+	struct cvmx_gmxx_rx_bp_offx_s cn58xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn58xxp1;
+	struct cvmx_gmxx_rx_bp_offx_s cn61xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn63xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn63xxp1;
+	struct cvmx_gmxx_rx_bp_offx_s cn66xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn68xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn68xxp1;
+	struct cvmx_gmxx_rx_bp_offx_s cn70xx;
+	struct cvmx_gmxx_rx_bp_offx_s cn70xxp1;
+	struct cvmx_gmxx_rx_bp_offx_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rx_bp_offx cvmx_gmxx_rx_bp_offx_t;
+
+/**
+ * cvmx_gmx#_rx_bp_on#
+ *
+ * GMX_RX_BP_ON = Hiwater mark for port/interface backpressure
+ *
+ *
+ * Notes:
+ * In XAUI mode, prt0 is used for checking.
+ *
+ */
+union cvmx_gmxx_rx_bp_onx {
+	u64 u64;
+	struct cvmx_gmxx_rx_bp_onx_s {
+		u64 reserved_11_63 : 53;
+		u64 mark : 11;
+	} s;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx {
+		u64 reserved_9_63 : 55;
+		u64 mark : 9;
+	} cn30xx;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn31xx;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn38xx;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn38xxp2;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn50xx;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn52xx;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn52xxp1;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn56xx;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn56xxp1;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn58xx;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn58xxp1;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn61xx;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn63xx;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn63xxp1;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn66xx;
+	struct cvmx_gmxx_rx_bp_onx_s cn68xx;
+	struct cvmx_gmxx_rx_bp_onx_s cn68xxp1;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn70xx;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cn70xxp1;
+	struct cvmx_gmxx_rx_bp_onx_cn30xx cnf71xx;
+};
+
+typedef union cvmx_gmxx_rx_bp_onx cvmx_gmxx_rx_bp_onx_t;
+
+/**
+ * cvmx_gmx#_rx_hg2_status
+ *
+ * ** HG2 message CSRs
+ *
+ */
+union cvmx_gmxx_rx_hg2_status {
+	u64 u64;
+	struct cvmx_gmxx_rx_hg2_status_s {
+		u64 reserved_48_63 : 16;
+		u64 phtim2go : 16;
+		u64 xof : 16;
+		u64 lgtim2go : 16;
+	} s;
+	struct cvmx_gmxx_rx_hg2_status_s cn52xx;
+	struct cvmx_gmxx_rx_hg2_status_s cn52xxp1;
+	struct cvmx_gmxx_rx_hg2_status_s cn56xx;
+	struct cvmx_gmxx_rx_hg2_status_s cn61xx;
+	struct cvmx_gmxx_rx_hg2_status_s cn63xx;
+	struct cvmx_gmxx_rx_hg2_status_s cn63xxp1;
+	struct cvmx_gmxx_rx_hg2_status_s cn66xx;
+	struct cvmx_gmxx_rx_hg2_status_s cn68xx;
+	struct cvmx_gmxx_rx_hg2_status_s cn68xxp1;
+	struct cvmx_gmxx_rx_hg2_status_s cn70xx;
+	struct cvmx_gmxx_rx_hg2_status_s cn70xxp1;
+	struct cvmx_gmxx_rx_hg2_status_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rx_hg2_status cvmx_gmxx_rx_hg2_status_t;
+
+/**
+ * cvmx_gmx#_rx_pass_en
+ *
+ * GMX_RX_PASS_EN = Packet pass through mode enable
+ *
+ * When both Octane ports are running in Spi4 mode, packets can be directly
+ * passed from one SPX interface to the other without being processed by the
+ * core or PP's.  The register has one bit for each port to enable the pass
+ * through feature.
+ *
+ * Notes:
+ * (1) Can only be used in dual Spi4 configs
+ *
+ * (2) The mapped pass through output port cannot be the destination port for
+ *     any Octane core traffic.
+ */
+union cvmx_gmxx_rx_pass_en {
+	u64 u64;
+	struct cvmx_gmxx_rx_pass_en_s {
+		u64 reserved_16_63 : 48;
+		u64 en : 16;
+	} s;
+	struct cvmx_gmxx_rx_pass_en_s cn38xx;
+	struct cvmx_gmxx_rx_pass_en_s cn38xxp2;
+	struct cvmx_gmxx_rx_pass_en_s cn58xx;
+	struct cvmx_gmxx_rx_pass_en_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_rx_pass_en cvmx_gmxx_rx_pass_en_t;
+
+/**
+ * cvmx_gmx#_rx_pass_map#
+ *
+ * GMX_RX_PASS_MAP = Packet pass through port map
+ *
+ */
+union cvmx_gmxx_rx_pass_mapx {
+	u64 u64;
+	struct cvmx_gmxx_rx_pass_mapx_s {
+		u64 reserved_4_63 : 60;
+		u64 dprt : 4;
+	} s;
+	struct cvmx_gmxx_rx_pass_mapx_s cn38xx;
+	struct cvmx_gmxx_rx_pass_mapx_s cn38xxp2;
+	struct cvmx_gmxx_rx_pass_mapx_s cn58xx;
+	struct cvmx_gmxx_rx_pass_mapx_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_rx_pass_mapx cvmx_gmxx_rx_pass_mapx_t;
+
+/**
+ * cvmx_gmx#_rx_prt_info
+ *
+ * GMX_RX_PRT_INFO = Report the RX status for port
+ *
+ *
+ * Notes:
+ * In XAUI mode, only the lsb (corresponding to port0) of DROP and COMMIT are used.
+ *
+ */
+union cvmx_gmxx_rx_prt_info {
+	u64 u64;
+	struct cvmx_gmxx_rx_prt_info_s {
+		u64 reserved_32_63 : 32;
+		u64 drop : 16;
+		u64 commit : 16;
+	} s;
+	struct cvmx_gmxx_rx_prt_info_cn30xx {
+		u64 reserved_19_63 : 45;
+		u64 drop : 3;
+		u64 reserved_3_15 : 13;
+		u64 commit : 3;
+	} cn30xx;
+	struct cvmx_gmxx_rx_prt_info_cn30xx cn31xx;
+	struct cvmx_gmxx_rx_prt_info_s cn38xx;
+	struct cvmx_gmxx_rx_prt_info_cn30xx cn50xx;
+	struct cvmx_gmxx_rx_prt_info_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 drop : 4;
+		u64 reserved_4_15 : 12;
+		u64 commit : 4;
+	} cn52xx;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn52xxp1;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn56xx;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn56xxp1;
+	struct cvmx_gmxx_rx_prt_info_s cn58xx;
+	struct cvmx_gmxx_rx_prt_info_s cn58xxp1;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn61xx;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn63xx;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn63xxp1;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn66xx;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn68xx;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn68xxp1;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn70xx;
+	struct cvmx_gmxx_rx_prt_info_cn52xx cn70xxp1;
+	struct cvmx_gmxx_rx_prt_info_cnf71xx {
+		u64 reserved_18_63 : 46;
+		u64 drop : 2;
+		u64 reserved_2_15 : 14;
+		u64 commit : 2;
+	} cnf71xx;
+};
+
+typedef union cvmx_gmxx_rx_prt_info cvmx_gmxx_rx_prt_info_t;
+
+/**
+ * cvmx_gmx#_rx_prts
+ *
+ * GMX_RX_PRTS = Number of FIFOs to carve the RX buffer into
+ *
+ *
+ * Notes:
+ * GMX_RX_PRTS[PRTS] must be set to '1' in XAUI mode.
+ *
+ */
+union cvmx_gmxx_rx_prts {
+	u64 u64;
+	struct cvmx_gmxx_rx_prts_s {
+		u64 reserved_3_63 : 61;
+		u64 prts : 3;
+	} s;
+	struct cvmx_gmxx_rx_prts_s cn30xx;
+	struct cvmx_gmxx_rx_prts_s cn31xx;
+	struct cvmx_gmxx_rx_prts_s cn38xx;
+	struct cvmx_gmxx_rx_prts_s cn38xxp2;
+	struct cvmx_gmxx_rx_prts_s cn50xx;
+	struct cvmx_gmxx_rx_prts_s cn52xx;
+	struct cvmx_gmxx_rx_prts_s cn52xxp1;
+	struct cvmx_gmxx_rx_prts_s cn56xx;
+	struct cvmx_gmxx_rx_prts_s cn56xxp1;
+	struct cvmx_gmxx_rx_prts_s cn58xx;
+	struct cvmx_gmxx_rx_prts_s cn58xxp1;
+	struct cvmx_gmxx_rx_prts_s cn61xx;
+	struct cvmx_gmxx_rx_prts_s cn63xx;
+	struct cvmx_gmxx_rx_prts_s cn63xxp1;
+	struct cvmx_gmxx_rx_prts_s cn66xx;
+	struct cvmx_gmxx_rx_prts_s cn68xx;
+	struct cvmx_gmxx_rx_prts_s cn68xxp1;
+	struct cvmx_gmxx_rx_prts_s cn70xx;
+	struct cvmx_gmxx_rx_prts_s cn70xxp1;
+	struct cvmx_gmxx_rx_prts_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rx_prts cvmx_gmxx_rx_prts_t;
+
+/**
+ * cvmx_gmx#_rx_tx_status
+ *
+ * GMX_RX_TX_STATUS = GMX RX/TX Status
+ *
+ */
+union cvmx_gmxx_rx_tx_status {
+	u64 u64;
+	struct cvmx_gmxx_rx_tx_status_s {
+		u64 reserved_7_63 : 57;
+		u64 tx : 3;
+		u64 reserved_3_3 : 1;
+		u64 rx : 3;
+	} s;
+	struct cvmx_gmxx_rx_tx_status_s cn30xx;
+	struct cvmx_gmxx_rx_tx_status_s cn31xx;
+	struct cvmx_gmxx_rx_tx_status_s cn50xx;
+};
+
+typedef union cvmx_gmxx_rx_tx_status cvmx_gmxx_rx_tx_status_t;
+
+/**
+ * cvmx_gmx#_rx_xaui_bad_col
+ */
+union cvmx_gmxx_rx_xaui_bad_col {
+	u64 u64;
+	struct cvmx_gmxx_rx_xaui_bad_col_s {
+		u64 reserved_40_63 : 24;
+		u64 val : 1;
+		u64 state : 3;
+		u64 lane_rxc : 4;
+		u64 lane_rxd : 32;
+	} s;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn52xx;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn52xxp1;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn56xx;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn56xxp1;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn61xx;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn63xx;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn63xxp1;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn66xx;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn68xx;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn68xxp1;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn70xx;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cn70xxp1;
+	struct cvmx_gmxx_rx_xaui_bad_col_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rx_xaui_bad_col cvmx_gmxx_rx_xaui_bad_col_t;
+
+/**
+ * cvmx_gmx#_rx_xaui_ctl
+ */
+union cvmx_gmxx_rx_xaui_ctl {
+	u64 u64;
+	struct cvmx_gmxx_rx_xaui_ctl_s {
+		u64 reserved_2_63 : 62;
+		u64 status : 2;
+	} s;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn52xx;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn52xxp1;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn56xx;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn56xxp1;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn61xx;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn63xx;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn63xxp1;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn66xx;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn68xx;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn68xxp1;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn70xx;
+	struct cvmx_gmxx_rx_xaui_ctl_s cn70xxp1;
+	struct cvmx_gmxx_rx_xaui_ctl_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_rx_xaui_ctl cvmx_gmxx_rx_xaui_ctl_t;
+
+/**
+ * cvmx_gmx#_rxaui_ctl
+ */
+union cvmx_gmxx_rxaui_ctl {
+	u64 u64;
+	struct cvmx_gmxx_rxaui_ctl_s {
+		u64 reserved_1_63 : 63;
+		u64 disparity : 1;
+	} s;
+	struct cvmx_gmxx_rxaui_ctl_s cn68xx;
+	struct cvmx_gmxx_rxaui_ctl_s cn68xxp1;
+	struct cvmx_gmxx_rxaui_ctl_s cn70xx;
+	struct cvmx_gmxx_rxaui_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_gmxx_rxaui_ctl cvmx_gmxx_rxaui_ctl_t;
+
+/**
+ * cvmx_gmx#_smac#
+ *
+ * GMX_SMAC = Packet SMAC
+ *
+ */
+union cvmx_gmxx_smacx {
+	u64 u64;
+	struct cvmx_gmxx_smacx_s {
+		u64 reserved_48_63 : 16;
+		u64 smac : 48;
+	} s;
+	struct cvmx_gmxx_smacx_s cn30xx;
+	struct cvmx_gmxx_smacx_s cn31xx;
+	struct cvmx_gmxx_smacx_s cn38xx;
+	struct cvmx_gmxx_smacx_s cn38xxp2;
+	struct cvmx_gmxx_smacx_s cn50xx;
+	struct cvmx_gmxx_smacx_s cn52xx;
+	struct cvmx_gmxx_smacx_s cn52xxp1;
+	struct cvmx_gmxx_smacx_s cn56xx;
+	struct cvmx_gmxx_smacx_s cn56xxp1;
+	struct cvmx_gmxx_smacx_s cn58xx;
+	struct cvmx_gmxx_smacx_s cn58xxp1;
+	struct cvmx_gmxx_smacx_s cn61xx;
+	struct cvmx_gmxx_smacx_s cn63xx;
+	struct cvmx_gmxx_smacx_s cn63xxp1;
+	struct cvmx_gmxx_smacx_s cn66xx;
+	struct cvmx_gmxx_smacx_s cn68xx;
+	struct cvmx_gmxx_smacx_s cn68xxp1;
+	struct cvmx_gmxx_smacx_s cn70xx;
+	struct cvmx_gmxx_smacx_s cn70xxp1;
+	struct cvmx_gmxx_smacx_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_smacx cvmx_gmxx_smacx_t;
+
+/**
+ * cvmx_gmx#_soft_bist
+ *
+ * GMX_SOFT_BIST = Software BIST Control
+ *
+ */
+union cvmx_gmxx_soft_bist {
+	u64 u64;
+	struct cvmx_gmxx_soft_bist_s {
+		u64 reserved_2_63 : 62;
+		u64 start_bist : 1;
+		u64 clear_bist : 1;
+	} s;
+	struct cvmx_gmxx_soft_bist_s cn63xx;
+	struct cvmx_gmxx_soft_bist_s cn63xxp1;
+	struct cvmx_gmxx_soft_bist_s cn66xx;
+	struct cvmx_gmxx_soft_bist_s cn68xx;
+	struct cvmx_gmxx_soft_bist_s cn68xxp1;
+};
+
+typedef union cvmx_gmxx_soft_bist cvmx_gmxx_soft_bist_t;
+
+/**
+ * cvmx_gmx#_stat_bp
+ *
+ * GMX_STAT_BP = Number of cycles that the TX/Stats block has help up operation
+ *
+ *
+ * Notes:
+ * It has no relationship with the TX FIFO per se.  The TX engine sends packets
+ * from PKO and upon completion, sends a command to the TX stats block for an
+ * update based on the packet size.  The stats operation can take a few cycles -
+ * normally not enough to be visible considering the 64B min packet size that is
+ * ethernet convention.
+ *
+ * In the rare case in which SW attempted to schedule really, really, small packets
+ * or the sclk (6xxx) is running ass-slow, then the stats updates may not happen in
+ * real time and can back up the TX engine.
+ *
+ * This counter is the number of cycles in which the TX engine was stalled.  In
+ * normal operation, it should always be zeros.
+ */
+union cvmx_gmxx_stat_bp {
+	u64 u64;
+	struct cvmx_gmxx_stat_bp_s {
+		u64 reserved_17_63 : 47;
+		u64 bp : 1;
+		u64 cnt : 16;
+	} s;
+	struct cvmx_gmxx_stat_bp_s cn30xx;
+	struct cvmx_gmxx_stat_bp_s cn31xx;
+	struct cvmx_gmxx_stat_bp_s cn38xx;
+	struct cvmx_gmxx_stat_bp_s cn38xxp2;
+	struct cvmx_gmxx_stat_bp_s cn50xx;
+	struct cvmx_gmxx_stat_bp_s cn52xx;
+	struct cvmx_gmxx_stat_bp_s cn52xxp1;
+	struct cvmx_gmxx_stat_bp_s cn56xx;
+	struct cvmx_gmxx_stat_bp_s cn56xxp1;
+	struct cvmx_gmxx_stat_bp_s cn58xx;
+	struct cvmx_gmxx_stat_bp_s cn58xxp1;
+	struct cvmx_gmxx_stat_bp_s cn61xx;
+	struct cvmx_gmxx_stat_bp_s cn63xx;
+	struct cvmx_gmxx_stat_bp_s cn63xxp1;
+	struct cvmx_gmxx_stat_bp_s cn66xx;
+	struct cvmx_gmxx_stat_bp_s cn68xx;
+	struct cvmx_gmxx_stat_bp_s cn68xxp1;
+	struct cvmx_gmxx_stat_bp_s cn70xx;
+	struct cvmx_gmxx_stat_bp_s cn70xxp1;
+	struct cvmx_gmxx_stat_bp_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_stat_bp cvmx_gmxx_stat_bp_t;
+
+/**
+ * cvmx_gmx#_tb_reg
+ *
+ * DON'T PUT IN HRM*
+ *
+ */
+union cvmx_gmxx_tb_reg {
+	u64 u64;
+	struct cvmx_gmxx_tb_reg_s {
+		u64 reserved_1_63 : 63;
+		u64 wr_magic : 1;
+	} s;
+	struct cvmx_gmxx_tb_reg_s cn61xx;
+	struct cvmx_gmxx_tb_reg_s cn66xx;
+	struct cvmx_gmxx_tb_reg_s cn68xx;
+	struct cvmx_gmxx_tb_reg_s cn70xx;
+	struct cvmx_gmxx_tb_reg_s cn70xxp1;
+	struct cvmx_gmxx_tb_reg_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tb_reg cvmx_gmxx_tb_reg_t;
+
+/**
+ * cvmx_gmx#_tx#_append
+ *
+ * GMX_TX_APPEND = Packet TX Append Control
+ *
+ */
+union cvmx_gmxx_txx_append {
+	u64 u64;
+	struct cvmx_gmxx_txx_append_s {
+		u64 reserved_4_63 : 60;
+		u64 force_fcs : 1;
+		u64 fcs : 1;
+		u64 pad : 1;
+		u64 preamble : 1;
+	} s;
+	struct cvmx_gmxx_txx_append_s cn30xx;
+	struct cvmx_gmxx_txx_append_s cn31xx;
+	struct cvmx_gmxx_txx_append_s cn38xx;
+	struct cvmx_gmxx_txx_append_s cn38xxp2;
+	struct cvmx_gmxx_txx_append_s cn50xx;
+	struct cvmx_gmxx_txx_append_s cn52xx;
+	struct cvmx_gmxx_txx_append_s cn52xxp1;
+	struct cvmx_gmxx_txx_append_s cn56xx;
+	struct cvmx_gmxx_txx_append_s cn56xxp1;
+	struct cvmx_gmxx_txx_append_s cn58xx;
+	struct cvmx_gmxx_txx_append_s cn58xxp1;
+	struct cvmx_gmxx_txx_append_s cn61xx;
+	struct cvmx_gmxx_txx_append_s cn63xx;
+	struct cvmx_gmxx_txx_append_s cn63xxp1;
+	struct cvmx_gmxx_txx_append_s cn66xx;
+	struct cvmx_gmxx_txx_append_s cn68xx;
+	struct cvmx_gmxx_txx_append_s cn68xxp1;
+	struct cvmx_gmxx_txx_append_s cn70xx;
+	struct cvmx_gmxx_txx_append_s cn70xxp1;
+	struct cvmx_gmxx_txx_append_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_append cvmx_gmxx_txx_append_t;
+
+/**
+ * cvmx_gmx#_tx#_bck_crdt
+ *
+ * gmi_tx_bck to gmi_tx_out credit count register
+ *
+ */
+union cvmx_gmxx_txx_bck_crdt {
+	u64 u64;
+	struct cvmx_gmxx_txx_bck_crdt_s {
+		u64 reserved_4_63 : 60;
+		u64 cnt : 4;
+	} s;
+	struct cvmx_gmxx_txx_bck_crdt_s cn70xx;
+	struct cvmx_gmxx_txx_bck_crdt_s cn70xxp1;
+};
+
+typedef union cvmx_gmxx_txx_bck_crdt cvmx_gmxx_txx_bck_crdt_t;
+
+/**
+ * cvmx_gmx#_tx#_burst
+ *
+ * GMX_TX_BURST = Packet TX Burst Counter
+ *
+ */
+union cvmx_gmxx_txx_burst {
+	u64 u64;
+	struct cvmx_gmxx_txx_burst_s {
+		u64 reserved_16_63 : 48;
+		u64 burst : 16;
+	} s;
+	struct cvmx_gmxx_txx_burst_s cn30xx;
+	struct cvmx_gmxx_txx_burst_s cn31xx;
+	struct cvmx_gmxx_txx_burst_s cn38xx;
+	struct cvmx_gmxx_txx_burst_s cn38xxp2;
+	struct cvmx_gmxx_txx_burst_s cn50xx;
+	struct cvmx_gmxx_txx_burst_s cn52xx;
+	struct cvmx_gmxx_txx_burst_s cn52xxp1;
+	struct cvmx_gmxx_txx_burst_s cn56xx;
+	struct cvmx_gmxx_txx_burst_s cn56xxp1;
+	struct cvmx_gmxx_txx_burst_s cn58xx;
+	struct cvmx_gmxx_txx_burst_s cn58xxp1;
+	struct cvmx_gmxx_txx_burst_s cn61xx;
+	struct cvmx_gmxx_txx_burst_s cn63xx;
+	struct cvmx_gmxx_txx_burst_s cn63xxp1;
+	struct cvmx_gmxx_txx_burst_s cn66xx;
+	struct cvmx_gmxx_txx_burst_s cn68xx;
+	struct cvmx_gmxx_txx_burst_s cn68xxp1;
+	struct cvmx_gmxx_txx_burst_s cn70xx;
+	struct cvmx_gmxx_txx_burst_s cn70xxp1;
+	struct cvmx_gmxx_txx_burst_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_burst cvmx_gmxx_txx_burst_t;
+
+/**
+ * cvmx_gmx#_tx#_cbfc_xoff
+ */
+union cvmx_gmxx_txx_cbfc_xoff {
+	u64 u64;
+	struct cvmx_gmxx_txx_cbfc_xoff_s {
+		u64 reserved_16_63 : 48;
+		u64 xoff : 16;
+	} s;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cn52xx;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cn56xx;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cn61xx;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cn63xx;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cn63xxp1;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cn66xx;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cn68xx;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cn68xxp1;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cn70xx;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cn70xxp1;
+	struct cvmx_gmxx_txx_cbfc_xoff_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_cbfc_xoff cvmx_gmxx_txx_cbfc_xoff_t;
+
+/**
+ * cvmx_gmx#_tx#_cbfc_xon
+ */
+union cvmx_gmxx_txx_cbfc_xon {
+	u64 u64;
+	struct cvmx_gmxx_txx_cbfc_xon_s {
+		u64 reserved_16_63 : 48;
+		u64 xon : 16;
+	} s;
+	struct cvmx_gmxx_txx_cbfc_xon_s cn52xx;
+	struct cvmx_gmxx_txx_cbfc_xon_s cn56xx;
+	struct cvmx_gmxx_txx_cbfc_xon_s cn61xx;
+	struct cvmx_gmxx_txx_cbfc_xon_s cn63xx;
+	struct cvmx_gmxx_txx_cbfc_xon_s cn63xxp1;
+	struct cvmx_gmxx_txx_cbfc_xon_s cn66xx;
+	struct cvmx_gmxx_txx_cbfc_xon_s cn68xx;
+	struct cvmx_gmxx_txx_cbfc_xon_s cn68xxp1;
+	struct cvmx_gmxx_txx_cbfc_xon_s cn70xx;
+	struct cvmx_gmxx_txx_cbfc_xon_s cn70xxp1;
+	struct cvmx_gmxx_txx_cbfc_xon_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_cbfc_xon cvmx_gmxx_txx_cbfc_xon_t;
+
+/**
+ * cvmx_gmx#_tx#_clk
+ *
+ * Per Port
+ *
+ *
+ * GMX_TX_CLK = RGMII TX Clock Generation Register
+ *
+ * Notes:
+ * Programming Restrictions:
+ *  (1) In RGMII mode, if GMX_PRT_CFG[SPEED]==0, then CLK_CNT must be > 1.
+ *  (2) In MII mode, CLK_CNT == 1
+ *  (3) In RGMII or GMII mode, if CLK_CNT==0, Octeon will not generate a tx clock.
+ *
+ * RGMII Example:
+ *  Given a 125MHz PLL reference clock...
+ *   CLK_CNT ==  1 ==> 125.0MHz TXC clock period (8ns* 1)
+ *   CLK_CNT ==  5 ==>  25.0MHz TXC clock period (8ns* 5)
+ *   CLK_CNT == 50 ==>   2.5MHz TXC clock period (8ns*50)
+ */
+union cvmx_gmxx_txx_clk {
+	u64 u64;
+	struct cvmx_gmxx_txx_clk_s {
+		u64 reserved_6_63 : 58;
+		u64 clk_cnt : 6;
+	} s;
+	struct cvmx_gmxx_txx_clk_s cn30xx;
+	struct cvmx_gmxx_txx_clk_s cn31xx;
+	struct cvmx_gmxx_txx_clk_s cn38xx;
+	struct cvmx_gmxx_txx_clk_s cn38xxp2;
+	struct cvmx_gmxx_txx_clk_s cn50xx;
+	struct cvmx_gmxx_txx_clk_s cn58xx;
+	struct cvmx_gmxx_txx_clk_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_txx_clk cvmx_gmxx_txx_clk_t;
+
+/**
+ * cvmx_gmx#_tx#_ctl
+ *
+ * GMX_TX_CTL = TX Control register
+ *
+ */
+union cvmx_gmxx_txx_ctl {
+	u64 u64;
+	struct cvmx_gmxx_txx_ctl_s {
+		u64 reserved_2_63 : 62;
+		u64 xsdef_en : 1;
+		u64 xscol_en : 1;
+	} s;
+	struct cvmx_gmxx_txx_ctl_s cn30xx;
+	struct cvmx_gmxx_txx_ctl_s cn31xx;
+	struct cvmx_gmxx_txx_ctl_s cn38xx;
+	struct cvmx_gmxx_txx_ctl_s cn38xxp2;
+	struct cvmx_gmxx_txx_ctl_s cn50xx;
+	struct cvmx_gmxx_txx_ctl_s cn52xx;
+	struct cvmx_gmxx_txx_ctl_s cn52xxp1;
+	struct cvmx_gmxx_txx_ctl_s cn56xx;
+	struct cvmx_gmxx_txx_ctl_s cn56xxp1;
+	struct cvmx_gmxx_txx_ctl_s cn58xx;
+	struct cvmx_gmxx_txx_ctl_s cn58xxp1;
+	struct cvmx_gmxx_txx_ctl_s cn61xx;
+	struct cvmx_gmxx_txx_ctl_s cn63xx;
+	struct cvmx_gmxx_txx_ctl_s cn63xxp1;
+	struct cvmx_gmxx_txx_ctl_s cn66xx;
+	struct cvmx_gmxx_txx_ctl_s cn68xx;
+	struct cvmx_gmxx_txx_ctl_s cn68xxp1;
+	struct cvmx_gmxx_txx_ctl_s cn70xx;
+	struct cvmx_gmxx_txx_ctl_s cn70xxp1;
+	struct cvmx_gmxx_txx_ctl_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_ctl cvmx_gmxx_txx_ctl_t;
+
+/**
+ * cvmx_gmx#_tx#_jam_mode
+ */
+union cvmx_gmxx_txx_jam_mode {
+	u64 u64;
+	struct cvmx_gmxx_txx_jam_mode_s {
+		u64 reserved_1_63 : 63;
+		u64 mode : 1;
+	} s;
+	struct cvmx_gmxx_txx_jam_mode_s cn70xx;
+	struct cvmx_gmxx_txx_jam_mode_s cn70xxp1;
+};
+
+typedef union cvmx_gmxx_txx_jam_mode cvmx_gmxx_txx_jam_mode_t;
+
+/**
+ * cvmx_gmx#_tx#_min_pkt
+ *
+ * GMX_TX_MIN_PKT = Packet TX Min Size Packet (PAD upto min size)
+ *
+ */
+union cvmx_gmxx_txx_min_pkt {
+	u64 u64;
+	struct cvmx_gmxx_txx_min_pkt_s {
+		u64 reserved_8_63 : 56;
+		u64 min_size : 8;
+	} s;
+	struct cvmx_gmxx_txx_min_pkt_s cn30xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn31xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn38xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn38xxp2;
+	struct cvmx_gmxx_txx_min_pkt_s cn50xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn52xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn52xxp1;
+	struct cvmx_gmxx_txx_min_pkt_s cn56xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn56xxp1;
+	struct cvmx_gmxx_txx_min_pkt_s cn58xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn58xxp1;
+	struct cvmx_gmxx_txx_min_pkt_s cn61xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn63xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn63xxp1;
+	struct cvmx_gmxx_txx_min_pkt_s cn66xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn68xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn68xxp1;
+	struct cvmx_gmxx_txx_min_pkt_s cn70xx;
+	struct cvmx_gmxx_txx_min_pkt_s cn70xxp1;
+	struct cvmx_gmxx_txx_min_pkt_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_min_pkt cvmx_gmxx_txx_min_pkt_t;
+
+/**
+ * cvmx_gmx#_tx#_pause_pkt_interval
+ *
+ * GMX_TX_PAUSE_PKT_INTERVAL = Packet TX Pause Packet transmission interval - how often PAUSE packets will be sent
+ *
+ *
+ * Notes:
+ * Choosing proper values of GMX_TX_PAUSE_PKT_TIME[TIME] and
+ * GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
+ * designer.  It is suggested that TIME be much greater than INTERVAL and
+ * GMX_TX_PAUSE_ZERO[SEND] be set.  This allows a periodic refresh of the PAUSE
+ * count and then when the backpressure condition is lifted, a PAUSE packet
+ * with TIME==0 will be sent indicating that Octane is ready for additional
+ * data.
+ *
+ * If the system chooses to not set GMX_TX_PAUSE_ZERO[SEND], then it is
+ * suggested that TIME and INTERVAL are programmed such that they satisify the
+ * following rule...
+ *
+ *    INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size)
+ *
+ * where largest_pkt_size is that largest packet that the system can send
+ * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
+ * of the PAUSE packet (normally 64B).
+ */
+union cvmx_gmxx_txx_pause_pkt_interval {
+	u64 u64;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s {
+		u64 reserved_16_63 : 48;
+		u64 interval : 16;
+	} s;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn30xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn31xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn38xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn38xxp2;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn50xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn52xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn52xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn56xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn56xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn58xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn58xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn61xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn63xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn63xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn66xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn68xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn68xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn70xx;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cn70xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_interval_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_pause_pkt_interval cvmx_gmxx_txx_pause_pkt_interval_t;
+
+/**
+ * cvmx_gmx#_tx#_pause_pkt_time
+ *
+ * GMX_TX_PAUSE_PKT_TIME = Packet TX Pause Packet pause_time field
+ *
+ *
+ * Notes:
+ * Choosing proper values of GMX_TX_PAUSE_PKT_TIME[TIME] and
+ * GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
+ * designer.  It is suggested that TIME be much greater than INTERVAL and
+ * GMX_TX_PAUSE_ZERO[SEND] be set.  This allows a periodic refresh of the PAUSE
+ * count and then when the backpressure condition is lifted, a PAUSE packet
+ * with TIME==0 will be sent indicating that Octane is ready for additional
+ * data.
+ *
+ * If the system chooses to not set GMX_TX_PAUSE_ZERO[SEND], then it is
+ * suggested that TIME and INTERVAL are programmed such that they satisify the
+ * following rule...
+ *
+ *    INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size)
+ *
+ * where largest_pkt_size is that largest packet that the system can send
+ * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
+ * of the PAUSE packet (normally 64B).
+ */
+union cvmx_gmxx_txx_pause_pkt_time {
+	u64 u64;
+	struct cvmx_gmxx_txx_pause_pkt_time_s {
+		u64 reserved_16_63 : 48;
+		u64 time : 16;
+	} s;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn30xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn31xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn38xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn38xxp2;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn50xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn52xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn52xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn56xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn56xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn58xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn58xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn61xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn63xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn63xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn66xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn68xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn68xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn70xx;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cn70xxp1;
+	struct cvmx_gmxx_txx_pause_pkt_time_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_pause_pkt_time cvmx_gmxx_txx_pause_pkt_time_t;
+
+/**
+ * cvmx_gmx#_tx#_pause_togo
+ *
+ * GMX_TX_PAUSE_TOGO = Packet TX Amount of time remaining to backpressure
+ *
+ */
+union cvmx_gmxx_txx_pause_togo {
+	u64 u64;
+	struct cvmx_gmxx_txx_pause_togo_s {
+		u64 reserved_32_63 : 32;
+		u64 msg_time : 16;
+		u64 time : 16;
+	} s;
+	struct cvmx_gmxx_txx_pause_togo_cn30xx {
+		u64 reserved_16_63 : 48;
+		u64 time : 16;
+	} cn30xx;
+	struct cvmx_gmxx_txx_pause_togo_cn30xx cn31xx;
+	struct cvmx_gmxx_txx_pause_togo_cn30xx cn38xx;
+	struct cvmx_gmxx_txx_pause_togo_cn30xx cn38xxp2;
+	struct cvmx_gmxx_txx_pause_togo_cn30xx cn50xx;
+	struct cvmx_gmxx_txx_pause_togo_s cn52xx;
+	struct cvmx_gmxx_txx_pause_togo_s cn52xxp1;
+	struct cvmx_gmxx_txx_pause_togo_s cn56xx;
+	struct cvmx_gmxx_txx_pause_togo_cn30xx cn56xxp1;
+	struct cvmx_gmxx_txx_pause_togo_cn30xx cn58xx;
+	struct cvmx_gmxx_txx_pause_togo_cn30xx cn58xxp1;
+	struct cvmx_gmxx_txx_pause_togo_s cn61xx;
+	struct cvmx_gmxx_txx_pause_togo_s cn63xx;
+	struct cvmx_gmxx_txx_pause_togo_s cn63xxp1;
+	struct cvmx_gmxx_txx_pause_togo_s cn66xx;
+	struct cvmx_gmxx_txx_pause_togo_s cn68xx;
+	struct cvmx_gmxx_txx_pause_togo_s cn68xxp1;
+	struct cvmx_gmxx_txx_pause_togo_s cn70xx;
+	struct cvmx_gmxx_txx_pause_togo_s cn70xxp1;
+	struct cvmx_gmxx_txx_pause_togo_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_pause_togo cvmx_gmxx_txx_pause_togo_t;
+
+/**
+ * cvmx_gmx#_tx#_pause_zero
+ *
+ * GMX_TX_PAUSE_ZERO = Packet TX Amount of time remaining to backpressure
+ *
+ */
+union cvmx_gmxx_txx_pause_zero {
+	u64 u64;
+	struct cvmx_gmxx_txx_pause_zero_s {
+		u64 reserved_1_63 : 63;
+		u64 send : 1;
+	} s;
+	struct cvmx_gmxx_txx_pause_zero_s cn30xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn31xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn38xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn38xxp2;
+	struct cvmx_gmxx_txx_pause_zero_s cn50xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn52xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn52xxp1;
+	struct cvmx_gmxx_txx_pause_zero_s cn56xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn56xxp1;
+	struct cvmx_gmxx_txx_pause_zero_s cn58xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn58xxp1;
+	struct cvmx_gmxx_txx_pause_zero_s cn61xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn63xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn63xxp1;
+	struct cvmx_gmxx_txx_pause_zero_s cn66xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn68xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn68xxp1;
+	struct cvmx_gmxx_txx_pause_zero_s cn70xx;
+	struct cvmx_gmxx_txx_pause_zero_s cn70xxp1;
+	struct cvmx_gmxx_txx_pause_zero_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_pause_zero cvmx_gmxx_txx_pause_zero_t;
+
+/**
+ * cvmx_gmx#_tx#_pipe
+ */
+union cvmx_gmxx_txx_pipe {
+	u64 u64;
+	struct cvmx_gmxx_txx_pipe_s {
+		u64 reserved_33_63 : 31;
+		u64 ign_bp : 1;
+		u64 reserved_21_31 : 11;
+		u64 nump : 5;
+		u64 reserved_7_15 : 9;
+		u64 base : 7;
+	} s;
+	struct cvmx_gmxx_txx_pipe_s cn68xx;
+	struct cvmx_gmxx_txx_pipe_s cn68xxp1;
+};
+
+typedef union cvmx_gmxx_txx_pipe cvmx_gmxx_txx_pipe_t;
+
+/**
+ * cvmx_gmx#_tx#_sgmii_ctl
+ */
+union cvmx_gmxx_txx_sgmii_ctl {
+	u64 u64;
+	struct cvmx_gmxx_txx_sgmii_ctl_s {
+		u64 reserved_1_63 : 63;
+		u64 align : 1;
+	} s;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn52xx;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn52xxp1;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn56xx;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn56xxp1;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn61xx;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn63xx;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn63xxp1;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn66xx;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn68xx;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn68xxp1;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn70xx;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cn70xxp1;
+	struct cvmx_gmxx_txx_sgmii_ctl_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_sgmii_ctl cvmx_gmxx_txx_sgmii_ctl_t;
+
+/**
+ * cvmx_gmx#_tx#_slot
+ *
+ * GMX_TX_SLOT = Packet TX Slottime Counter
+ *
+ */
+union cvmx_gmxx_txx_slot {
+	u64 u64;
+	struct cvmx_gmxx_txx_slot_s {
+		u64 reserved_10_63 : 54;
+		u64 slot : 10;
+	} s;
+	struct cvmx_gmxx_txx_slot_s cn30xx;
+	struct cvmx_gmxx_txx_slot_s cn31xx;
+	struct cvmx_gmxx_txx_slot_s cn38xx;
+	struct cvmx_gmxx_txx_slot_s cn38xxp2;
+	struct cvmx_gmxx_txx_slot_s cn50xx;
+	struct cvmx_gmxx_txx_slot_s cn52xx;
+	struct cvmx_gmxx_txx_slot_s cn52xxp1;
+	struct cvmx_gmxx_txx_slot_s cn56xx;
+	struct cvmx_gmxx_txx_slot_s cn56xxp1;
+	struct cvmx_gmxx_txx_slot_s cn58xx;
+	struct cvmx_gmxx_txx_slot_s cn58xxp1;
+	struct cvmx_gmxx_txx_slot_s cn61xx;
+	struct cvmx_gmxx_txx_slot_s cn63xx;
+	struct cvmx_gmxx_txx_slot_s cn63xxp1;
+	struct cvmx_gmxx_txx_slot_s cn66xx;
+	struct cvmx_gmxx_txx_slot_s cn68xx;
+	struct cvmx_gmxx_txx_slot_s cn68xxp1;
+	struct cvmx_gmxx_txx_slot_s cn70xx;
+	struct cvmx_gmxx_txx_slot_s cn70xxp1;
+	struct cvmx_gmxx_txx_slot_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_slot cvmx_gmxx_txx_slot_t;
+
+/**
+ * cvmx_gmx#_tx#_soft_pause
+ *
+ * GMX_TX_SOFT_PAUSE = Packet TX Software Pause
+ *
+ */
+union cvmx_gmxx_txx_soft_pause {
+	u64 u64;
+	struct cvmx_gmxx_txx_soft_pause_s {
+		u64 reserved_16_63 : 48;
+		u64 time : 16;
+	} s;
+	struct cvmx_gmxx_txx_soft_pause_s cn30xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn31xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn38xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn38xxp2;
+	struct cvmx_gmxx_txx_soft_pause_s cn50xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn52xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn52xxp1;
+	struct cvmx_gmxx_txx_soft_pause_s cn56xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn56xxp1;
+	struct cvmx_gmxx_txx_soft_pause_s cn58xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn58xxp1;
+	struct cvmx_gmxx_txx_soft_pause_s cn61xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn63xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn63xxp1;
+	struct cvmx_gmxx_txx_soft_pause_s cn66xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn68xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn68xxp1;
+	struct cvmx_gmxx_txx_soft_pause_s cn70xx;
+	struct cvmx_gmxx_txx_soft_pause_s cn70xxp1;
+	struct cvmx_gmxx_txx_soft_pause_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_soft_pause cvmx_gmxx_txx_soft_pause_t;
+
+/**
+ * cvmx_gmx#_tx#_stat0
+ *
+ * GMX_TX_STAT0 = GMX_TX_STATS_XSDEF / GMX_TX_STATS_XSCOL
+ *
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_txx_stat0 {
+	u64 u64;
+	struct cvmx_gmxx_txx_stat0_s {
+		u64 xsdef : 32;
+		u64 xscol : 32;
+	} s;
+	struct cvmx_gmxx_txx_stat0_s cn30xx;
+	struct cvmx_gmxx_txx_stat0_s cn31xx;
+	struct cvmx_gmxx_txx_stat0_s cn38xx;
+	struct cvmx_gmxx_txx_stat0_s cn38xxp2;
+	struct cvmx_gmxx_txx_stat0_s cn50xx;
+	struct cvmx_gmxx_txx_stat0_s cn52xx;
+	struct cvmx_gmxx_txx_stat0_s cn52xxp1;
+	struct cvmx_gmxx_txx_stat0_s cn56xx;
+	struct cvmx_gmxx_txx_stat0_s cn56xxp1;
+	struct cvmx_gmxx_txx_stat0_s cn58xx;
+	struct cvmx_gmxx_txx_stat0_s cn58xxp1;
+	struct cvmx_gmxx_txx_stat0_s cn61xx;
+	struct cvmx_gmxx_txx_stat0_s cn63xx;
+	struct cvmx_gmxx_txx_stat0_s cn63xxp1;
+	struct cvmx_gmxx_txx_stat0_s cn66xx;
+	struct cvmx_gmxx_txx_stat0_s cn68xx;
+	struct cvmx_gmxx_txx_stat0_s cn68xxp1;
+	struct cvmx_gmxx_txx_stat0_s cn70xx;
+	struct cvmx_gmxx_txx_stat0_s cn70xxp1;
+	struct cvmx_gmxx_txx_stat0_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stat0 cvmx_gmxx_txx_stat0_t;
+
+/**
+ * cvmx_gmx#_tx#_stat1
+ *
+ * GMX_TX_STAT1 = GMX_TX_STATS_SCOL  / GMX_TX_STATS_MCOL
+ *
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_txx_stat1 {
+	u64 u64;
+	struct cvmx_gmxx_txx_stat1_s {
+		u64 scol : 32;
+		u64 mcol : 32;
+	} s;
+	struct cvmx_gmxx_txx_stat1_s cn30xx;
+	struct cvmx_gmxx_txx_stat1_s cn31xx;
+	struct cvmx_gmxx_txx_stat1_s cn38xx;
+	struct cvmx_gmxx_txx_stat1_s cn38xxp2;
+	struct cvmx_gmxx_txx_stat1_s cn50xx;
+	struct cvmx_gmxx_txx_stat1_s cn52xx;
+	struct cvmx_gmxx_txx_stat1_s cn52xxp1;
+	struct cvmx_gmxx_txx_stat1_s cn56xx;
+	struct cvmx_gmxx_txx_stat1_s cn56xxp1;
+	struct cvmx_gmxx_txx_stat1_s cn58xx;
+	struct cvmx_gmxx_txx_stat1_s cn58xxp1;
+	struct cvmx_gmxx_txx_stat1_s cn61xx;
+	struct cvmx_gmxx_txx_stat1_s cn63xx;
+	struct cvmx_gmxx_txx_stat1_s cn63xxp1;
+	struct cvmx_gmxx_txx_stat1_s cn66xx;
+	struct cvmx_gmxx_txx_stat1_s cn68xx;
+	struct cvmx_gmxx_txx_stat1_s cn68xxp1;
+	struct cvmx_gmxx_txx_stat1_s cn70xx;
+	struct cvmx_gmxx_txx_stat1_s cn70xxp1;
+	struct cvmx_gmxx_txx_stat1_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stat1 cvmx_gmxx_txx_stat1_t;
+
+/**
+ * cvmx_gmx#_tx#_stat2
+ *
+ * GMX_TX_STAT2 = GMX_TX_STATS_OCTS
+ *
+ *
+ * Notes:
+ * - Octect counts are the sum of all data transmitted on the wire including
+ *   packet data, pad bytes, fcs bytes, pause bytes, and jam bytes.  The octect
+ *   counts do not include PREAMBLE byte or EXTEND cycles.
+ * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_txx_stat2 {
+	u64 u64;
+	struct cvmx_gmxx_txx_stat2_s {
+		u64 reserved_48_63 : 16;
+		u64 octs : 48;
+	} s;
+	struct cvmx_gmxx_txx_stat2_s cn30xx;
+	struct cvmx_gmxx_txx_stat2_s cn31xx;
+	struct cvmx_gmxx_txx_stat2_s cn38xx;
+	struct cvmx_gmxx_txx_stat2_s cn38xxp2;
+	struct cvmx_gmxx_txx_stat2_s cn50xx;
+	struct cvmx_gmxx_txx_stat2_s cn52xx;
+	struct cvmx_gmxx_txx_stat2_s cn52xxp1;
+	struct cvmx_gmxx_txx_stat2_s cn56xx;
+	struct cvmx_gmxx_txx_stat2_s cn56xxp1;
+	struct cvmx_gmxx_txx_stat2_s cn58xx;
+	struct cvmx_gmxx_txx_stat2_s cn58xxp1;
+	struct cvmx_gmxx_txx_stat2_s cn61xx;
+	struct cvmx_gmxx_txx_stat2_s cn63xx;
+	struct cvmx_gmxx_txx_stat2_s cn63xxp1;
+	struct cvmx_gmxx_txx_stat2_s cn66xx;
+	struct cvmx_gmxx_txx_stat2_s cn68xx;
+	struct cvmx_gmxx_txx_stat2_s cn68xxp1;
+	struct cvmx_gmxx_txx_stat2_s cn70xx;
+	struct cvmx_gmxx_txx_stat2_s cn70xxp1;
+	struct cvmx_gmxx_txx_stat2_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stat2 cvmx_gmxx_txx_stat2_t;
+
+/**
+ * cvmx_gmx#_tx#_stat3
+ *
+ * GMX_TX_STAT3 = GMX_TX_STATS_PKTS
+ *
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_txx_stat3 {
+	u64 u64;
+	struct cvmx_gmxx_txx_stat3_s {
+		u64 reserved_32_63 : 32;
+		u64 pkts : 32;
+	} s;
+	struct cvmx_gmxx_txx_stat3_s cn30xx;
+	struct cvmx_gmxx_txx_stat3_s cn31xx;
+	struct cvmx_gmxx_txx_stat3_s cn38xx;
+	struct cvmx_gmxx_txx_stat3_s cn38xxp2;
+	struct cvmx_gmxx_txx_stat3_s cn50xx;
+	struct cvmx_gmxx_txx_stat3_s cn52xx;
+	struct cvmx_gmxx_txx_stat3_s cn52xxp1;
+	struct cvmx_gmxx_txx_stat3_s cn56xx;
+	struct cvmx_gmxx_txx_stat3_s cn56xxp1;
+	struct cvmx_gmxx_txx_stat3_s cn58xx;
+	struct cvmx_gmxx_txx_stat3_s cn58xxp1;
+	struct cvmx_gmxx_txx_stat3_s cn61xx;
+	struct cvmx_gmxx_txx_stat3_s cn63xx;
+	struct cvmx_gmxx_txx_stat3_s cn63xxp1;
+	struct cvmx_gmxx_txx_stat3_s cn66xx;
+	struct cvmx_gmxx_txx_stat3_s cn68xx;
+	struct cvmx_gmxx_txx_stat3_s cn68xxp1;
+	struct cvmx_gmxx_txx_stat3_s cn70xx;
+	struct cvmx_gmxx_txx_stat3_s cn70xxp1;
+	struct cvmx_gmxx_txx_stat3_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stat3 cvmx_gmxx_txx_stat3_t;
+
+/**
+ * cvmx_gmx#_tx#_stat4
+ *
+ * GMX_TX_STAT4 = GMX_TX_STATS_HIST1 (64) / GMX_TX_STATS_HIST0 (<64)
+ *
+ *
+ * Notes:
+ * - Packet length is the sum of all data transmitted on the wire for the given
+ *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
+ *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
+ * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_txx_stat4 {
+	u64 u64;
+	struct cvmx_gmxx_txx_stat4_s {
+		u64 hist1 : 32;
+		u64 hist0 : 32;
+	} s;
+	struct cvmx_gmxx_txx_stat4_s cn30xx;
+	struct cvmx_gmxx_txx_stat4_s cn31xx;
+	struct cvmx_gmxx_txx_stat4_s cn38xx;
+	struct cvmx_gmxx_txx_stat4_s cn38xxp2;
+	struct cvmx_gmxx_txx_stat4_s cn50xx;
+	struct cvmx_gmxx_txx_stat4_s cn52xx;
+	struct cvmx_gmxx_txx_stat4_s cn52xxp1;
+	struct cvmx_gmxx_txx_stat4_s cn56xx;
+	struct cvmx_gmxx_txx_stat4_s cn56xxp1;
+	struct cvmx_gmxx_txx_stat4_s cn58xx;
+	struct cvmx_gmxx_txx_stat4_s cn58xxp1;
+	struct cvmx_gmxx_txx_stat4_s cn61xx;
+	struct cvmx_gmxx_txx_stat4_s cn63xx;
+	struct cvmx_gmxx_txx_stat4_s cn63xxp1;
+	struct cvmx_gmxx_txx_stat4_s cn66xx;
+	struct cvmx_gmxx_txx_stat4_s cn68xx;
+	struct cvmx_gmxx_txx_stat4_s cn68xxp1;
+	struct cvmx_gmxx_txx_stat4_s cn70xx;
+	struct cvmx_gmxx_txx_stat4_s cn70xxp1;
+	struct cvmx_gmxx_txx_stat4_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stat4 cvmx_gmxx_txx_stat4_t;
+
+/**
+ * cvmx_gmx#_tx#_stat5
+ *
+ * GMX_TX_STAT5 = GMX_TX_STATS_HIST3 (128- 255) / GMX_TX_STATS_HIST2 (65- 127)
+ *
+ *
+ * Notes:
+ * - Packet length is the sum of all data transmitted on the wire for the given
+ *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
+ *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
+ * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_txx_stat5 {
+	u64 u64;
+	struct cvmx_gmxx_txx_stat5_s {
+		u64 hist3 : 32;
+		u64 hist2 : 32;
+	} s;
+	struct cvmx_gmxx_txx_stat5_s cn30xx;
+	struct cvmx_gmxx_txx_stat5_s cn31xx;
+	struct cvmx_gmxx_txx_stat5_s cn38xx;
+	struct cvmx_gmxx_txx_stat5_s cn38xxp2;
+	struct cvmx_gmxx_txx_stat5_s cn50xx;
+	struct cvmx_gmxx_txx_stat5_s cn52xx;
+	struct cvmx_gmxx_txx_stat5_s cn52xxp1;
+	struct cvmx_gmxx_txx_stat5_s cn56xx;
+	struct cvmx_gmxx_txx_stat5_s cn56xxp1;
+	struct cvmx_gmxx_txx_stat5_s cn58xx;
+	struct cvmx_gmxx_txx_stat5_s cn58xxp1;
+	struct cvmx_gmxx_txx_stat5_s cn61xx;
+	struct cvmx_gmxx_txx_stat5_s cn63xx;
+	struct cvmx_gmxx_txx_stat5_s cn63xxp1;
+	struct cvmx_gmxx_txx_stat5_s cn66xx;
+	struct cvmx_gmxx_txx_stat5_s cn68xx;
+	struct cvmx_gmxx_txx_stat5_s cn68xxp1;
+	struct cvmx_gmxx_txx_stat5_s cn70xx;
+	struct cvmx_gmxx_txx_stat5_s cn70xxp1;
+	struct cvmx_gmxx_txx_stat5_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stat5 cvmx_gmxx_txx_stat5_t;
+
+/**
+ * cvmx_gmx#_tx#_stat6
+ *
+ * GMX_TX_STAT6 = GMX_TX_STATS_HIST5 (512-1023) / GMX_TX_STATS_HIST4 (256-511)
+ *
+ *
+ * Notes:
+ * - Packet length is the sum of all data transmitted on the wire for the given
+ *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
+ *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
+ * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_txx_stat6 {
+	u64 u64;
+	struct cvmx_gmxx_txx_stat6_s {
+		u64 hist5 : 32;
+		u64 hist4 : 32;
+	} s;
+	struct cvmx_gmxx_txx_stat6_s cn30xx;
+	struct cvmx_gmxx_txx_stat6_s cn31xx;
+	struct cvmx_gmxx_txx_stat6_s cn38xx;
+	struct cvmx_gmxx_txx_stat6_s cn38xxp2;
+	struct cvmx_gmxx_txx_stat6_s cn50xx;
+	struct cvmx_gmxx_txx_stat6_s cn52xx;
+	struct cvmx_gmxx_txx_stat6_s cn52xxp1;
+	struct cvmx_gmxx_txx_stat6_s cn56xx;
+	struct cvmx_gmxx_txx_stat6_s cn56xxp1;
+	struct cvmx_gmxx_txx_stat6_s cn58xx;
+	struct cvmx_gmxx_txx_stat6_s cn58xxp1;
+	struct cvmx_gmxx_txx_stat6_s cn61xx;
+	struct cvmx_gmxx_txx_stat6_s cn63xx;
+	struct cvmx_gmxx_txx_stat6_s cn63xxp1;
+	struct cvmx_gmxx_txx_stat6_s cn66xx;
+	struct cvmx_gmxx_txx_stat6_s cn68xx;
+	struct cvmx_gmxx_txx_stat6_s cn68xxp1;
+	struct cvmx_gmxx_txx_stat6_s cn70xx;
+	struct cvmx_gmxx_txx_stat6_s cn70xxp1;
+	struct cvmx_gmxx_txx_stat6_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stat6 cvmx_gmxx_txx_stat6_t;
+
+/**
+ * cvmx_gmx#_tx#_stat7
+ *
+ * GMX_TX_STAT7 = GMX_TX_STATS_HIST7 (1024-1518) / GMX_TX_STATS_HIST6 (>1518)
+ *
+ *
+ * Notes:
+ * - Packet length is the sum of all data transmitted on the wire for the given
+ *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
+ *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
+ * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_txx_stat7 {
+	u64 u64;
+	struct cvmx_gmxx_txx_stat7_s {
+		u64 hist7 : 32;
+		u64 hist6 : 32;
+	} s;
+	struct cvmx_gmxx_txx_stat7_s cn30xx;
+	struct cvmx_gmxx_txx_stat7_s cn31xx;
+	struct cvmx_gmxx_txx_stat7_s cn38xx;
+	struct cvmx_gmxx_txx_stat7_s cn38xxp2;
+	struct cvmx_gmxx_txx_stat7_s cn50xx;
+	struct cvmx_gmxx_txx_stat7_s cn52xx;
+	struct cvmx_gmxx_txx_stat7_s cn52xxp1;
+	struct cvmx_gmxx_txx_stat7_s cn56xx;
+	struct cvmx_gmxx_txx_stat7_s cn56xxp1;
+	struct cvmx_gmxx_txx_stat7_s cn58xx;
+	struct cvmx_gmxx_txx_stat7_s cn58xxp1;
+	struct cvmx_gmxx_txx_stat7_s cn61xx;
+	struct cvmx_gmxx_txx_stat7_s cn63xx;
+	struct cvmx_gmxx_txx_stat7_s cn63xxp1;
+	struct cvmx_gmxx_txx_stat7_s cn66xx;
+	struct cvmx_gmxx_txx_stat7_s cn68xx;
+	struct cvmx_gmxx_txx_stat7_s cn68xxp1;
+	struct cvmx_gmxx_txx_stat7_s cn70xx;
+	struct cvmx_gmxx_txx_stat7_s cn70xxp1;
+	struct cvmx_gmxx_txx_stat7_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stat7 cvmx_gmxx_txx_stat7_t;
+
+/**
+ * cvmx_gmx#_tx#_stat8
+ *
+ * GMX_TX_STAT8 = GMX_TX_STATS_MCST  / GMX_TX_STATS_BCST
+ *
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ * - Note, GMX determines if the packet is MCST or BCST from the DMAC of the
+ *   packet.  GMX assumes that the DMAC lies in the first 6 bytes of the packet
+ *   as per the 802.3 frame definition.  If the system requires additional data
+ *   before the L2 header, then the MCST and BCST counters may not reflect
+ *   reality and should be ignored by software.
+ */
+union cvmx_gmxx_txx_stat8 {
+	u64 u64;
+	struct cvmx_gmxx_txx_stat8_s {
+		u64 mcst : 32;
+		u64 bcst : 32;
+	} s;
+	struct cvmx_gmxx_txx_stat8_s cn30xx;
+	struct cvmx_gmxx_txx_stat8_s cn31xx;
+	struct cvmx_gmxx_txx_stat8_s cn38xx;
+	struct cvmx_gmxx_txx_stat8_s cn38xxp2;
+	struct cvmx_gmxx_txx_stat8_s cn50xx;
+	struct cvmx_gmxx_txx_stat8_s cn52xx;
+	struct cvmx_gmxx_txx_stat8_s cn52xxp1;
+	struct cvmx_gmxx_txx_stat8_s cn56xx;
+	struct cvmx_gmxx_txx_stat8_s cn56xxp1;
+	struct cvmx_gmxx_txx_stat8_s cn58xx;
+	struct cvmx_gmxx_txx_stat8_s cn58xxp1;
+	struct cvmx_gmxx_txx_stat8_s cn61xx;
+	struct cvmx_gmxx_txx_stat8_s cn63xx;
+	struct cvmx_gmxx_txx_stat8_s cn63xxp1;
+	struct cvmx_gmxx_txx_stat8_s cn66xx;
+	struct cvmx_gmxx_txx_stat8_s cn68xx;
+	struct cvmx_gmxx_txx_stat8_s cn68xxp1;
+	struct cvmx_gmxx_txx_stat8_s cn70xx;
+	struct cvmx_gmxx_txx_stat8_s cn70xxp1;
+	struct cvmx_gmxx_txx_stat8_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stat8 cvmx_gmxx_txx_stat8_t;
+
+/**
+ * cvmx_gmx#_tx#_stat9
+ *
+ * GMX_TX_STAT9 = GMX_TX_STATS_UNDFLW / GMX_TX_STATS_CTL
+ *
+ *
+ * Notes:
+ * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
+ * - Counters will wrap
+ */
+union cvmx_gmxx_txx_stat9 {
+	u64 u64;
+	struct cvmx_gmxx_txx_stat9_s {
+		u64 undflw : 32;
+		u64 ctl : 32;
+	} s;
+	struct cvmx_gmxx_txx_stat9_s cn30xx;
+	struct cvmx_gmxx_txx_stat9_s cn31xx;
+	struct cvmx_gmxx_txx_stat9_s cn38xx;
+	struct cvmx_gmxx_txx_stat9_s cn38xxp2;
+	struct cvmx_gmxx_txx_stat9_s cn50xx;
+	struct cvmx_gmxx_txx_stat9_s cn52xx;
+	struct cvmx_gmxx_txx_stat9_s cn52xxp1;
+	struct cvmx_gmxx_txx_stat9_s cn56xx;
+	struct cvmx_gmxx_txx_stat9_s cn56xxp1;
+	struct cvmx_gmxx_txx_stat9_s cn58xx;
+	struct cvmx_gmxx_txx_stat9_s cn58xxp1;
+	struct cvmx_gmxx_txx_stat9_s cn61xx;
+	struct cvmx_gmxx_txx_stat9_s cn63xx;
+	struct cvmx_gmxx_txx_stat9_s cn63xxp1;
+	struct cvmx_gmxx_txx_stat9_s cn66xx;
+	struct cvmx_gmxx_txx_stat9_s cn68xx;
+	struct cvmx_gmxx_txx_stat9_s cn68xxp1;
+	struct cvmx_gmxx_txx_stat9_s cn70xx;
+	struct cvmx_gmxx_txx_stat9_s cn70xxp1;
+	struct cvmx_gmxx_txx_stat9_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stat9 cvmx_gmxx_txx_stat9_t;
+
+/**
+ * cvmx_gmx#_tx#_stats_ctl
+ *
+ * GMX_TX_STATS_CTL = TX Stats Control register
+ *
+ */
+union cvmx_gmxx_txx_stats_ctl {
+	u64 u64;
+	struct cvmx_gmxx_txx_stats_ctl_s {
+		u64 reserved_1_63 : 63;
+		u64 rd_clr : 1;
+	} s;
+	struct cvmx_gmxx_txx_stats_ctl_s cn30xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn31xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn38xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn38xxp2;
+	struct cvmx_gmxx_txx_stats_ctl_s cn50xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn52xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn52xxp1;
+	struct cvmx_gmxx_txx_stats_ctl_s cn56xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn56xxp1;
+	struct cvmx_gmxx_txx_stats_ctl_s cn58xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn58xxp1;
+	struct cvmx_gmxx_txx_stats_ctl_s cn61xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn63xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn63xxp1;
+	struct cvmx_gmxx_txx_stats_ctl_s cn66xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn68xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn68xxp1;
+	struct cvmx_gmxx_txx_stats_ctl_s cn70xx;
+	struct cvmx_gmxx_txx_stats_ctl_s cn70xxp1;
+	struct cvmx_gmxx_txx_stats_ctl_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_stats_ctl cvmx_gmxx_txx_stats_ctl_t;
+
+/**
+ * cvmx_gmx#_tx#_thresh
+ *
+ * Per Port
+ * GMX_TX_THRESH = Packet TX Threshold
+ */
+union cvmx_gmxx_txx_thresh {
+	u64 u64;
+	struct cvmx_gmxx_txx_thresh_s {
+		u64 reserved_10_63 : 54;
+		u64 cnt : 10;
+	} s;
+	struct cvmx_gmxx_txx_thresh_cn30xx {
+		u64 reserved_7_63 : 57;
+		u64 cnt : 7;
+	} cn30xx;
+	struct cvmx_gmxx_txx_thresh_cn30xx cn31xx;
+	struct cvmx_gmxx_txx_thresh_cn38xx {
+		u64 reserved_9_63 : 55;
+		u64 cnt : 9;
+	} cn38xx;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn38xxp2;
+	struct cvmx_gmxx_txx_thresh_cn30xx cn50xx;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn52xx;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn52xxp1;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn56xx;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn56xxp1;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn58xx;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn58xxp1;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn61xx;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn63xx;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn63xxp1;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn66xx;
+	struct cvmx_gmxx_txx_thresh_s cn68xx;
+	struct cvmx_gmxx_txx_thresh_s cn68xxp1;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn70xx;
+	struct cvmx_gmxx_txx_thresh_cn38xx cn70xxp1;
+	struct cvmx_gmxx_txx_thresh_cn38xx cnf71xx;
+};
+
+typedef union cvmx_gmxx_txx_thresh cvmx_gmxx_txx_thresh_t;
+
+/**
+ * cvmx_gmx#_tx_bp
+ *
+ * GMX_TX_BP = Packet Interface TX BackPressure Register
+ *
+ *
+ * Notes:
+ * In XAUI mode, only the lsb (corresponding to port0) of BP is used.
+ *
+ */
+union cvmx_gmxx_tx_bp {
+	u64 u64;
+	struct cvmx_gmxx_tx_bp_s {
+		u64 reserved_4_63 : 60;
+		u64 bp : 4;
+	} s;
+	struct cvmx_gmxx_tx_bp_cn30xx {
+		u64 reserved_3_63 : 61;
+		u64 bp : 3;
+	} cn30xx;
+	struct cvmx_gmxx_tx_bp_cn30xx cn31xx;
+	struct cvmx_gmxx_tx_bp_s cn38xx;
+	struct cvmx_gmxx_tx_bp_s cn38xxp2;
+	struct cvmx_gmxx_tx_bp_cn30xx cn50xx;
+	struct cvmx_gmxx_tx_bp_s cn52xx;
+	struct cvmx_gmxx_tx_bp_s cn52xxp1;
+	struct cvmx_gmxx_tx_bp_s cn56xx;
+	struct cvmx_gmxx_tx_bp_s cn56xxp1;
+	struct cvmx_gmxx_tx_bp_s cn58xx;
+	struct cvmx_gmxx_tx_bp_s cn58xxp1;
+	struct cvmx_gmxx_tx_bp_s cn61xx;
+	struct cvmx_gmxx_tx_bp_s cn63xx;
+	struct cvmx_gmxx_tx_bp_s cn63xxp1;
+	struct cvmx_gmxx_tx_bp_s cn66xx;
+	struct cvmx_gmxx_tx_bp_s cn68xx;
+	struct cvmx_gmxx_tx_bp_s cn68xxp1;
+	struct cvmx_gmxx_tx_bp_s cn70xx;
+	struct cvmx_gmxx_tx_bp_s cn70xxp1;
+	struct cvmx_gmxx_tx_bp_cnf71xx {
+		u64 reserved_2_63 : 62;
+		u64 bp : 2;
+	} cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_bp cvmx_gmxx_tx_bp_t;
+
+/**
+ * cvmx_gmx#_tx_clk_msk#
+ *
+ * GMX_TX_CLK_MSK = GMX Clock Select
+ *
+ */
+union cvmx_gmxx_tx_clk_mskx {
+	u64 u64;
+	struct cvmx_gmxx_tx_clk_mskx_s {
+		u64 reserved_1_63 : 63;
+		u64 msk : 1;
+	} s;
+	struct cvmx_gmxx_tx_clk_mskx_s cn30xx;
+	struct cvmx_gmxx_tx_clk_mskx_s cn50xx;
+};
+
+typedef union cvmx_gmxx_tx_clk_mskx cvmx_gmxx_tx_clk_mskx_t;
+
+/**
+ * cvmx_gmx#_tx_col_attempt
+ *
+ * GMX_TX_COL_ATTEMPT = Packet TX collision attempts before dropping frame
+ *
+ */
+union cvmx_gmxx_tx_col_attempt {
+	u64 u64;
+	struct cvmx_gmxx_tx_col_attempt_s {
+		u64 reserved_5_63 : 59;
+		u64 limit : 5;
+	} s;
+	struct cvmx_gmxx_tx_col_attempt_s cn30xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn31xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn38xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn38xxp2;
+	struct cvmx_gmxx_tx_col_attempt_s cn50xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn52xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn52xxp1;
+	struct cvmx_gmxx_tx_col_attempt_s cn56xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn56xxp1;
+	struct cvmx_gmxx_tx_col_attempt_s cn58xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn58xxp1;
+	struct cvmx_gmxx_tx_col_attempt_s cn61xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn63xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn63xxp1;
+	struct cvmx_gmxx_tx_col_attempt_s cn66xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn68xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn68xxp1;
+	struct cvmx_gmxx_tx_col_attempt_s cn70xx;
+	struct cvmx_gmxx_tx_col_attempt_s cn70xxp1;
+	struct cvmx_gmxx_tx_col_attempt_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_col_attempt cvmx_gmxx_tx_col_attempt_t;
+
+/**
+ * cvmx_gmx#_tx_corrupt
+ *
+ * GMX_TX_CORRUPT = TX - Corrupt TX packets with the ERR bit set
+ *
+ *
+ * Notes:
+ * Packets sent from PKO with the ERR wire asserted will be corrupted by
+ * the transmitter if CORRUPT[prt] is set (XAUI uses prt==0).
+ *
+ * Corruption means that GMX will send a bad FCS value.  If GMX_TX_APPEND[FCS]
+ * is clear then no FCS is sent and the GMX cannot corrupt it.  The corrupt FCS
+ * value is 0xeeeeeeee for SGMII/1000Base-X and 4 bytes of the error
+ * propagation code in XAUI mode.
+ */
+union cvmx_gmxx_tx_corrupt {
+	u64 u64;
+	struct cvmx_gmxx_tx_corrupt_s {
+		u64 reserved_4_63 : 60;
+		u64 corrupt : 4;
+	} s;
+	struct cvmx_gmxx_tx_corrupt_cn30xx {
+		u64 reserved_3_63 : 61;
+		u64 corrupt : 3;
+	} cn30xx;
+	struct cvmx_gmxx_tx_corrupt_cn30xx cn31xx;
+	struct cvmx_gmxx_tx_corrupt_s cn38xx;
+	struct cvmx_gmxx_tx_corrupt_s cn38xxp2;
+	struct cvmx_gmxx_tx_corrupt_cn30xx cn50xx;
+	struct cvmx_gmxx_tx_corrupt_s cn52xx;
+	struct cvmx_gmxx_tx_corrupt_s cn52xxp1;
+	struct cvmx_gmxx_tx_corrupt_s cn56xx;
+	struct cvmx_gmxx_tx_corrupt_s cn56xxp1;
+	struct cvmx_gmxx_tx_corrupt_s cn58xx;
+	struct cvmx_gmxx_tx_corrupt_s cn58xxp1;
+	struct cvmx_gmxx_tx_corrupt_s cn61xx;
+	struct cvmx_gmxx_tx_corrupt_s cn63xx;
+	struct cvmx_gmxx_tx_corrupt_s cn63xxp1;
+	struct cvmx_gmxx_tx_corrupt_s cn66xx;
+	struct cvmx_gmxx_tx_corrupt_s cn68xx;
+	struct cvmx_gmxx_tx_corrupt_s cn68xxp1;
+	struct cvmx_gmxx_tx_corrupt_s cn70xx;
+	struct cvmx_gmxx_tx_corrupt_s cn70xxp1;
+	struct cvmx_gmxx_tx_corrupt_cnf71xx {
+		u64 reserved_2_63 : 62;
+		u64 corrupt : 2;
+	} cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_corrupt cvmx_gmxx_tx_corrupt_t;
+
+/**
+ * cvmx_gmx#_tx_hg2_reg1
+ *
+ * Notes:
+ * The TX_XOF[15:0] field in GMX(0)_TX_HG2_REG1 and the TX_XON[15:0] field in
+ * GMX(0)_TX_HG2_REG2 register map to the same 16 physical flops. When written with address of
+ * GMX(0)_TX_HG2_REG1, it will exhibit write 1 to set behavior and when written with address of
+ * GMX(0)_TX_HG2_REG2, it will exhibit write 1 to clear behavior.
+ * For reads, either address will return the $GMX(0)_TX_HG2_REG1 values.
+ */
+union cvmx_gmxx_tx_hg2_reg1 {
+	u64 u64;
+	struct cvmx_gmxx_tx_hg2_reg1_s {
+		u64 reserved_16_63 : 48;
+		u64 tx_xof : 16;
+	} s;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn52xx;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn52xxp1;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn56xx;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn61xx;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn63xx;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn63xxp1;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn66xx;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn68xx;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn68xxp1;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn70xx;
+	struct cvmx_gmxx_tx_hg2_reg1_s cn70xxp1;
+	struct cvmx_gmxx_tx_hg2_reg1_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_hg2_reg1 cvmx_gmxx_tx_hg2_reg1_t;
+
+/**
+ * cvmx_gmx#_tx_hg2_reg2
+ *
+ * Notes:
+ * The TX_XOF[15:0] field in GMX(0)_TX_HG2_REG1 and the TX_XON[15:0] field in
+ * GMX(0)_TX_HG2_REG2 register map to the same 16 physical flops. When written with address  of
+ * GMX(0)_TX_HG2_REG1, it will exhibit write 1 to set behavior and when written with address of
+ * GMX(0)_TX_HG2_REG2, it will exhibit write 1 to clear behavior.
+ * For reads, either address will return the $GMX(0)_TX_HG2_REG1 values.
+ */
+union cvmx_gmxx_tx_hg2_reg2 {
+	u64 u64;
+	struct cvmx_gmxx_tx_hg2_reg2_s {
+		u64 reserved_16_63 : 48;
+		u64 tx_xon : 16;
+	} s;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn52xx;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn52xxp1;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn56xx;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn61xx;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn63xx;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn63xxp1;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn66xx;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn68xx;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn68xxp1;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn70xx;
+	struct cvmx_gmxx_tx_hg2_reg2_s cn70xxp1;
+	struct cvmx_gmxx_tx_hg2_reg2_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_hg2_reg2 cvmx_gmxx_tx_hg2_reg2_t;
+
+/**
+ * cvmx_gmx#_tx_ifg
+ *
+ * GMX_TX_IFG = Packet TX Interframe Gap
+ *
+ *
+ * Notes:
+ * * Programming IFG1 and IFG2.
+ *
+ * For 10/100/1000Mbs half-duplex systems that require IEEE 802.3
+ * compatibility, IFG1 must be in the range of 1-8, IFG2 must be in the range
+ * of 4-12, and the IFG1+IFG2 sum must be 12.
+ *
+ * For 10/100/1000Mbs full-duplex systems that require IEEE 802.3
+ * compatibility, IFG1 must be in the range of 1-11, IFG2 must be in the range
+ * of 1-11, and the IFG1+IFG2 sum must be 12.
+ *
+ * For XAUI/10Gbs systems that require IEEE 802.3 compatibility, the
+ * IFG1+IFG2 sum must be 12.  IFG1[1:0] and IFG2[1:0] must be zero.
+ *
+ * For all other systems, IFG1 and IFG2 can be any value in the range of
+ * 1-15.  Allowing for a total possible IFG sum of 2-30.
+ */
+union cvmx_gmxx_tx_ifg {
+	u64 u64;
+	struct cvmx_gmxx_tx_ifg_s {
+		u64 reserved_8_63 : 56;
+		u64 ifg2 : 4;
+		u64 ifg1 : 4;
+	} s;
+	struct cvmx_gmxx_tx_ifg_s cn30xx;
+	struct cvmx_gmxx_tx_ifg_s cn31xx;
+	struct cvmx_gmxx_tx_ifg_s cn38xx;
+	struct cvmx_gmxx_tx_ifg_s cn38xxp2;
+	struct cvmx_gmxx_tx_ifg_s cn50xx;
+	struct cvmx_gmxx_tx_ifg_s cn52xx;
+	struct cvmx_gmxx_tx_ifg_s cn52xxp1;
+	struct cvmx_gmxx_tx_ifg_s cn56xx;
+	struct cvmx_gmxx_tx_ifg_s cn56xxp1;
+	struct cvmx_gmxx_tx_ifg_s cn58xx;
+	struct cvmx_gmxx_tx_ifg_s cn58xxp1;
+	struct cvmx_gmxx_tx_ifg_s cn61xx;
+	struct cvmx_gmxx_tx_ifg_s cn63xx;
+	struct cvmx_gmxx_tx_ifg_s cn63xxp1;
+	struct cvmx_gmxx_tx_ifg_s cn66xx;
+	struct cvmx_gmxx_tx_ifg_s cn68xx;
+	struct cvmx_gmxx_tx_ifg_s cn68xxp1;
+	struct cvmx_gmxx_tx_ifg_s cn70xx;
+	struct cvmx_gmxx_tx_ifg_s cn70xxp1;
+	struct cvmx_gmxx_tx_ifg_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_ifg cvmx_gmxx_tx_ifg_t;
+
+/**
+ * cvmx_gmx#_tx_int_en
+ *
+ * GMX_TX_INT_EN = Interrupt Enable
+ *
+ *
+ * Notes:
+ * In XAUI mode, only the lsb (corresponding to port0) of UNDFLW is used.
+ *
+ */
+union cvmx_gmxx_tx_int_en {
+	u64 u64;
+	struct cvmx_gmxx_tx_int_en_s {
+		u64 reserved_25_63 : 39;
+		u64 xchange : 1;
+		u64 ptp_lost : 4;
+		u64 late_col : 4;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} s;
+	struct cvmx_gmxx_tx_int_en_cn30xx {
+		u64 reserved_19_63 : 45;
+		u64 late_col : 3;
+		u64 reserved_15_15 : 1;
+		u64 xsdef : 3;
+		u64 reserved_11_11 : 1;
+		u64 xscol : 3;
+		u64 reserved_5_7 : 3;
+		u64 undflw : 3;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn30xx;
+	struct cvmx_gmxx_tx_int_en_cn31xx {
+		u64 reserved_15_63 : 49;
+		u64 xsdef : 3;
+		u64 reserved_11_11 : 1;
+		u64 xscol : 3;
+		u64 reserved_5_7 : 3;
+		u64 undflw : 3;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn31xx;
+	struct cvmx_gmxx_tx_int_en_cn38xx {
+		u64 reserved_20_63 : 44;
+		u64 late_col : 4;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 ncb_nxa : 1;
+		u64 pko_nxa : 1;
+	} cn38xx;
+	struct cvmx_gmxx_tx_int_en_cn38xxp2 {
+		u64 reserved_16_63 : 48;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 ncb_nxa : 1;
+		u64 pko_nxa : 1;
+	} cn38xxp2;
+	struct cvmx_gmxx_tx_int_en_cn30xx cn50xx;
+	struct cvmx_gmxx_tx_int_en_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 late_col : 4;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn52xx;
+	struct cvmx_gmxx_tx_int_en_cn52xx cn52xxp1;
+	struct cvmx_gmxx_tx_int_en_cn52xx cn56xx;
+	struct cvmx_gmxx_tx_int_en_cn52xx cn56xxp1;
+	struct cvmx_gmxx_tx_int_en_cn38xx cn58xx;
+	struct cvmx_gmxx_tx_int_en_cn38xx cn58xxp1;
+	struct cvmx_gmxx_tx_int_en_s cn61xx;
+	struct cvmx_gmxx_tx_int_en_cn63xx {
+		u64 reserved_24_63 : 40;
+		u64 ptp_lost : 4;
+		u64 late_col : 4;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn63xx;
+	struct cvmx_gmxx_tx_int_en_cn63xx cn63xxp1;
+	struct cvmx_gmxx_tx_int_en_s cn66xx;
+	struct cvmx_gmxx_tx_int_en_cn68xx {
+		u64 reserved_25_63 : 39;
+		u64 xchange : 1;
+		u64 ptp_lost : 4;
+		u64 late_col : 4;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 pko_nxp : 1;
+		u64 pko_nxa : 1;
+	} cn68xx;
+	struct cvmx_gmxx_tx_int_en_cn68xx cn68xxp1;
+	struct cvmx_gmxx_tx_int_en_s cn70xx;
+	struct cvmx_gmxx_tx_int_en_s cn70xxp1;
+	struct cvmx_gmxx_tx_int_en_cnf71xx {
+		u64 reserved_25_63 : 39;
+		u64 xchange : 1;
+		u64 reserved_22_23 : 2;
+		u64 ptp_lost : 2;
+		u64 reserved_18_19 : 2;
+		u64 late_col : 2;
+		u64 reserved_14_15 : 2;
+		u64 xsdef : 2;
+		u64 reserved_10_11 : 2;
+		u64 xscol : 2;
+		u64 reserved_4_7 : 4;
+		u64 undflw : 2;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_int_en cvmx_gmxx_tx_int_en_t;
+
+/**
+ * cvmx_gmx#_tx_int_reg
+ *
+ * GMX_TX_INT_REG = Interrupt Register
+ *
+ *
+ * Notes:
+ * In XAUI mode, only the lsb (corresponding to port0) of UNDFLW is used.
+ *
+ */
+union cvmx_gmxx_tx_int_reg {
+	u64 u64;
+	struct cvmx_gmxx_tx_int_reg_s {
+		u64 reserved_25_63 : 39;
+		u64 xchange : 1;
+		u64 ptp_lost : 4;
+		u64 late_col : 4;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} s;
+	struct cvmx_gmxx_tx_int_reg_cn30xx {
+		u64 reserved_19_63 : 45;
+		u64 late_col : 3;
+		u64 reserved_15_15 : 1;
+		u64 xsdef : 3;
+		u64 reserved_11_11 : 1;
+		u64 xscol : 3;
+		u64 reserved_5_7 : 3;
+		u64 undflw : 3;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn30xx;
+	struct cvmx_gmxx_tx_int_reg_cn31xx {
+		u64 reserved_15_63 : 49;
+		u64 xsdef : 3;
+		u64 reserved_11_11 : 1;
+		u64 xscol : 3;
+		u64 reserved_5_7 : 3;
+		u64 undflw : 3;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn31xx;
+	struct cvmx_gmxx_tx_int_reg_cn38xx {
+		u64 reserved_20_63 : 44;
+		u64 late_col : 4;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 ncb_nxa : 1;
+		u64 pko_nxa : 1;
+	} cn38xx;
+	struct cvmx_gmxx_tx_int_reg_cn38xxp2 {
+		u64 reserved_16_63 : 48;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 ncb_nxa : 1;
+		u64 pko_nxa : 1;
+	} cn38xxp2;
+	struct cvmx_gmxx_tx_int_reg_cn30xx cn50xx;
+	struct cvmx_gmxx_tx_int_reg_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 late_col : 4;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn52xx;
+	struct cvmx_gmxx_tx_int_reg_cn52xx cn52xxp1;
+	struct cvmx_gmxx_tx_int_reg_cn52xx cn56xx;
+	struct cvmx_gmxx_tx_int_reg_cn52xx cn56xxp1;
+	struct cvmx_gmxx_tx_int_reg_cn38xx cn58xx;
+	struct cvmx_gmxx_tx_int_reg_cn38xx cn58xxp1;
+	struct cvmx_gmxx_tx_int_reg_s cn61xx;
+	struct cvmx_gmxx_tx_int_reg_cn63xx {
+		u64 reserved_24_63 : 40;
+		u64 ptp_lost : 4;
+		u64 late_col : 4;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cn63xx;
+	struct cvmx_gmxx_tx_int_reg_cn63xx cn63xxp1;
+	struct cvmx_gmxx_tx_int_reg_s cn66xx;
+	struct cvmx_gmxx_tx_int_reg_cn68xx {
+		u64 reserved_25_63 : 39;
+		u64 xchange : 1;
+		u64 ptp_lost : 4;
+		u64 late_col : 4;
+		u64 xsdef : 4;
+		u64 xscol : 4;
+		u64 reserved_6_7 : 2;
+		u64 undflw : 4;
+		u64 pko_nxp : 1;
+		u64 pko_nxa : 1;
+	} cn68xx;
+	struct cvmx_gmxx_tx_int_reg_cn68xx cn68xxp1;
+	struct cvmx_gmxx_tx_int_reg_s cn70xx;
+	struct cvmx_gmxx_tx_int_reg_s cn70xxp1;
+	struct cvmx_gmxx_tx_int_reg_cnf71xx {
+		u64 reserved_25_63 : 39;
+		u64 xchange : 1;
+		u64 reserved_22_23 : 2;
+		u64 ptp_lost : 2;
+		u64 reserved_18_19 : 2;
+		u64 late_col : 2;
+		u64 reserved_14_15 : 2;
+		u64 xsdef : 2;
+		u64 reserved_10_11 : 2;
+		u64 xscol : 2;
+		u64 reserved_4_7 : 4;
+		u64 undflw : 2;
+		u64 reserved_1_1 : 1;
+		u64 pko_nxa : 1;
+	} cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_int_reg cvmx_gmxx_tx_int_reg_t;
+
+/**
+ * cvmx_gmx#_tx_jam
+ *
+ * GMX_TX_JAM = Packet TX Jam Pattern
+ *
+ */
+union cvmx_gmxx_tx_jam {
+	u64 u64;
+	struct cvmx_gmxx_tx_jam_s {
+		u64 reserved_8_63 : 56;
+		u64 jam : 8;
+	} s;
+	struct cvmx_gmxx_tx_jam_s cn30xx;
+	struct cvmx_gmxx_tx_jam_s cn31xx;
+	struct cvmx_gmxx_tx_jam_s cn38xx;
+	struct cvmx_gmxx_tx_jam_s cn38xxp2;
+	struct cvmx_gmxx_tx_jam_s cn50xx;
+	struct cvmx_gmxx_tx_jam_s cn52xx;
+	struct cvmx_gmxx_tx_jam_s cn52xxp1;
+	struct cvmx_gmxx_tx_jam_s cn56xx;
+	struct cvmx_gmxx_tx_jam_s cn56xxp1;
+	struct cvmx_gmxx_tx_jam_s cn58xx;
+	struct cvmx_gmxx_tx_jam_s cn58xxp1;
+	struct cvmx_gmxx_tx_jam_s cn61xx;
+	struct cvmx_gmxx_tx_jam_s cn63xx;
+	struct cvmx_gmxx_tx_jam_s cn63xxp1;
+	struct cvmx_gmxx_tx_jam_s cn66xx;
+	struct cvmx_gmxx_tx_jam_s cn68xx;
+	struct cvmx_gmxx_tx_jam_s cn68xxp1;
+	struct cvmx_gmxx_tx_jam_s cn70xx;
+	struct cvmx_gmxx_tx_jam_s cn70xxp1;
+	struct cvmx_gmxx_tx_jam_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_jam cvmx_gmxx_tx_jam_t;
+
+/**
+ * cvmx_gmx#_tx_lfsr
+ *
+ * GMX_TX_LFSR = LFSR used to implement truncated binary exponential backoff
+ *
+ */
+union cvmx_gmxx_tx_lfsr {
+	u64 u64;
+	struct cvmx_gmxx_tx_lfsr_s {
+		u64 reserved_16_63 : 48;
+		u64 lfsr : 16;
+	} s;
+	struct cvmx_gmxx_tx_lfsr_s cn30xx;
+	struct cvmx_gmxx_tx_lfsr_s cn31xx;
+	struct cvmx_gmxx_tx_lfsr_s cn38xx;
+	struct cvmx_gmxx_tx_lfsr_s cn38xxp2;
+	struct cvmx_gmxx_tx_lfsr_s cn50xx;
+	struct cvmx_gmxx_tx_lfsr_s cn52xx;
+	struct cvmx_gmxx_tx_lfsr_s cn52xxp1;
+	struct cvmx_gmxx_tx_lfsr_s cn56xx;
+	struct cvmx_gmxx_tx_lfsr_s cn56xxp1;
+	struct cvmx_gmxx_tx_lfsr_s cn58xx;
+	struct cvmx_gmxx_tx_lfsr_s cn58xxp1;
+	struct cvmx_gmxx_tx_lfsr_s cn61xx;
+	struct cvmx_gmxx_tx_lfsr_s cn63xx;
+	struct cvmx_gmxx_tx_lfsr_s cn63xxp1;
+	struct cvmx_gmxx_tx_lfsr_s cn66xx;
+	struct cvmx_gmxx_tx_lfsr_s cn68xx;
+	struct cvmx_gmxx_tx_lfsr_s cn68xxp1;
+	struct cvmx_gmxx_tx_lfsr_s cn70xx;
+	struct cvmx_gmxx_tx_lfsr_s cn70xxp1;
+	struct cvmx_gmxx_tx_lfsr_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_lfsr cvmx_gmxx_tx_lfsr_t;
+
+/**
+ * cvmx_gmx#_tx_ovr_bp
+ *
+ * GMX_TX_OVR_BP = Packet Interface TX Override BackPressure
+ *
+ *
+ * Notes:
+ * In XAUI mode, only the lsb (corresponding to port0) of EN, BP, and IGN_FULL are used.
+ *
+ * GMX*_TX_OVR_BP[EN<0>] must be set to one and GMX*_TX_OVR_BP[BP<0>] must be cleared to zero
+ * (to forcibly disable HW-automatic 802.3 pause packet generation) with the HiGig2 Protocol
+ * when GMX*_HG2_CONTROL[HG2TX_EN]=0. (The HiGig2 protocol is indicated by
+ * GMX*_TX_XAUI_CTL[HG_EN]=1 and GMX*_RX0_UDD_SKP[LEN]=16.) HW can only auto-generate backpressure
+ * through HiGig2 messages (optionally, when GMX*_HG2_CONTROL[HG2TX_EN]=1) with the HiGig2
+ * protocol.
+ */
+union cvmx_gmxx_tx_ovr_bp {
+	u64 u64;
+	struct cvmx_gmxx_tx_ovr_bp_s {
+		u64 reserved_48_63 : 16;
+		u64 tx_prt_bp : 16;
+		u64 reserved_12_31 : 20;
+		u64 en : 4;
+		u64 bp : 4;
+		u64 ign_full : 4;
+	} s;
+	struct cvmx_gmxx_tx_ovr_bp_cn30xx {
+		u64 reserved_11_63 : 53;
+		u64 en : 3;
+		u64 reserved_7_7 : 1;
+		u64 bp : 3;
+		u64 reserved_3_3 : 1;
+		u64 ign_full : 3;
+	} cn30xx;
+	struct cvmx_gmxx_tx_ovr_bp_cn30xx cn31xx;
+	struct cvmx_gmxx_tx_ovr_bp_cn38xx {
+		u64 reserved_12_63 : 52;
+		u64 en : 4;
+		u64 bp : 4;
+		u64 ign_full : 4;
+	} cn38xx;
+	struct cvmx_gmxx_tx_ovr_bp_cn38xx cn38xxp2;
+	struct cvmx_gmxx_tx_ovr_bp_cn30xx cn50xx;
+	struct cvmx_gmxx_tx_ovr_bp_s cn52xx;
+	struct cvmx_gmxx_tx_ovr_bp_s cn52xxp1;
+	struct cvmx_gmxx_tx_ovr_bp_s cn56xx;
+	struct cvmx_gmxx_tx_ovr_bp_s cn56xxp1;
+	struct cvmx_gmxx_tx_ovr_bp_cn38xx cn58xx;
+	struct cvmx_gmxx_tx_ovr_bp_cn38xx cn58xxp1;
+	struct cvmx_gmxx_tx_ovr_bp_s cn61xx;
+	struct cvmx_gmxx_tx_ovr_bp_s cn63xx;
+	struct cvmx_gmxx_tx_ovr_bp_s cn63xxp1;
+	struct cvmx_gmxx_tx_ovr_bp_s cn66xx;
+	struct cvmx_gmxx_tx_ovr_bp_s cn68xx;
+	struct cvmx_gmxx_tx_ovr_bp_s cn68xxp1;
+	struct cvmx_gmxx_tx_ovr_bp_s cn70xx;
+	struct cvmx_gmxx_tx_ovr_bp_s cn70xxp1;
+	struct cvmx_gmxx_tx_ovr_bp_cnf71xx {
+		u64 reserved_48_63 : 16;
+		u64 tx_prt_bp : 16;
+		u64 reserved_10_31 : 22;
+		u64 en : 2;
+		u64 reserved_6_7 : 2;
+		u64 bp : 2;
+		u64 reserved_2_3 : 2;
+		u64 ign_full : 2;
+	} cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_ovr_bp cvmx_gmxx_tx_ovr_bp_t;
+
+/**
+ * cvmx_gmx#_tx_pause_pkt_dmac
+ *
+ * GMX_TX_PAUSE_PKT_DMAC = Packet TX Pause Packet DMAC field
+ *
+ */
+union cvmx_gmxx_tx_pause_pkt_dmac {
+	u64 u64;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s {
+		u64 reserved_48_63 : 16;
+		u64 dmac : 48;
+	} s;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn30xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn31xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn38xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn38xxp2;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn50xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn52xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn52xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn56xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn56xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn58xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn58xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn61xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn63xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn63xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn66xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn68xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn68xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn70xx;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cn70xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_dmac_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_pause_pkt_dmac cvmx_gmxx_tx_pause_pkt_dmac_t;
+
+/**
+ * cvmx_gmx#_tx_pause_pkt_type
+ *
+ * GMX_TX_PAUSE_PKT_TYPE = Packet Interface TX Pause Packet TYPE field
+ *
+ */
+union cvmx_gmxx_tx_pause_pkt_type {
+	u64 u64;
+	struct cvmx_gmxx_tx_pause_pkt_type_s {
+		u64 reserved_16_63 : 48;
+		u64 type : 16;
+	} s;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn30xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn31xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn38xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn38xxp2;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn50xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn52xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn52xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn56xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn56xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn58xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn58xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn61xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn63xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn63xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn66xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn68xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn68xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn70xx;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cn70xxp1;
+	struct cvmx_gmxx_tx_pause_pkt_type_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_pause_pkt_type cvmx_gmxx_tx_pause_pkt_type_t;
+
+/**
+ * cvmx_gmx#_tx_prts
+ *
+ * Common
+ * GMX_TX_PRTS = TX Ports
+ */
+union cvmx_gmxx_tx_prts {
+	u64 u64;
+	struct cvmx_gmxx_tx_prts_s {
+		u64 reserved_5_63 : 59;
+		u64 prts : 5;
+	} s;
+	struct cvmx_gmxx_tx_prts_s cn30xx;
+	struct cvmx_gmxx_tx_prts_s cn31xx;
+	struct cvmx_gmxx_tx_prts_s cn38xx;
+	struct cvmx_gmxx_tx_prts_s cn38xxp2;
+	struct cvmx_gmxx_tx_prts_s cn50xx;
+	struct cvmx_gmxx_tx_prts_s cn52xx;
+	struct cvmx_gmxx_tx_prts_s cn52xxp1;
+	struct cvmx_gmxx_tx_prts_s cn56xx;
+	struct cvmx_gmxx_tx_prts_s cn56xxp1;
+	struct cvmx_gmxx_tx_prts_s cn58xx;
+	struct cvmx_gmxx_tx_prts_s cn58xxp1;
+	struct cvmx_gmxx_tx_prts_s cn61xx;
+	struct cvmx_gmxx_tx_prts_s cn63xx;
+	struct cvmx_gmxx_tx_prts_s cn63xxp1;
+	struct cvmx_gmxx_tx_prts_s cn66xx;
+	struct cvmx_gmxx_tx_prts_s cn68xx;
+	struct cvmx_gmxx_tx_prts_s cn68xxp1;
+	struct cvmx_gmxx_tx_prts_s cn70xx;
+	struct cvmx_gmxx_tx_prts_s cn70xxp1;
+	struct cvmx_gmxx_tx_prts_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_prts cvmx_gmxx_tx_prts_t;
+
+/**
+ * cvmx_gmx#_tx_spi_ctl
+ *
+ * GMX_TX_SPI_CTL = Spi4 TX ModesSpi4
+ *
+ */
+union cvmx_gmxx_tx_spi_ctl {
+	u64 u64;
+	struct cvmx_gmxx_tx_spi_ctl_s {
+		u64 reserved_2_63 : 62;
+		u64 tpa_clr : 1;
+		u64 cont_pkt : 1;
+	} s;
+	struct cvmx_gmxx_tx_spi_ctl_s cn38xx;
+	struct cvmx_gmxx_tx_spi_ctl_s cn38xxp2;
+	struct cvmx_gmxx_tx_spi_ctl_s cn58xx;
+	struct cvmx_gmxx_tx_spi_ctl_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_tx_spi_ctl cvmx_gmxx_tx_spi_ctl_t;
+
+/**
+ * cvmx_gmx#_tx_spi_drain
+ *
+ * GMX_TX_SPI_DRAIN = Drain out Spi TX FIFO
+ *
+ */
+union cvmx_gmxx_tx_spi_drain {
+	u64 u64;
+	struct cvmx_gmxx_tx_spi_drain_s {
+		u64 reserved_16_63 : 48;
+		u64 drain : 16;
+	} s;
+	struct cvmx_gmxx_tx_spi_drain_s cn38xx;
+	struct cvmx_gmxx_tx_spi_drain_s cn58xx;
+	struct cvmx_gmxx_tx_spi_drain_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_tx_spi_drain cvmx_gmxx_tx_spi_drain_t;
+
+/**
+ * cvmx_gmx#_tx_spi_max
+ *
+ * GMX_TX_SPI_MAX = RGMII TX Spi4 MAX
+ *
+ */
+union cvmx_gmxx_tx_spi_max {
+	u64 u64;
+	struct cvmx_gmxx_tx_spi_max_s {
+		u64 reserved_23_63 : 41;
+		u64 slice : 7;
+		u64 max2 : 8;
+		u64 max1 : 8;
+	} s;
+	struct cvmx_gmxx_tx_spi_max_cn38xx {
+		u64 reserved_16_63 : 48;
+		u64 max2 : 8;
+		u64 max1 : 8;
+	} cn38xx;
+	struct cvmx_gmxx_tx_spi_max_cn38xx cn38xxp2;
+	struct cvmx_gmxx_tx_spi_max_s cn58xx;
+	struct cvmx_gmxx_tx_spi_max_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_tx_spi_max cvmx_gmxx_tx_spi_max_t;
+
+/**
+ * cvmx_gmx#_tx_spi_round#
+ *
+ * GMX_TX_SPI_ROUND = Controls SPI4 TX Arbitration
+ *
+ */
+union cvmx_gmxx_tx_spi_roundx {
+	u64 u64;
+	struct cvmx_gmxx_tx_spi_roundx_s {
+		u64 reserved_16_63 : 48;
+		u64 round : 16;
+	} s;
+	struct cvmx_gmxx_tx_spi_roundx_s cn58xx;
+	struct cvmx_gmxx_tx_spi_roundx_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_tx_spi_roundx cvmx_gmxx_tx_spi_roundx_t;
+
+/**
+ * cvmx_gmx#_tx_spi_thresh
+ *
+ * GMX_TX_SPI_THRESH = RGMII TX Spi4 Transmit Threshold
+ *
+ *
+ * Notes:
+ * Note: zero will map to 0x20
+ *
+ * This will normally creates Spi4 traffic bursts at least THRESH in length.
+ * If dclk > eclk, then this rule may not always hold and Octeon may split
+ * transfers into smaller bursts - some of which could be as short as 16B.
+ * Octeon will never violate the Spi4.2 spec and send a non-EOP burst that is
+ * not a multiple of 16B.
+ */
+union cvmx_gmxx_tx_spi_thresh {
+	u64 u64;
+	struct cvmx_gmxx_tx_spi_thresh_s {
+		u64 reserved_6_63 : 58;
+		u64 thresh : 6;
+	} s;
+	struct cvmx_gmxx_tx_spi_thresh_s cn38xx;
+	struct cvmx_gmxx_tx_spi_thresh_s cn38xxp2;
+	struct cvmx_gmxx_tx_spi_thresh_s cn58xx;
+	struct cvmx_gmxx_tx_spi_thresh_s cn58xxp1;
+};
+
+typedef union cvmx_gmxx_tx_spi_thresh cvmx_gmxx_tx_spi_thresh_t;
+
+/**
+ * cvmx_gmx#_tx_xaui_ctl
+ */
+union cvmx_gmxx_tx_xaui_ctl {
+	u64 u64;
+	struct cvmx_gmxx_tx_xaui_ctl_s {
+		u64 reserved_11_63 : 53;
+		u64 hg_pause_hgi : 2;
+		u64 hg_en : 1;
+		u64 reserved_7_7 : 1;
+		u64 ls_byp : 1;
+		u64 ls : 2;
+		u64 reserved_2_3 : 2;
+		u64 uni_en : 1;
+		u64 dic_en : 1;
+	} s;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn52xx;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn52xxp1;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn56xx;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn56xxp1;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn61xx;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn63xx;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn63xxp1;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn66xx;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn68xx;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn68xxp1;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn70xx;
+	struct cvmx_gmxx_tx_xaui_ctl_s cn70xxp1;
+	struct cvmx_gmxx_tx_xaui_ctl_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_tx_xaui_ctl cvmx_gmxx_tx_xaui_ctl_t;
+
+/**
+ * cvmx_gmx#_wol_ctl
+ */
+union cvmx_gmxx_wol_ctl {
+	u64 u64;
+	struct cvmx_gmxx_wol_ctl_s {
+		u64 reserved_36_63 : 28;
+		u64 magic_en : 4;
+		u64 reserved_20_31 : 12;
+		u64 direct_en : 4;
+		u64 reserved_1_15 : 15;
+		u64 en : 1;
+	} s;
+	struct cvmx_gmxx_wol_ctl_s cn70xx;
+	struct cvmx_gmxx_wol_ctl_s cn70xxp1;
+};
+
+typedef union cvmx_gmxx_wol_ctl cvmx_gmxx_wol_ctl_t;
+
+/**
+ * cvmx_gmx#_xaui_ext_loopback
+ */
+union cvmx_gmxx_xaui_ext_loopback {
+	u64 u64;
+	struct cvmx_gmxx_xaui_ext_loopback_s {
+		u64 reserved_5_63 : 59;
+		u64 en : 1;
+		u64 thresh : 4;
+	} s;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn52xx;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn52xxp1;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn56xx;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn56xxp1;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn61xx;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn63xx;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn63xxp1;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn66xx;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn68xx;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn68xxp1;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn70xx;
+	struct cvmx_gmxx_xaui_ext_loopback_s cn70xxp1;
+	struct cvmx_gmxx_xaui_ext_loopback_s cnf71xx;
+};
+
+typedef union cvmx_gmxx_xaui_ext_loopback cvmx_gmxx_xaui_ext_loopback_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-gserx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-gserx-defs.h
new file mode 100644
index 0000000..832a592
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-gserx-defs.h
@@ -0,0 +1,2191 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_GSERX_DEFS_H__
+#define __CVMX_GSERX_DEFS_H__
+
+#define CVMX_GSERX_DLMX_TX_AMPLITUDE(offset, block_id) (0x0001180090003008ull)
+#define CVMX_GSERX_DLMX_TX_PREEMPH(offset, block_id)   (0x0001180090003028ull)
+#define CVMX_GSERX_DLMX_MPLL_EN(offset, block_id)      (0x0001180090001020ull)
+#define CVMX_GSERX_DLMX_REF_SSP_EN(offset, block_id)   (0x0001180090001048ull)
+#define CVMX_GSERX_DLMX_TX_RATE(offset, block_id)      (0x0001180090003030ull)
+#define CVMX_GSERX_DLMX_TX_EN(offset, block_id)	       (0x0001180090003020ull)
+#define CVMX_GSERX_DLMX_TX_CM_EN(offset, block_id)     (0x0001180090003010ull)
+#define CVMX_GSERX_DLMX_TX_RESET(offset, block_id)     (0x0001180090003038ull)
+#define CVMX_GSERX_DLMX_TX_DATA_EN(offset, block_id)   (0x0001180090003018ull)
+#define CVMX_GSERX_DLMX_RX_RATE(offset, block_id)      (0x0001180090002028ull)
+#define CVMX_GSERX_DLMX_RX_PLL_EN(offset, block_id)    (0x0001180090002020ull)
+#define CVMX_GSERX_DLMX_RX_DATA_EN(offset, block_id)   (0x0001180090002008ull)
+#define CVMX_GSERX_DLMX_RX_RESET(offset, block_id)     (0x0001180090002030ull)
+
+#define CVMX_GSERX_DLMX_TX_STATUS(offset, block_id)                                                \
+	(0x0001180090003000ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+#define CVMX_GSERX_DLMX_RX_STATUS(offset, block_id)                                                \
+	(0x0001180090002000ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+
+static inline u64 CVMX_GSERX_SATA_STATUS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0001180090100200ull + (offset) * 0x1000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0001180090100900ull + (offset) * 0x1000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001180090100900ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180090100900ull + (offset) * 0x1000000ull;
+}
+
+#define CVMX_GSERX_DLMX_RX_EQ(offset, block_id)                                                    \
+	(0x0001180090002010ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+#define CVMX_GSERX_DLMX_REF_USE_PAD(offset, block_id)                                              \
+	(0x0001180090001050ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+#define CVMX_GSERX_DLMX_REFCLK_SEL(offset, block_id)                                               \
+	(0x0001180090000008ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+#define CVMX_GSERX_DLMX_PHY_RESET(offset, block_id)                                                \
+	(0x0001180090001038ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+#define CVMX_GSERX_DLMX_TEST_POWERDOWN(offset, block_id)                                           \
+	(0x0001180090001060ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+#define CVMX_GSERX_DLMX_REF_CLKDIV2(offset, block_id)                                              \
+	(0x0001180090001040ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+#define CVMX_GSERX_DLMX_MPLL_MULTIPLIER(offset, block_id)                                          \
+	(0x0001180090001030ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+#define CVMX_GSERX_DLMX_MPLL_STATUS(offset, block_id)                                              \
+	(0x0001180090001000ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+
+#define CVMX_GSERX_BR_RXX_CTL(offset, block_id)                                                    \
+	(0x0001180090000400ull + (((offset) & 3) + ((block_id) & 15) * 0x20000ull) * 128)
+#define CVMX_GSERX_BR_RXX_EER(offset, block_id)                                                    \
+	(0x0001180090000418ull + (((offset) & 3) + ((block_id) & 15) * 0x20000ull) * 128)
+
+#define CVMX_GSERX_PCIE_PIPE_PORT_SEL(offset) (0x0001180090080460ull)
+#define CVMX_GSERX_PCIE_PIPE_RST(offset)      (0x0001180090080448ull)
+
+#define CVMX_GSERX_SATA_CFG(offset)	   (0x0001180090100208ull)
+#define CVMX_GSERX_SATA_REF_SSP_EN(offset) (0x0001180090100600ull)
+
+static inline u64 CVMX_GSERX_SATA_LANE_RST(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0001180090100210ull + (offset) * 0x1000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0001180090000908ull + (offset) * 0x1000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001180090000908ull + (offset) * 0x1000000ull;
+	}
+	return 0x0001180090000908ull + (offset) * 0x1000000ull;
+}
+
+#define CVMX_GSERX_EQ_WAIT_TIME(offset) (0x00011800904E0000ull + ((offset) & 15) * 0x1000000ull)
+
+#define CVMX_GSERX_GLBL_MISC_CONFIG_1(offset) (0x0001180090460030ull + ((offset) & 15) * 0x1000000ull)
+#define CVMX_GSERX_GLBL_PLL_CFG_3(offset)     (0x0001180090460018ull + ((offset) & 15) * 0x1000000ull)
+
+#define CVMX_GSERX_PHYX_OVRD_IN_LO(offset, block_id)                                               \
+	(0x0001180090400088ull + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 524288)
+
+#define CVMX_GSERX_RX_PWR_CTRL_P1(offset) (0x00011800904600B0ull + ((offset) & 15) * 0x1000000ull)
+#define CVMX_GSERX_RX_PWR_CTRL_P2(offset) (0x00011800904600B8ull + ((offset) & 15) * 0x1000000ull)
+#define CVMX_GSERX_RX_EIE_DETSTS(offset)  (0x0001180090000150ull + ((offset) & 15) * 0x1000000ull)
+
+#define CVMX_GSERX_LANE_MODE(offset) (0x0001180090000118ull + ((offset) & 15) * 0x1000000ull)
+
+#define CVMX_GSERX_LANE_VMA_FINE_CTRL_0(offset)                                                    \
+	(0x00011800904E01C8ull + ((offset) & 15) * 0x1000000ull)
+
+#define CVMX_GSERX_LANEX_LBERT_CFG(offset, block_id)                                               \
+	(0x00011800904C0020ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+
+#define CVMX_GSERX_LANEX_MISC_CFG_0(offset, block_id)                                              \
+	(0x00011800904C0000ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+
+#define CVMX_GSERX_LANE_PX_MODE_0(offset, block_id)                                                \
+	(0x00011800904E0040ull + (((offset) & 15) + ((block_id) & 15) * 0x80000ull) * 32)
+#define CVMX_GSERX_LANE_PX_MODE_1(offset, block_id)                                                \
+	(0x00011800904E0048ull + (((offset) & 15) + ((block_id) & 15) * 0x80000ull) * 32)
+
+#define CVMX_GSERX_LANEX_RX_CFG_0(offset, block_id)                                                \
+	(0x0001180090440000ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_RX_CFG_1(offset, block_id)                                                \
+	(0x0001180090440008ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_RX_CFG_2(offset, block_id)                                                \
+	(0x0001180090440010ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_RX_CFG_3(offset, block_id)                                                \
+	(0x0001180090440018ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_RX_CFG_4(offset, block_id)                                                \
+	(0x0001180090440020ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_RX_CFG_5(offset, block_id)                                                \
+	(0x0001180090440028ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_RX_CTLE_CTRL(offset, block_id)                                            \
+	(0x0001180090440058ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+
+#define CVMX_GSERX_LANEX_RX_LOOP_CTRL(offset, block_id)                                            \
+	(0x0001180090440048ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_RX_VALBBD_CTRL_0(offset, block_id)                                        \
+	(0x0001180090440240ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_RX_VALBBD_CTRL_1(offset, block_id)                                        \
+	(0x0001180090440248ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_RX_VALBBD_CTRL_2(offset, block_id)                                        \
+	(0x0001180090440250ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_RX_MISC_OVRRD(offset, block_id)                                           \
+	(0x0001180090440258ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+
+#define CVMX_GSERX_LANEX_TX_CFG_0(offset, block_id)                                                \
+	(0x00011800904400A8ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_TX_CFG_1(offset, block_id)                                                \
+	(0x00011800904400B0ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_TX_CFG_2(offset, block_id)                                                \
+	(0x00011800904400B8ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_TX_CFG_3(offset, block_id)                                                \
+	(0x00011800904400C0ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_TX_PRE_EMPHASIS(offset, block_id)                                         \
+	(0x00011800904400C8ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+
+#define CVMX_GSERX_RX_TXDIR_CTRL_0(offset) (0x00011800904600E8ull + ((offset) & 15) * 0x1000000ull)
+#define CVMX_GSERX_RX_TXDIR_CTRL_1(offset) (0x00011800904600F0ull + ((offset) & 15) * 0x1000000ull)
+#define CVMX_GSERX_RX_TXDIR_CTRL_2(offset) (0x00011800904600F8ull + ((offset) & 15) * 0x1000000ull)
+
+#define CVMX_GSERX_LANEX_PCS_CTLIFC_0(offset, block_id)                                            \
+	(0x00011800904C0060ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_PCS_CTLIFC_1(offset, block_id)                                            \
+	(0x00011800904C0068ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+#define CVMX_GSERX_LANEX_PCS_CTLIFC_2(offset, block_id)                                            \
+	(0x00011800904C0070ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+
+#define CVMX_GSERX_LANEX_PWR_CTRL(offset, block_id)                                                \
+	(0x00011800904400D8ull + (((offset) & 3) + ((block_id) & 15) * 0x10ull) * 1048576)
+
+#define CVMX_GSERX_LANE_VMA_FINE_CTRL_2(offset)                                                    \
+	(0x00011800904E01D8ull + ((offset) & 15) * 0x1000000ull)
+
+#define CVMX_GSERX_PLL_STAT(offset) (0x0001180090000010ull + ((offset) & 15) * 0x1000000ull)
+#define CVMX_GSERX_QLM_STAT(offset) (0x00011800900000A0ull + ((offset) & 15) * 0x1000000ull)
+
+#define CVMX_GSERX_PLL_PX_MODE_0(offset, block_id)                                                 \
+	(0x00011800904E0030ull + (((offset) & 15) + ((block_id) & 15) * 0x80000ull) * 32)
+#define CVMX_GSERX_PLL_PX_MODE_1(offset, block_id)                                                 \
+	(0x00011800904E0038ull + (((offset) & 15) + ((block_id) & 15) * 0x80000ull) * 32)
+
+#define CVMX_GSERX_SLICE_CFG(offset) (0x0001180090460060ull + ((offset) & 15) * 0x1000000ull)
+
+#define CVMX_GSERX_SLICEX_PCIE1_MODE(offset, block_id)                                             \
+	(0x0001180090460228ull + (((offset) & 1) + ((block_id) & 15) * 0x8ull) * 2097152)
+#define CVMX_GSERX_SLICEX_PCIE2_MODE(offset, block_id)                                             \
+	(0x0001180090460230ull + (((offset) & 1) + ((block_id) & 15) * 0x8ull) * 2097152)
+#define CVMX_GSERX_SLICEX_PCIE3_MODE(offset, block_id)                                             \
+	(0x0001180090460238ull + (((offset) & 1) + ((block_id) & 15) * 0x8ull) * 2097152)
+#define CVMX_GSERX_SLICEX_RX_SDLL_CTRL(offset, block_id)                                           \
+	(0x0001180090460220ull + (((offset) & 1) + ((block_id) & 15) * 0x8ull) * 2097152)
+
+#define CVMX_GSERX_REFCLK_SEL(offset) (0x0001180090000008ull + ((offset) & 15) * 0x1000000ull)
+#define CVMX_GSERX_PHY_CTL(offset)    (0x0001180090000000ull + ((offset) & 15) * 0x1000000ull)
+#define CVMX_GSERX_CFG(offset)	      (0x0001180090000080ull + ((offset) & 15) * 0x1000000ull)
+
+/**
+ * cvmx_gser#_cfg
+ */
+union cvmx_gserx_cfg {
+	u64 u64;
+	struct cvmx_gserx_cfg_s {
+		u64 reserved_9_63 : 55;
+		u64 rmac_pipe : 1;
+		u64 rmac : 1;
+		u64 srio : 1;
+		u64 sata : 1;
+		u64 bgx_quad : 1;
+		u64 bgx_dual : 1;
+		u64 bgx : 1;
+		u64 ila : 1;
+		u64 pcie : 1;
+	} s;
+	struct cvmx_gserx_cfg_cn73xx {
+		u64 reserved_6_63 : 58;
+		u64 sata : 1;
+		u64 bgx_quad : 1;
+		u64 bgx_dual : 1;
+		u64 bgx : 1;
+		u64 ila : 1;
+		u64 pcie : 1;
+	} cn73xx;
+	struct cvmx_gserx_cfg_cn78xx {
+		u64 reserved_5_63 : 59;
+		u64 bgx_quad : 1;
+		u64 bgx_dual : 1;
+		u64 bgx : 1;
+		u64 ila : 1;
+		u64 pcie : 1;
+	} cn78xx;
+	struct cvmx_gserx_cfg_cn78xx cn78xxp1;
+	struct cvmx_gserx_cfg_s cnf75xx;
+};
+
+typedef union cvmx_gserx_cfg cvmx_gserx_cfg_t;
+
+/**
+ * cvmx_gser#_eq_wait_time
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_eq_wait_time {
+	u64 u64;
+	struct cvmx_gserx_eq_wait_time_s {
+		u64 reserved_8_63 : 56;
+		u64 rxeq_wait_cnt : 4;
+		u64 txeq_wait_cnt : 4;
+	} s;
+	struct cvmx_gserx_eq_wait_time_s cn73xx;
+	struct cvmx_gserx_eq_wait_time_s cn78xx;
+	struct cvmx_gserx_eq_wait_time_s cn78xxp1;
+	struct cvmx_gserx_eq_wait_time_s cnf75xx;
+};
+
+typedef union cvmx_gserx_eq_wait_time cvmx_gserx_eq_wait_time_t;
+
+/**
+ * cvmx_gser#_glbl_misc_config_1
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_glbl_misc_config_1 {
+	u64 u64;
+	struct cvmx_gserx_glbl_misc_config_1_s {
+		u64 reserved_10_63 : 54;
+		u64 pcs_sds_vref_tr : 4;
+		u64 pcs_sds_trim_chp_reg : 2;
+		u64 pcs_sds_vco_reg_tr : 2;
+		u64 pcs_sds_cvbg_en : 1;
+		u64 pcs_sds_extvbg_en : 1;
+	} s;
+	struct cvmx_gserx_glbl_misc_config_1_s cn73xx;
+	struct cvmx_gserx_glbl_misc_config_1_s cn78xx;
+	struct cvmx_gserx_glbl_misc_config_1_s cn78xxp1;
+	struct cvmx_gserx_glbl_misc_config_1_s cnf75xx;
+};
+
+typedef union cvmx_gserx_glbl_misc_config_1 cvmx_gserx_glbl_misc_config_1_t;
+
+/**
+ * cvmx_gser#_glbl_pll_cfg_3
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_glbl_pll_cfg_3 {
+	u64 u64;
+	struct cvmx_gserx_glbl_pll_cfg_3_s {
+		u64 reserved_10_63 : 54;
+		u64 pcs_sds_pll_vco_amp : 2;
+		u64 pll_bypass_uq : 1;
+		u64 pll_vctrl_sel_ovrrd_en : 1;
+		u64 pll_vctrl_sel_ovrrd_val : 2;
+		u64 pll_vctrl_sel_lcvco_val : 2;
+		u64 pll_vctrl_sel_rovco_val : 2;
+	} s;
+	struct cvmx_gserx_glbl_pll_cfg_3_s cn73xx;
+	struct cvmx_gserx_glbl_pll_cfg_3_s cn78xx;
+	struct cvmx_gserx_glbl_pll_cfg_3_s cn78xxp1;
+	struct cvmx_gserx_glbl_pll_cfg_3_s cnf75xx;
+};
+
+typedef union cvmx_gserx_glbl_pll_cfg_3 cvmx_gserx_glbl_pll_cfg_3_t;
+
+/**
+ * cvmx_gser#_dlm#_rx_data_en
+ *
+ * DLM Receiver Enable.
+ *
+ */
+union cvmx_gserx_dlmx_rx_data_en {
+	u64 u64;
+	struct cvmx_gserx_dlmx_rx_data_en_s {
+		u64 reserved_9_63 : 55;
+		u64 rx1_data_en : 1;
+		u64 reserved_1_7 : 7;
+		u64 rx0_data_en : 1;
+	} s;
+	struct cvmx_gserx_dlmx_rx_data_en_s cn70xx;
+	struct cvmx_gserx_dlmx_rx_data_en_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_rx_data_en cvmx_gserx_dlmx_rx_data_en_t;
+
+/**
+ * cvmx_gser#_dlm#_rx_pll_en
+ *
+ * DLM0 DPLL Enable.
+ *
+ */
+union cvmx_gserx_dlmx_rx_pll_en {
+	u64 u64;
+	struct cvmx_gserx_dlmx_rx_pll_en_s {
+		u64 reserved_9_63 : 55;
+		u64 rx1_pll_en : 1;
+		u64 reserved_1_7 : 7;
+		u64 rx0_pll_en : 1;
+	} s;
+	struct cvmx_gserx_dlmx_rx_pll_en_s cn70xx;
+	struct cvmx_gserx_dlmx_rx_pll_en_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_rx_pll_en cvmx_gserx_dlmx_rx_pll_en_t;
+
+/**
+ * cvmx_gser#_dlm#_rx_rate
+ *
+ * DLM0 Rx Data Rate.
+ *
+ */
+union cvmx_gserx_dlmx_rx_rate {
+	u64 u64;
+	struct cvmx_gserx_dlmx_rx_rate_s {
+		u64 reserved_10_63 : 54;
+		u64 rx1_rate : 2;
+		u64 reserved_2_7 : 6;
+		u64 rx0_rate : 2;
+	} s;
+	struct cvmx_gserx_dlmx_rx_rate_s cn70xx;
+	struct cvmx_gserx_dlmx_rx_rate_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_rx_rate cvmx_gserx_dlmx_rx_rate_t;
+
+/**
+ * cvmx_gser#_dlm#_rx_reset
+ *
+ * DLM0 Receiver Reset.
+ *
+ */
+union cvmx_gserx_dlmx_rx_reset {
+	u64 u64;
+	struct cvmx_gserx_dlmx_rx_reset_s {
+		u64 reserved_9_63 : 55;
+		u64 rx1_reset : 1;
+		u64 reserved_1_7 : 7;
+		u64 rx0_reset : 1;
+	} s;
+	struct cvmx_gserx_dlmx_rx_reset_s cn70xx;
+	struct cvmx_gserx_dlmx_rx_reset_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_rx_reset cvmx_gserx_dlmx_rx_reset_t;
+
+/**
+ * cvmx_gser#_dlm#_test_powerdown
+ *
+ * DLM Test Powerdown.
+ *
+ */
+union cvmx_gserx_dlmx_test_powerdown {
+	u64 u64;
+	struct cvmx_gserx_dlmx_test_powerdown_s {
+		u64 reserved_1_63 : 63;
+		u64 test_powerdown : 1;
+	} s;
+	struct cvmx_gserx_dlmx_test_powerdown_s cn70xx;
+	struct cvmx_gserx_dlmx_test_powerdown_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_test_powerdown cvmx_gserx_dlmx_test_powerdown_t;
+
+/**
+ * cvmx_gser#_dlm#_tx_amplitude
+ *
+ * DLM0 Tx Amplitude (Full Swing Mode).
+ *
+ */
+union cvmx_gserx_dlmx_tx_amplitude {
+	u64 u64;
+	struct cvmx_gserx_dlmx_tx_amplitude_s {
+		u64 reserved_15_63 : 49;
+		u64 tx1_amplitude : 7;
+		u64 reserved_7_7 : 1;
+		u64 tx0_amplitude : 7;
+	} s;
+	struct cvmx_gserx_dlmx_tx_amplitude_s cn70xx;
+	struct cvmx_gserx_dlmx_tx_amplitude_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_tx_amplitude cvmx_gserx_dlmx_tx_amplitude_t;
+
+/**
+ * cvmx_gser#_dlm#_tx_en
+ *
+ * DLM Transmit Clocking and Data Sampling Enable.
+ *
+ */
+union cvmx_gserx_dlmx_tx_en {
+	u64 u64;
+	struct cvmx_gserx_dlmx_tx_en_s {
+		u64 reserved_9_63 : 55;
+		u64 tx1_en : 1;
+		u64 reserved_1_7 : 7;
+		u64 tx0_en : 1;
+	} s;
+	struct cvmx_gserx_dlmx_tx_en_s cn70xx;
+	struct cvmx_gserx_dlmx_tx_en_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_tx_en cvmx_gserx_dlmx_tx_en_t;
+
+/**
+ * cvmx_gser#_dlm#_tx_preemph
+ *
+ * DLM0 Tx Deemphasis.
+ *
+ */
+union cvmx_gserx_dlmx_tx_preemph {
+	u64 u64;
+	struct cvmx_gserx_dlmx_tx_preemph_s {
+		u64 reserved_15_63 : 49;
+		u64 tx1_preemph : 7;
+		u64 reserved_7_7 : 1;
+		u64 tx0_preemph : 7;
+	} s;
+	struct cvmx_gserx_dlmx_tx_preemph_s cn70xx;
+	struct cvmx_gserx_dlmx_tx_preemph_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_tx_preemph cvmx_gserx_dlmx_tx_preemph_t;
+
+/**
+ * cvmx_gser#_dlm#_tx_status
+ *
+ * DLM Transmit Common Mode Control Status.
+ *
+ */
+union cvmx_gserx_dlmx_tx_status {
+	u64 u64;
+	struct cvmx_gserx_dlmx_tx_status_s {
+		u64 reserved_10_63 : 54;
+		u64 tx1_cm_status : 1;
+		u64 tx1_status : 1;
+		u64 reserved_2_7 : 6;
+		u64 tx0_cm_status : 1;
+		u64 tx0_status : 1;
+	} s;
+	struct cvmx_gserx_dlmx_tx_status_s cn70xx;
+	struct cvmx_gserx_dlmx_tx_status_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_tx_status cvmx_gserx_dlmx_tx_status_t;
+
+/**
+ * cvmx_gser#_dlm#_rx_status
+ *
+ * DLM Receive DPLL State Indicator.
+ *
+ */
+union cvmx_gserx_dlmx_rx_status {
+	u64 u64;
+	struct cvmx_gserx_dlmx_rx_status_s {
+		u64 reserved_9_63 : 55;
+		u64 rx1_status : 1;
+		u64 reserved_1_7 : 7;
+		u64 rx0_status : 1;
+	} s;
+	struct cvmx_gserx_dlmx_rx_status_s cn70xx;
+	struct cvmx_gserx_dlmx_rx_status_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_rx_status cvmx_gserx_dlmx_rx_status_t;
+
+/**
+ * cvmx_gser#_dlm#_tx_rate
+ *
+ * DLM0 Tx Data Rate.
+ *
+ */
+union cvmx_gserx_dlmx_tx_rate {
+	u64 u64;
+	struct cvmx_gserx_dlmx_tx_rate_s {
+		u64 reserved_10_63 : 54;
+		u64 tx1_rate : 2;
+		u64 reserved_2_7 : 6;
+		u64 tx0_rate : 2;
+	} s;
+	struct cvmx_gserx_dlmx_tx_rate_s cn70xx;
+	struct cvmx_gserx_dlmx_tx_rate_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_tx_rate cvmx_gserx_dlmx_tx_rate_t;
+
+/**
+ * cvmx_gser#_sata_status
+ *
+ * SATA PHY Ready Status.
+ *
+ */
+union cvmx_gserx_sata_status {
+	u64 u64;
+	struct cvmx_gserx_sata_status_s {
+		u64 reserved_2_63 : 62;
+		u64 p1_rdy : 1;
+		u64 p0_rdy : 1;
+	} s;
+	struct cvmx_gserx_sata_status_s cn70xx;
+	struct cvmx_gserx_sata_status_s cn70xxp1;
+	struct cvmx_gserx_sata_status_s cn73xx;
+	struct cvmx_gserx_sata_status_s cnf75xx;
+};
+
+typedef union cvmx_gserx_sata_status cvmx_gserx_sata_status_t;
+
+/**
+ * cvmx_gser#_dlm#_tx_data_en
+ *
+ * DLM0 Transmit Driver Enable.
+ *
+ */
+union cvmx_gserx_dlmx_tx_data_en {
+	u64 u64;
+	struct cvmx_gserx_dlmx_tx_data_en_s {
+		u64 reserved_9_63 : 55;
+		u64 tx1_data_en : 1;
+		u64 reserved_1_7 : 7;
+		u64 tx0_data_en : 1;
+	} s;
+	struct cvmx_gserx_dlmx_tx_data_en_s cn70xx;
+	struct cvmx_gserx_dlmx_tx_data_en_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_tx_data_en cvmx_gserx_dlmx_tx_data_en_t;
+
+/**
+ * cvmx_gser#_dlm#_tx_cm_en
+ *
+ * DLM0 Transmit Common-Mode Control Enable.
+ *
+ */
+union cvmx_gserx_dlmx_tx_cm_en {
+	u64 u64;
+	struct cvmx_gserx_dlmx_tx_cm_en_s {
+		u64 reserved_9_63 : 55;
+		u64 tx1_cm_en : 1;
+		u64 reserved_1_7 : 7;
+		u64 tx0_cm_en : 1;
+	} s;
+	struct cvmx_gserx_dlmx_tx_cm_en_s cn70xx;
+	struct cvmx_gserx_dlmx_tx_cm_en_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_tx_cm_en cvmx_gserx_dlmx_tx_cm_en_t;
+
+/**
+ * cvmx_gser#_dlm#_tx_reset
+ *
+ * DLM0 Tx Reset.
+ *
+ */
+union cvmx_gserx_dlmx_tx_reset {
+	u64 u64;
+	struct cvmx_gserx_dlmx_tx_reset_s {
+		u64 reserved_9_63 : 55;
+		u64 tx1_reset : 1;
+		u64 reserved_1_7 : 7;
+		u64 tx0_reset : 1;
+	} s;
+	struct cvmx_gserx_dlmx_tx_reset_s cn70xx;
+	struct cvmx_gserx_dlmx_tx_reset_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_tx_reset cvmx_gserx_dlmx_tx_reset_t;
+
+/**
+ * cvmx_gser#_dlm#_mpll_status
+ *
+ * DLM PLL Lock Status.
+ *
+ */
+union cvmx_gserx_dlmx_mpll_status {
+	u64 u64;
+	struct cvmx_gserx_dlmx_mpll_status_s {
+		u64 reserved_1_63 : 63;
+		u64 mpll_status : 1;
+	} s;
+	struct cvmx_gserx_dlmx_mpll_status_s cn70xx;
+	struct cvmx_gserx_dlmx_mpll_status_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_mpll_status cvmx_gserx_dlmx_mpll_status_t;
+
+/**
+ * cvmx_gser#_dlm#_phy_reset
+ *
+ * DLM Core and State Machine Reset.
+ *
+ */
+union cvmx_gserx_dlmx_phy_reset {
+	u64 u64;
+	struct cvmx_gserx_dlmx_phy_reset_s {
+		u64 reserved_1_63 : 63;
+		u64 phy_reset : 1;
+	} s;
+	struct cvmx_gserx_dlmx_phy_reset_s cn70xx;
+	struct cvmx_gserx_dlmx_phy_reset_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_phy_reset cvmx_gserx_dlmx_phy_reset_t;
+
+/**
+ * cvmx_gser#_dlm#_ref_clkdiv2
+ *
+ * DLM Input Reference Clock Divider Control.
+ *
+ */
+union cvmx_gserx_dlmx_ref_clkdiv2 {
+	u64 u64;
+	struct cvmx_gserx_dlmx_ref_clkdiv2_s {
+		u64 reserved_1_63 : 63;
+		u64 ref_clkdiv2 : 1;
+	} s;
+	struct cvmx_gserx_dlmx_ref_clkdiv2_s cn70xx;
+	struct cvmx_gserx_dlmx_ref_clkdiv2_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_ref_clkdiv2 cvmx_gserx_dlmx_ref_clkdiv2_t;
+
+/**
+ * cvmx_gser#_dlm#_ref_ssp_en
+ *
+ * DLM0 Reference Clock Enable for the PHY.
+ *
+ */
+union cvmx_gserx_dlmx_ref_ssp_en {
+	u64 u64;
+	struct cvmx_gserx_dlmx_ref_ssp_en_s {
+		u64 reserved_1_63 : 63;
+		u64 ref_ssp_en : 1;
+	} s;
+	struct cvmx_gserx_dlmx_ref_ssp_en_s cn70xx;
+	struct cvmx_gserx_dlmx_ref_ssp_en_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_ref_ssp_en cvmx_gserx_dlmx_ref_ssp_en_t;
+
+union cvmx_gserx_dlmx_mpll_en {
+	u64 u64;
+	struct cvmx_gserx_dlmx_mpll_en_s {
+		u64 reserved_1_63 : 63;
+		u64 mpll_en : 1;
+	} s;
+	struct cvmx_gserx_dlmx_mpll_en_s cn70xx;
+	struct cvmx_gserx_dlmx_mpll_en_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_mpll_en cvmx_gserx_dlmx_mpll_en_t;
+
+/**
+ * cvmx_gser#_dlm#_rx_eq
+ *
+ * DLM Receiver Equalization Setting.
+ *
+ */
+union cvmx_gserx_dlmx_rx_eq {
+	u64 u64;
+	struct cvmx_gserx_dlmx_rx_eq_s {
+		u64 reserved_11_63 : 53;
+		u64 rx1_eq : 3;
+		u64 reserved_3_7 : 5;
+		u64 rx0_eq : 3;
+	} s;
+	struct cvmx_gserx_dlmx_rx_eq_s cn70xx;
+	struct cvmx_gserx_dlmx_rx_eq_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_rx_eq cvmx_gserx_dlmx_rx_eq_t;
+
+/**
+ * cvmx_gser#_dlm#_mpll_multiplier
+ *
+ * DLM MPLL Frequency Multiplier Control.
+ *
+ */
+union cvmx_gserx_dlmx_mpll_multiplier {
+	u64 u64;
+	struct cvmx_gserx_dlmx_mpll_multiplier_s {
+		u64 reserved_7_63 : 57;
+		u64 mpll_multiplier : 7;
+	} s;
+	struct cvmx_gserx_dlmx_mpll_multiplier_s cn70xx;
+	struct cvmx_gserx_dlmx_mpll_multiplier_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_dlmx_mpll_multiplier cvmx_gserx_dlmx_mpll_multiplier_t;
+
+/**
+ * cvmx_gser#_br_rx#_ctl
+ */
+union cvmx_gserx_br_rxx_ctl {
+	u64 u64;
+	struct cvmx_gserx_br_rxx_ctl_s {
+		u64 reserved_4_63 : 60;
+		u64 rxt_adtmout_disable : 1;
+		u64 rxt_swm : 1;
+		u64 rxt_preset : 1;
+		u64 rxt_initialize : 1;
+	} s;
+	struct cvmx_gserx_br_rxx_ctl_s cn73xx;
+	struct cvmx_gserx_br_rxx_ctl_s cn78xx;
+	struct cvmx_gserx_br_rxx_ctl_cn78xxp1 {
+		u64 reserved_3_63 : 61;
+		u64 rxt_swm : 1;
+		u64 rxt_preset : 1;
+		u64 rxt_initialize : 1;
+	} cn78xxp1;
+	struct cvmx_gserx_br_rxx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_gserx_br_rxx_ctl cvmx_gserx_br_rxx_ctl_t;
+
+/**
+ * cvmx_gser#_br_rx#_eer
+ *
+ * GSER software BASE-R RX link training equalization evaluation request (EER). A write to
+ * [RXT_EER] initiates a equalization request to the RAW PCS. A read of this register returns the
+ * equalization status message and a valid bit indicating it was updated. These registers are for
+ * diagnostic use only.
+ */
+union cvmx_gserx_br_rxx_eer {
+	u64 u64;
+	struct cvmx_gserx_br_rxx_eer_s {
+		u64 reserved_16_63 : 48;
+		u64 rxt_eer : 1;
+		u64 rxt_esv : 1;
+		u64 rxt_esm : 14;
+	} s;
+	struct cvmx_gserx_br_rxx_eer_s cn73xx;
+	struct cvmx_gserx_br_rxx_eer_s cn78xx;
+	struct cvmx_gserx_br_rxx_eer_s cn78xxp1;
+	struct cvmx_gserx_br_rxx_eer_s cnf75xx;
+};
+
+typedef union cvmx_gserx_br_rxx_eer cvmx_gserx_br_rxx_eer_t;
+
+/**
+ * cvmx_gser#_pcie_pipe_port_sel
+ *
+ * PCIE PIPE Enable Request.
+ *
+ */
+union cvmx_gserx_pcie_pipe_port_sel {
+	u64 u64;
+	struct cvmx_gserx_pcie_pipe_port_sel_s {
+		u64 reserved_3_63 : 61;
+		u64 cfg_pem1_dlm2 : 1;
+		u64 pipe_port_sel : 2;
+	} s;
+	struct cvmx_gserx_pcie_pipe_port_sel_s cn70xx;
+	struct cvmx_gserx_pcie_pipe_port_sel_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_pcie_pipe_port_sel cvmx_gserx_pcie_pipe_port_sel_t;
+
+/**
+ * cvmx_gser#_pcie_pipe_rst
+ *
+ * PCIE PIPE Reset.
+ *
+ */
+union cvmx_gserx_pcie_pipe_rst {
+	u64 u64;
+	struct cvmx_gserx_pcie_pipe_rst_s {
+		u64 reserved_4_63 : 60;
+		u64 pipe3_rst : 1;
+		u64 pipe2_rst : 1;
+		u64 pipe1_rst : 1;
+		u64 pipe0_rst : 1;
+	} s;
+	struct cvmx_gserx_pcie_pipe_rst_s cn70xx;
+	struct cvmx_gserx_pcie_pipe_rst_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_pcie_pipe_rst cvmx_gserx_pcie_pipe_rst_t;
+
+/**
+ * cvmx_gser#_sata_cfg
+ *
+ * SATA Config Enable.
+ *
+ */
+union cvmx_gserx_sata_cfg {
+	u64 u64;
+	struct cvmx_gserx_sata_cfg_s {
+		u64 reserved_1_63 : 63;
+		u64 sata_en : 1;
+	} s;
+	struct cvmx_gserx_sata_cfg_s cn70xx;
+	struct cvmx_gserx_sata_cfg_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_sata_cfg cvmx_gserx_sata_cfg_t;
+
+/**
+ * cvmx_gser#_sata_lane_rst
+ *
+ * Lane Reset Control.
+ *
+ */
+union cvmx_gserx_sata_lane_rst {
+	u64 u64;
+	struct cvmx_gserx_sata_lane_rst_s {
+		u64 reserved_2_63 : 62;
+		u64 l1_rst : 1;
+		u64 l0_rst : 1;
+	} s;
+	struct cvmx_gserx_sata_lane_rst_s cn70xx;
+	struct cvmx_gserx_sata_lane_rst_s cn70xxp1;
+	struct cvmx_gserx_sata_lane_rst_s cn73xx;
+	struct cvmx_gserx_sata_lane_rst_s cnf75xx;
+};
+
+typedef union cvmx_gserx_sata_lane_rst cvmx_gserx_sata_lane_rst_t;
+
+/**
+ * cvmx_gser#_sata_ref_ssp_en
+ *
+ * SATA Reference Clock Enable for the PHY.
+ *
+ */
+union cvmx_gserx_sata_ref_ssp_en {
+	u64 u64;
+	struct cvmx_gserx_sata_ref_ssp_en_s {
+		u64 reserved_1_63 : 63;
+		u64 ref_ssp_en : 1;
+	} s;
+	struct cvmx_gserx_sata_ref_ssp_en_s cn70xx;
+	struct cvmx_gserx_sata_ref_ssp_en_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_sata_ref_ssp_en cvmx_gserx_sata_ref_ssp_en_t;
+
+/**
+ * cvmx_gser#_phy#_ovrd_in_lo
+ *
+ * PHY Override Input Low Register.
+ *
+ */
+union cvmx_gserx_phyx_ovrd_in_lo {
+	u64 u64;
+	struct cvmx_gserx_phyx_ovrd_in_lo_s {
+		u64 reserved_16_63 : 48;
+		u64 res_ack_in_ovrd : 1;
+		u64 res_ack_in : 1;
+		u64 res_req_in_ovrd : 1;
+		u64 res_req_in : 1;
+		u64 rtune_req_ovrd : 1;
+		u64 rtune_req : 1;
+		u64 mpll_multiplier_ovrd : 1;
+		u64 mpll_multiplier : 7;
+		u64 mpll_en_ovrd : 1;
+		u64 mpll_en : 1;
+	} s;
+	struct cvmx_gserx_phyx_ovrd_in_lo_s cn70xx;
+	struct cvmx_gserx_phyx_ovrd_in_lo_s cn70xxp1;
+};
+
+typedef union cvmx_gserx_phyx_ovrd_in_lo cvmx_gserx_phyx_ovrd_in_lo_t;
+
+/**
+ * cvmx_gser#_phy_ctl
+ *
+ * This register contains general PHY/PLL control of the RAW PCS.
+ * These registers are reset by hardware only during chip cold reset. The values of the CSR
+ * fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_phy_ctl {
+	u64 u64;
+	struct cvmx_gserx_phy_ctl_s {
+		u64 reserved_2_63 : 62;
+		u64 phy_reset : 1;
+		u64 phy_pd : 1;
+	} s;
+	struct cvmx_gserx_phy_ctl_s cn73xx;
+	struct cvmx_gserx_phy_ctl_s cn78xx;
+	struct cvmx_gserx_phy_ctl_s cn78xxp1;
+	struct cvmx_gserx_phy_ctl_s cnf75xx;
+};
+
+typedef union cvmx_gserx_phy_ctl cvmx_gserx_phy_ctl_t;
+
+/**
+ * cvmx_gser#_rx_pwr_ctrl_p1
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_rx_pwr_ctrl_p1 {
+	u64 u64;
+	struct cvmx_gserx_rx_pwr_ctrl_p1_s {
+		u64 reserved_14_63 : 50;
+		u64 p1_rx_resetn : 1;
+		u64 pq_rx_allow_pll_pd : 1;
+		u64 pq_rx_pcs_reset : 1;
+		u64 p1_rx_agc_en : 1;
+		u64 p1_rx_dfe_en : 1;
+		u64 p1_rx_cdr_en : 1;
+		u64 p1_rx_cdr_coast : 1;
+		u64 p1_rx_cdr_clr : 1;
+		u64 p1_rx_subblk_pd : 5;
+		u64 p1_rx_chpd : 1;
+	} s;
+	struct cvmx_gserx_rx_pwr_ctrl_p1_s cn73xx;
+	struct cvmx_gserx_rx_pwr_ctrl_p1_s cn78xx;
+	struct cvmx_gserx_rx_pwr_ctrl_p1_s cn78xxp1;
+	struct cvmx_gserx_rx_pwr_ctrl_p1_s cnf75xx;
+};
+
+typedef union cvmx_gserx_rx_pwr_ctrl_p1 cvmx_gserx_rx_pwr_ctrl_p1_t;
+
+/**
+ * cvmx_gser#_rx_pwr_ctrl_p2
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_rx_pwr_ctrl_p2 {
+	u64 u64;
+	struct cvmx_gserx_rx_pwr_ctrl_p2_s {
+		u64 reserved_14_63 : 50;
+		u64 p2_rx_resetn : 1;
+		u64 p2_rx_allow_pll_pd : 1;
+		u64 p2_rx_pcs_reset : 1;
+		u64 p2_rx_agc_en : 1;
+		u64 p2_rx_dfe_en : 1;
+		u64 p2_rx_cdr_en : 1;
+		u64 p2_rx_cdr_coast : 1;
+		u64 p2_rx_cdr_clr : 1;
+		u64 p2_rx_subblk_pd : 5;
+		u64 p2_rx_chpd : 1;
+	} s;
+	struct cvmx_gserx_rx_pwr_ctrl_p2_s cn73xx;
+	struct cvmx_gserx_rx_pwr_ctrl_p2_s cn78xx;
+	struct cvmx_gserx_rx_pwr_ctrl_p2_s cn78xxp1;
+	struct cvmx_gserx_rx_pwr_ctrl_p2_s cnf75xx;
+};
+
+typedef union cvmx_gserx_rx_pwr_ctrl_p2 cvmx_gserx_rx_pwr_ctrl_p2_t;
+
+/**
+ * cvmx_gser#_rx_txdir_ctrl_0
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_rx_txdir_ctrl_0 {
+	u64 u64;
+	struct cvmx_gserx_rx_txdir_ctrl_0_s {
+		u64 reserved_13_63 : 51;
+		u64 rx_boost_hi_thrs : 4;
+		u64 rx_boost_lo_thrs : 4;
+		u64 rx_boost_hi_val : 5;
+	} s;
+	struct cvmx_gserx_rx_txdir_ctrl_0_s cn73xx;
+	struct cvmx_gserx_rx_txdir_ctrl_0_s cn78xx;
+	struct cvmx_gserx_rx_txdir_ctrl_0_s cn78xxp1;
+	struct cvmx_gserx_rx_txdir_ctrl_0_s cnf75xx;
+};
+
+typedef union cvmx_gserx_rx_txdir_ctrl_0 cvmx_gserx_rx_txdir_ctrl_0_t;
+
+/**
+ * cvmx_gser#_rx_txdir_ctrl_1
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_rx_txdir_ctrl_1 {
+	u64 u64;
+	struct cvmx_gserx_rx_txdir_ctrl_1_s {
+		u64 reserved_12_63 : 52;
+		u64 rx_precorr_chg_dir : 1;
+		u64 rx_tap1_chg_dir : 1;
+		u64 rx_tap1_hi_thrs : 5;
+		u64 rx_tap1_lo_thrs : 5;
+	} s;
+	struct cvmx_gserx_rx_txdir_ctrl_1_s cn73xx;
+	struct cvmx_gserx_rx_txdir_ctrl_1_s cn78xx;
+	struct cvmx_gserx_rx_txdir_ctrl_1_s cn78xxp1;
+	struct cvmx_gserx_rx_txdir_ctrl_1_s cnf75xx;
+};
+
+typedef union cvmx_gserx_rx_txdir_ctrl_1 cvmx_gserx_rx_txdir_ctrl_1_t;
+
+/**
+ * cvmx_gser#_rx_txdir_ctrl_2
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_rx_txdir_ctrl_2 {
+	u64 u64;
+	struct cvmx_gserx_rx_txdir_ctrl_2_s {
+		u64 reserved_16_63 : 48;
+		u64 rx_precorr_hi_thrs : 8;
+		u64 rx_precorr_lo_thrs : 8;
+	} s;
+	struct cvmx_gserx_rx_txdir_ctrl_2_s cn73xx;
+	struct cvmx_gserx_rx_txdir_ctrl_2_s cn78xx;
+	struct cvmx_gserx_rx_txdir_ctrl_2_s cn78xxp1;
+	struct cvmx_gserx_rx_txdir_ctrl_2_s cnf75xx;
+};
+
+typedef union cvmx_gserx_rx_txdir_ctrl_2 cvmx_gserx_rx_txdir_ctrl_2_t;
+
+/**
+ * cvmx_gser#_rx_eie_detsts
+ */
+union cvmx_gserx_rx_eie_detsts {
+	u64 u64;
+	struct cvmx_gserx_rx_eie_detsts_s {
+		u64 reserved_12_63 : 52;
+		u64 cdrlock : 4;
+		u64 eiests : 4;
+		u64 eieltch : 4;
+	} s;
+	struct cvmx_gserx_rx_eie_detsts_s cn73xx;
+	struct cvmx_gserx_rx_eie_detsts_s cn78xx;
+	struct cvmx_gserx_rx_eie_detsts_s cn78xxp1;
+	struct cvmx_gserx_rx_eie_detsts_s cnf75xx;
+};
+
+typedef union cvmx_gserx_rx_eie_detsts cvmx_gserx_rx_eie_detsts_t;
+
+/**
+ * cvmx_gser#_refclk_sel
+ *
+ * This register selects the reference clock.
+ * These registers are reset by hardware only during chip cold reset. The values of the CSR
+ * fields in these registers do not change during chip warm or soft resets.
+ *
+ * Not used with GSER6, GSER7, and GSER8.
+ */
+union cvmx_gserx_refclk_sel {
+	u64 u64;
+	struct cvmx_gserx_refclk_sel_s {
+		u64 reserved_3_63 : 61;
+		u64 pcie_refclk125 : 1;
+		u64 com_clk_sel : 1;
+		u64 use_com1 : 1;
+	} s;
+	struct cvmx_gserx_refclk_sel_s cn73xx;
+	struct cvmx_gserx_refclk_sel_s cn78xx;
+	struct cvmx_gserx_refclk_sel_s cn78xxp1;
+	struct cvmx_gserx_refclk_sel_s cnf75xx;
+};
+
+typedef union cvmx_gserx_refclk_sel cvmx_gserx_refclk_sel_t;
+
+/**
+ * cvmx_gser#_lane#_lbert_cfg
+ *
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_lbert_cfg {
+	u64 u64;
+	struct cvmx_gserx_lanex_lbert_cfg_s {
+		u64 reserved_16_63 : 48;
+		u64 lbert_pg_err_insert : 1;
+		u64 lbert_pm_sync_start : 1;
+		u64 lbert_pg_en : 1;
+		u64 lbert_pg_width : 2;
+		u64 lbert_pg_mode : 4;
+		u64 lbert_pm_en : 1;
+		u64 lbert_pm_width : 2;
+		u64 lbert_pm_mode : 4;
+	} s;
+	struct cvmx_gserx_lanex_lbert_cfg_s cn73xx;
+	struct cvmx_gserx_lanex_lbert_cfg_s cn78xx;
+	struct cvmx_gserx_lanex_lbert_cfg_s cn78xxp1;
+	struct cvmx_gserx_lanex_lbert_cfg_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_lbert_cfg cvmx_gserx_lanex_lbert_cfg_t;
+
+/**
+ * cvmx_gser#_lane#_misc_cfg_0
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_misc_cfg_0 {
+	u64 u64;
+	struct cvmx_gserx_lanex_misc_cfg_0_s {
+		u64 reserved_16_63 : 48;
+		u64 use_pma_polarity : 1;
+		u64 cfg_pcs_loopback : 1;
+		u64 pcs_tx_mode_ovrrd_en : 1;
+		u64 pcs_rx_mode_ovrrd_en : 1;
+		u64 cfg_eie_det_cnt : 4;
+		u64 eie_det_stl_on_time : 3;
+		u64 eie_det_stl_off_time : 3;
+		u64 tx_bit_order : 1;
+		u64 rx_bit_order : 1;
+	} s;
+	struct cvmx_gserx_lanex_misc_cfg_0_s cn73xx;
+	struct cvmx_gserx_lanex_misc_cfg_0_s cn78xx;
+	struct cvmx_gserx_lanex_misc_cfg_0_s cn78xxp1;
+	struct cvmx_gserx_lanex_misc_cfg_0_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_misc_cfg_0 cvmx_gserx_lanex_misc_cfg_0_t;
+
+/**
+ * cvmx_gser#_lane_p#_mode_0
+ *
+ * These are the RAW PCS lane settings mode 0 registers. There is one register per
+ * 4 lanes per GSER per GSER_LMODE_E value (0..11). Only one entry is used at any given time in a
+ * given GSER lane - the one selected by the corresponding GSER()_LANE_MODE[LMODE].
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lane_px_mode_0 {
+	u64 u64;
+	struct cvmx_gserx_lane_px_mode_0_s {
+		u64 reserved_15_63 : 49;
+		u64 ctle : 2;
+		u64 pcie : 1;
+		u64 tx_ldiv : 2;
+		u64 rx_ldiv : 2;
+		u64 srate : 3;
+		u64 reserved_4_4 : 1;
+		u64 tx_mode : 2;
+		u64 rx_mode : 2;
+	} s;
+	struct cvmx_gserx_lane_px_mode_0_s cn73xx;
+	struct cvmx_gserx_lane_px_mode_0_s cn78xx;
+	struct cvmx_gserx_lane_px_mode_0_s cn78xxp1;
+	struct cvmx_gserx_lane_px_mode_0_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lane_px_mode_0 cvmx_gserx_lane_px_mode_0_t;
+
+/**
+ * cvmx_gser#_lane_p#_mode_1
+ *
+ * These are the RAW PCS lane settings mode 1 registers. There is one register per 4 lanes,
+ * (0..3) per GSER per GSER_LMODE_E value (0..11). Only one entry is used at any given time in a
+ * given
+ * GSER lane - the one selected by the corresponding GSER()_LANE_MODE[LMODE].
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lane_px_mode_1 {
+	u64 u64;
+	struct cvmx_gserx_lane_px_mode_1_s {
+		u64 reserved_16_63 : 48;
+		u64 vma_fine_cfg_sel : 1;
+		u64 vma_mm : 1;
+		u64 cdr_fgain : 4;
+		u64 ph_acc_adj : 10;
+	} s;
+	struct cvmx_gserx_lane_px_mode_1_s cn73xx;
+	struct cvmx_gserx_lane_px_mode_1_s cn78xx;
+	struct cvmx_gserx_lane_px_mode_1_s cn78xxp1;
+	struct cvmx_gserx_lane_px_mode_1_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lane_px_mode_1 cvmx_gserx_lane_px_mode_1_t;
+
+/**
+ * cvmx_gser#_lane#_rx_loop_ctrl
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_loop_ctrl {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_loop_ctrl_s {
+		u64 reserved_12_63 : 52;
+		u64 fast_dll_lock : 1;
+		u64 fast_ofst_cncl : 1;
+		u64 cfg_rx_lctrl : 10;
+	} s;
+	struct cvmx_gserx_lanex_rx_loop_ctrl_s cn73xx;
+	struct cvmx_gserx_lanex_rx_loop_ctrl_s cn78xx;
+	struct cvmx_gserx_lanex_rx_loop_ctrl_s cn78xxp1;
+	struct cvmx_gserx_lanex_rx_loop_ctrl_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_loop_ctrl cvmx_gserx_lanex_rx_loop_ctrl_t;
+
+/**
+ * cvmx_gser#_lane#_rx_valbbd_ctrl_0
+ *
+ * These registers are reset by hardware only during chip cold reset. The values of the CSR
+ * fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_valbbd_ctrl_0 {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_0_s {
+		u64 reserved_14_63 : 50;
+		u64 agc_gain : 2;
+		u64 dfe_gain : 2;
+		u64 dfe_c5_mval : 4;
+		u64 dfe_c5_msgn : 1;
+		u64 dfe_c4_mval : 4;
+		u64 dfe_c4_msgn : 1;
+	} s;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_0_s cn73xx;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_0_s cn78xx;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_0_s cn78xxp1;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_0_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_valbbd_ctrl_0 cvmx_gserx_lanex_rx_valbbd_ctrl_0_t;
+
+/**
+ * cvmx_gser#_lane#_rx_valbbd_ctrl_1
+ *
+ * These registers are reset by hardware only during chip cold reset. The values of the CSR
+ * fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_valbbd_ctrl_1 {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_1_s {
+		u64 reserved_15_63 : 49;
+		u64 dfe_c3_mval : 4;
+		u64 dfe_c3_msgn : 1;
+		u64 dfe_c2_mval : 4;
+		u64 dfe_c2_msgn : 1;
+		u64 dfe_c1_mval : 4;
+		u64 dfe_c1_msgn : 1;
+	} s;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_1_s cn73xx;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_1_s cn78xx;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_1_s cn78xxp1;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_1_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_valbbd_ctrl_1 cvmx_gserx_lanex_rx_valbbd_ctrl_1_t;
+
+/**
+ * cvmx_gser#_lane#_rx_valbbd_ctrl_2
+ *
+ * These registers are reset by hardware only during chip cold reset. The values of the CSR
+ * fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_valbbd_ctrl_2 {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_2_s {
+		u64 reserved_6_63 : 58;
+		u64 dfe_ovrd_en : 1;
+		u64 dfe_c5_ovrd_val : 1;
+		u64 dfe_c4_ovrd_val : 1;
+		u64 dfe_c3_ovrd_val : 1;
+		u64 dfe_c2_ovrd_val : 1;
+		u64 dfe_c1_ovrd_val : 1;
+	} s;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_2_s cn73xx;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_2_s cn78xx;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_2_s cn78xxp1;
+	struct cvmx_gserx_lanex_rx_valbbd_ctrl_2_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_valbbd_ctrl_2 cvmx_gserx_lanex_rx_valbbd_ctrl_2_t;
+
+/**
+ * cvmx_gser#_lane_vma_fine_ctrl_0
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lane_vma_fine_ctrl_0 {
+	u64 u64;
+	struct cvmx_gserx_lane_vma_fine_ctrl_0_s {
+		u64 reserved_16_63 : 48;
+		u64 rx_sdll_iq_max_fine : 4;
+		u64 rx_sdll_iq_min_fine : 4;
+		u64 rx_sdll_iq_step_fine : 2;
+		u64 vma_window_wait_fine : 3;
+		u64 lms_wait_time_fine : 3;
+	} s;
+	struct cvmx_gserx_lane_vma_fine_ctrl_0_s cn73xx;
+	struct cvmx_gserx_lane_vma_fine_ctrl_0_s cn78xx;
+	struct cvmx_gserx_lane_vma_fine_ctrl_0_s cn78xxp1;
+	struct cvmx_gserx_lane_vma_fine_ctrl_0_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lane_vma_fine_ctrl_0 cvmx_gserx_lane_vma_fine_ctrl_0_t;
+
+/**
+ * cvmx_gser#_lane_vma_fine_ctrl_1
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lane_vma_fine_ctrl_1 {
+	u64 u64;
+	struct cvmx_gserx_lane_vma_fine_ctrl_1_s {
+		u64 reserved_10_63 : 54;
+		u64 rx_ctle_peak_max_fine : 4;
+		u64 rx_ctle_peak_min_fine : 4;
+		u64 rx_ctle_peak_step_fine : 2;
+	} s;
+	struct cvmx_gserx_lane_vma_fine_ctrl_1_s cn73xx;
+	struct cvmx_gserx_lane_vma_fine_ctrl_1_s cn78xx;
+	struct cvmx_gserx_lane_vma_fine_ctrl_1_s cn78xxp1;
+	struct cvmx_gserx_lane_vma_fine_ctrl_1_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lane_vma_fine_ctrl_1 cvmx_gserx_lane_vma_fine_ctrl_1_t;
+
+/**
+ * cvmx_gser#_lane_vma_fine_ctrl_2
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lane_vma_fine_ctrl_2 {
+	u64 u64;
+	struct cvmx_gserx_lane_vma_fine_ctrl_2_s {
+		u64 reserved_10_63 : 54;
+		u64 rx_prectle_gain_max_fine : 4;
+		u64 rx_prectle_gain_min_fine : 4;
+		u64 rx_prectle_gain_step_fine : 2;
+	} s;
+	struct cvmx_gserx_lane_vma_fine_ctrl_2_s cn73xx;
+	struct cvmx_gserx_lane_vma_fine_ctrl_2_s cn78xx;
+	struct cvmx_gserx_lane_vma_fine_ctrl_2_s cn78xxp1;
+	struct cvmx_gserx_lane_vma_fine_ctrl_2_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lane_vma_fine_ctrl_2 cvmx_gserx_lane_vma_fine_ctrl_2_t;
+
+/**
+ * cvmx_gser#_lane#_pwr_ctrl
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_pwr_ctrl {
+	u64 u64;
+	struct cvmx_gserx_lanex_pwr_ctrl_s {
+		u64 reserved_15_63 : 49;
+		u64 tx_sds_fifo_reset_ovrrd_en : 1;
+		u64 tx_sds_fifo_reset_ovrrd_val : 1;
+		u64 tx_pcs_reset_ovrrd_val : 1;
+		u64 rx_pcs_reset_ovrrd_val : 1;
+		u64 reserved_9_10 : 2;
+		u64 rx_resetn_ovrrd_en : 1;
+		u64 rx_resetn_ovrrd_val : 1;
+		u64 rx_lctrl_ovrrd_en : 1;
+		u64 rx_lctrl_ovrrd_val : 1;
+		u64 tx_tristate_en_ovrrd_en : 1;
+		u64 tx_pcs_reset_ovrrd_en : 1;
+		u64 tx_elec_idle_ovrrd_en : 1;
+		u64 tx_pd_ovrrd_en : 1;
+		u64 tx_p2s_resetn_ovrrd_en : 1;
+	} s;
+	struct cvmx_gserx_lanex_pwr_ctrl_cn73xx {
+		u64 reserved_15_63 : 49;
+		u64 tx_sds_fifo_reset_ovrrd_en : 1;
+		u64 tx_sds_fifo_reset_ovrrd_val : 1;
+		u64 tx_pcs_reset_ovrrd_val : 1;
+		u64 rx_pcs_reset_ovrrd_val : 1;
+		u64 reserved_10_9 : 2;
+		u64 rx_resetn_ovrrd_en : 1;
+		u64 rx_resetn_ovrrd_val : 1;
+		u64 rx_lctrl_ovrrd_en : 1;
+		u64 rx_lctrl_ovrrd_val : 1;
+		u64 tx_tristate_en_ovrrd_en : 1;
+		u64 tx_pcs_reset_ovrrd_en : 1;
+		u64 tx_elec_idle_ovrrd_en : 1;
+		u64 tx_pd_ovrrd_en : 1;
+		u64 tx_p2s_resetn_ovrrd_en : 1;
+	} cn73xx;
+	struct cvmx_gserx_lanex_pwr_ctrl_cn73xx cn78xx;
+	struct cvmx_gserx_lanex_pwr_ctrl_s cn78xxp1;
+	struct cvmx_gserx_lanex_pwr_ctrl_cn73xx cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_pwr_ctrl cvmx_gserx_lanex_pwr_ctrl_t;
+
+/**
+ * cvmx_gser#_lane#_rx_cfg_0
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_cfg_0 {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_cfg_0_s {
+		u64 reserved_16_63 : 48;
+		u64 rx_datarate_ovrrd_en : 1;
+		u64 reserved_14_14 : 1;
+		u64 rx_resetn_ovrrd_val : 1;
+		u64 pcs_sds_rx_eyemon_en : 1;
+		u64 pcs_sds_rx_pcm_ctrl : 4;
+		u64 rx_datarate_ovrrd_val : 2;
+		u64 cfg_rx_pol_invert : 1;
+		u64 rx_subblk_pd_ovrrd_val : 5;
+	} s;
+	struct cvmx_gserx_lanex_rx_cfg_0_cn73xx {
+		u64 reserved_16_63 : 48;
+		u64 rx_datarate_ovrrd_en : 1;
+		u64 pcs_rx_tristate_enable : 1;
+		u64 rx_resetn_ovrrd_val : 1;
+		u64 pcs_sds_rx_eyemon_en : 1;
+		u64 pcs_sds_rx_pcm_ctrl : 4;
+		u64 rx_datarate_ovrrd_val : 2;
+		u64 cfg_rx_pol_invert : 1;
+		u64 rx_subblk_pd_ovrrd_val : 5;
+	} cn73xx;
+	struct cvmx_gserx_lanex_rx_cfg_0_cn78xx {
+		u64 reserved_16_63 : 48;
+		u64 rx_datarate_ovrrd_en : 1;
+		u64 pcs_sds_rx_tristate_enable : 1;
+		u64 rx_resetn_ovrrd_val : 1;
+		u64 pcs_sds_rx_eyemon_en : 1;
+		u64 pcs_sds_rx_pcm_ctrl : 4;
+		u64 rx_datarate_ovrrd_val : 2;
+		u64 cfg_rx_pol_invert : 1;
+		u64 rx_subblk_pd_ovrrd_val : 5;
+	} cn78xx;
+	struct cvmx_gserx_lanex_rx_cfg_0_cn78xx cn78xxp1;
+	struct cvmx_gserx_lanex_rx_cfg_0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_cfg_0 cvmx_gserx_lanex_rx_cfg_0_t;
+
+/**
+ * cvmx_gser#_lane#_rx_cfg_1
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_cfg_1 {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_cfg_1_s {
+		u64 reserved_16_63 : 48;
+		u64 rx_chpd_ovrrd_val : 1;
+		u64 pcs_sds_rx_os_men : 1;
+		u64 eie_en_ovrrd_en : 1;
+		u64 eie_en_ovrrd_val : 1;
+		u64 reserved_11_11 : 1;
+		u64 rx_pcie_mode_ovrrd_en : 1;
+		u64 rx_pcie_mode_ovrrd_val : 1;
+		u64 cfg_rx_dll_locken : 1;
+		u64 pcs_sds_rx_cdr_ssc_mode : 8;
+	} s;
+	struct cvmx_gserx_lanex_rx_cfg_1_s cn73xx;
+	struct cvmx_gserx_lanex_rx_cfg_1_s cn78xx;
+	struct cvmx_gserx_lanex_rx_cfg_1_s cn78xxp1;
+	struct cvmx_gserx_lanex_rx_cfg_1_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_cfg_1 cvmx_gserx_lanex_rx_cfg_1_t;
+
+/**
+ * cvmx_gser#_lane#_rx_cfg_2
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_cfg_2 {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_cfg_2_s {
+		u64 reserved_15_63 : 49;
+		u64 pcs_sds_rx_terminate_to_vdda : 1;
+		u64 pcs_sds_rx_sampler_boost : 2;
+		u64 pcs_sds_rx_sampler_boost_en : 1;
+		u64 reserved_10_10 : 1;
+		u64 rx_sds_rx_agc_mval : 10;
+	} s;
+	struct cvmx_gserx_lanex_rx_cfg_2_s cn73xx;
+	struct cvmx_gserx_lanex_rx_cfg_2_s cn78xx;
+	struct cvmx_gserx_lanex_rx_cfg_2_s cn78xxp1;
+	struct cvmx_gserx_lanex_rx_cfg_2_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_cfg_2 cvmx_gserx_lanex_rx_cfg_2_t;
+
+/**
+ * cvmx_gser#_lane#_rx_cfg_3
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_cfg_3 {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_cfg_3_s {
+		u64 reserved_16_63 : 48;
+		u64 cfg_rx_errdet_ctrl : 16;
+	} s;
+	struct cvmx_gserx_lanex_rx_cfg_3_s cn73xx;
+	struct cvmx_gserx_lanex_rx_cfg_3_s cn78xx;
+	struct cvmx_gserx_lanex_rx_cfg_3_s cn78xxp1;
+	struct cvmx_gserx_lanex_rx_cfg_3_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_cfg_3 cvmx_gserx_lanex_rx_cfg_3_t;
+
+/**
+ * cvmx_gser#_lane#_rx_cfg_4
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_cfg_4 {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_cfg_4_s {
+		u64 reserved_16_63 : 48;
+		u64 cfg_rx_errdet_ctrl : 16;
+	} s;
+	struct cvmx_gserx_lanex_rx_cfg_4_s cn73xx;
+	struct cvmx_gserx_lanex_rx_cfg_4_s cn78xx;
+	struct cvmx_gserx_lanex_rx_cfg_4_s cn78xxp1;
+	struct cvmx_gserx_lanex_rx_cfg_4_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_cfg_4 cvmx_gserx_lanex_rx_cfg_4_t;
+
+/**
+ * cvmx_gser#_lane#_rx_cfg_5
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_cfg_5 {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_cfg_5_s {
+		u64 reserved_5_63 : 59;
+		u64 rx_agc_men_ovrrd_en : 1;
+		u64 rx_agc_men_ovrrd_val : 1;
+		u64 rx_widthsel_ovrrd_en : 1;
+		u64 rx_widthsel_ovrrd_val : 2;
+	} s;
+	struct cvmx_gserx_lanex_rx_cfg_5_s cn73xx;
+	struct cvmx_gserx_lanex_rx_cfg_5_s cn78xx;
+	struct cvmx_gserx_lanex_rx_cfg_5_s cn78xxp1;
+	struct cvmx_gserx_lanex_rx_cfg_5_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_cfg_5 cvmx_gserx_lanex_rx_cfg_5_t;
+
+/**
+ * cvmx_gser#_lane#_rx_ctle_ctrl
+ *
+ * These are the RAW PCS per-lane RX CTLE control registers.
+ * These registers are reset by hardware only during chip cold reset. The values of the CSR
+ * fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_ctle_ctrl {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_ctle_ctrl_s {
+		u64 reserved_16_63 : 48;
+		u64 pcs_sds_rx_ctle_bias_ctrl : 2;
+		u64 pcs_sds_rx_ctle_zero : 4;
+		u64 rx_ctle_pole_ovrrd_en : 1;
+		u64 rx_ctle_pole_ovrrd_val : 4;
+		u64 pcs_sds_rx_ctle_pole_max : 2;
+		u64 pcs_sds_rx_ctle_pole_min : 2;
+		u64 pcs_sds_rx_ctle_pole_step : 1;
+	} s;
+	struct cvmx_gserx_lanex_rx_ctle_ctrl_s cn73xx;
+	struct cvmx_gserx_lanex_rx_ctle_ctrl_s cn78xx;
+	struct cvmx_gserx_lanex_rx_ctle_ctrl_s cn78xxp1;
+	struct cvmx_gserx_lanex_rx_ctle_ctrl_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_ctle_ctrl cvmx_gserx_lanex_rx_ctle_ctrl_t;
+
+/**
+ * cvmx_gser#_lane#_rx_misc_ovrrd
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_rx_misc_ovrrd {
+	u64 u64;
+	struct cvmx_gserx_lanex_rx_misc_ovrrd_s {
+		u64 reserved_14_63 : 50;
+		u64 cfg_rx_oob_clk_en_ovrrd_val : 1;
+		u64 cfg_rx_oob_clk_en_ovrrd_en : 1;
+		u64 cfg_rx_eie_det_ovrrd_val : 1;
+		u64 cfg_rx_eie_det_ovrrd_en : 1;
+		u64 cfg_rx_cdr_ctrl_ovrrd_en : 1;
+		u64 cfg_rx_eq_eval_ovrrd_val : 1;
+		u64 cfg_rx_eq_eval_ovrrd_en : 1;
+		u64 reserved_6_6 : 1;
+		u64 cfg_rx_dll_locken_ovrrd_en : 1;
+		u64 cfg_rx_errdet_ctrl_ovrrd_en : 1;
+		u64 reserved_1_3 : 3;
+		u64 cfg_rxeq_eval_restore_en : 1;
+	} s;
+	struct cvmx_gserx_lanex_rx_misc_ovrrd_cn73xx {
+		u64 reserved_14_63 : 50;
+		u64 cfg_rx_oob_clk_en_ovrrd_val : 1;
+		u64 cfg_rx_oob_clk_en_ovrrd_en : 1;
+		u64 cfg_rx_eie_det_ovrrd_val : 1;
+		u64 cfg_rx_eie_det_ovrrd_en : 1;
+		u64 cfg_rx_cdr_ctrl_ovrrd_en : 1;
+		u64 cfg_rx_eq_eval_ovrrd_val : 1;
+		u64 cfg_rx_eq_eval_ovrrd_en : 1;
+		u64 reserved_6_6 : 1;
+		u64 cfg_rx_dll_locken_ovrrd_en : 1;
+		u64 cfg_rx_errdet_ctrl_ovrrd_en : 1;
+		u64 reserved_3_1 : 3;
+		u64 cfg_rxeq_eval_restore_en : 1;
+	} cn73xx;
+	struct cvmx_gserx_lanex_rx_misc_ovrrd_cn73xx cn78xx;
+	struct cvmx_gserx_lanex_rx_misc_ovrrd_cn78xxp1 {
+		u64 reserved_14_63 : 50;
+		u64 cfg_rx_oob_clk_en_ovrrd_val : 1;
+		u64 cfg_rx_oob_clk_en_ovrrd_en : 1;
+		u64 cfg_rx_eie_det_ovrrd_val : 1;
+		u64 cfg_rx_eie_det_ovrrd_en : 1;
+		u64 cfg_rx_cdr_ctrl_ovrrd_en : 1;
+		u64 cfg_rx_eq_eval_ovrrd_val : 1;
+		u64 cfg_rx_eq_eval_ovrrd_en : 1;
+		u64 reserved_6_6 : 1;
+		u64 cfg_rx_dll_locken_ovrrd_en : 1;
+		u64 cfg_rx_errdet_ctrl_ovrrd_en : 1;
+		u64 reserved_0_3 : 4;
+	} cn78xxp1;
+	struct cvmx_gserx_lanex_rx_misc_ovrrd_cn73xx cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_rx_misc_ovrrd cvmx_gserx_lanex_rx_misc_ovrrd_t;
+
+/**
+ * cvmx_gser#_lane#_tx_cfg_0
+ *
+ * These registers are reset by hardware only during chip cold reset. The
+ * values of the CSR fields in these registers do not change during chip
+ * warm or soft resets.
+ */
+union cvmx_gserx_lanex_tx_cfg_0 {
+	u64 u64;
+	struct cvmx_gserx_lanex_tx_cfg_0_s {
+		u64 reserved_16_63 : 48;
+		u64 tx_tristate_en_ovrrd_val : 1;
+		u64 tx_chpd_ovrrd_val : 1;
+		u64 reserved_10_13 : 4;
+		u64 tx_resetn_ovrrd_val : 1;
+		u64 tx_cm_mode : 1;
+		u64 cfg_tx_swing : 5;
+		u64 fast_rdet_mode : 1;
+		u64 fast_tristate_mode : 1;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_gserx_lanex_tx_cfg_0_cn73xx {
+		u64 reserved_16_63 : 48;
+		u64 tx_tristate_en_ovrrd_val : 1;
+		u64 tx_chpd_ovrrd_val : 1;
+		u64 reserved_13_10 : 4;
+		u64 tx_resetn_ovrrd_val : 1;
+		u64 tx_cm_mode : 1;
+		u64 cfg_tx_swing : 5;
+		u64 fast_rdet_mode : 1;
+		u64 fast_tristate_mode : 1;
+		u64 reserved_0_0 : 1;
+	} cn73xx;
+	struct cvmx_gserx_lanex_tx_cfg_0_cn73xx cn78xx;
+	struct cvmx_gserx_lanex_tx_cfg_0_s cn78xxp1;
+	struct cvmx_gserx_lanex_tx_cfg_0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_tx_cfg_0 cvmx_gserx_lanex_tx_cfg_0_t;
+
+/**
+ * cvmx_gser#_lane#_tx_cfg_1
+ *
+ * These registers are reset by hardware only during chip cold reset. The
+ * values of the CSR fields in these registers do not change during chip
+ * warm or soft resets.
+ */
+union cvmx_gserx_lanex_tx_cfg_1 {
+	u64 u64;
+	struct cvmx_gserx_lanex_tx_cfg_1_s {
+		u64 reserved_15_63 : 49;
+		u64 tx_widthsel_ovrrd_en : 1;
+		u64 tx_widthsel_ovrrd_val : 2;
+		u64 tx_vboost_en_ovrrd_en : 1;
+		u64 tx_turbo_en_ovrrd_en : 1;
+		u64 tx_swing_ovrrd_en : 1;
+		u64 tx_premptap_ovrrd_val : 1;
+		u64 tx_elec_idle_ovrrd_en : 1;
+		u64 smpl_rate_ovrrd_en : 1;
+		u64 smpl_rate_ovrrd_val : 3;
+		u64 tx_datarate_ovrrd_en : 1;
+		u64 tx_datarate_ovrrd_val : 2;
+	} s;
+	struct cvmx_gserx_lanex_tx_cfg_1_s cn73xx;
+	struct cvmx_gserx_lanex_tx_cfg_1_s cn78xx;
+	struct cvmx_gserx_lanex_tx_cfg_1_s cn78xxp1;
+	struct cvmx_gserx_lanex_tx_cfg_1_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_tx_cfg_1 cvmx_gserx_lanex_tx_cfg_1_t;
+
+/**
+ * cvmx_gser#_lane#_tx_cfg_2
+ *
+ * These registers are for diagnostic use only. These registers are reset by hardware only during
+ * chip cold reset. The values of the CSR fields in these registers do not change during chip
+ * warm or soft resets.
+ */
+union cvmx_gserx_lanex_tx_cfg_2 {
+	u64 u64;
+	struct cvmx_gserx_lanex_tx_cfg_2_s {
+		u64 reserved_16_63 : 48;
+		u64 pcs_sds_tx_dcc_en : 1;
+		u64 reserved_3_14 : 12;
+		u64 rcvr_test_ovrrd_en : 1;
+		u64 rcvr_test_ovrrd_val : 1;
+		u64 tx_rx_detect_dis_ovrrd_val : 1;
+	} s;
+	struct cvmx_gserx_lanex_tx_cfg_2_cn73xx {
+		u64 reserved_16_63 : 48;
+		u64 pcs_sds_tx_dcc_en : 1;
+		u64 reserved_14_3 : 12;
+		u64 rcvr_test_ovrrd_en : 1;
+		u64 rcvr_test_ovrrd_val : 1;
+		u64 tx_rx_detect_dis_ovrrd_val : 1;
+	} cn73xx;
+	struct cvmx_gserx_lanex_tx_cfg_2_cn73xx cn78xx;
+	struct cvmx_gserx_lanex_tx_cfg_2_s cn78xxp1;
+	struct cvmx_gserx_lanex_tx_cfg_2_cn73xx cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_tx_cfg_2 cvmx_gserx_lanex_tx_cfg_2_t;
+
+/**
+ * cvmx_gser#_lane#_tx_cfg_3
+ *
+ * These registers are for diagnostic use only. These registers are reset by hardware only during
+ * chip cold reset. The values of the CSR fields in these registers do not change during chip
+ * warm or soft resets.
+ */
+union cvmx_gserx_lanex_tx_cfg_3 {
+	u64 u64;
+	struct cvmx_gserx_lanex_tx_cfg_3_s {
+		u64 reserved_15_63 : 49;
+		u64 cfg_tx_vboost_en : 1;
+		u64 reserved_7_13 : 7;
+		u64 pcs_sds_tx_gain : 3;
+		u64 pcs_sds_tx_srate_sel : 3;
+		u64 cfg_tx_turbo_en : 1;
+	} s;
+	struct cvmx_gserx_lanex_tx_cfg_3_cn73xx {
+		u64 reserved_15_63 : 49;
+		u64 cfg_tx_vboost_en : 1;
+		u64 reserved_13_7 : 7;
+		u64 pcs_sds_tx_gain : 3;
+		u64 pcs_sds_tx_srate_sel : 3;
+		u64 cfg_tx_turbo_en : 1;
+	} cn73xx;
+	struct cvmx_gserx_lanex_tx_cfg_3_cn73xx cn78xx;
+	struct cvmx_gserx_lanex_tx_cfg_3_s cn78xxp1;
+	struct cvmx_gserx_lanex_tx_cfg_3_cn73xx cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_tx_cfg_3 cvmx_gserx_lanex_tx_cfg_3_t;
+
+/**
+ * cvmx_gser#_lane#_tx_pre_emphasis
+ *
+ * These registers are reset by hardware only during chip cold reset. The
+ * values of the CSR fields in these registers do not change during chip
+ * warm or soft resets.
+ */
+union cvmx_gserx_lanex_tx_pre_emphasis {
+	u64 u64;
+	struct cvmx_gserx_lanex_tx_pre_emphasis_s {
+		u64 reserved_9_63 : 55;
+		u64 cfg_tx_premptap : 9;
+	} s;
+	struct cvmx_gserx_lanex_tx_pre_emphasis_s cn73xx;
+	struct cvmx_gserx_lanex_tx_pre_emphasis_s cn78xx;
+	struct cvmx_gserx_lanex_tx_pre_emphasis_s cn78xxp1;
+	struct cvmx_gserx_lanex_tx_pre_emphasis_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_tx_pre_emphasis cvmx_gserx_lanex_tx_pre_emphasis_t;
+
+/**
+ * cvmx_gser#_lane#_pcs_ctlifc_0
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_pcs_ctlifc_0 {
+	u64 u64;
+	struct cvmx_gserx_lanex_pcs_ctlifc_0_s {
+		u64 reserved_14_63 : 50;
+		u64 cfg_tx_vboost_en_ovrrd_val : 1;
+		u64 cfg_tx_coeff_req_ovrrd_val : 1;
+		u64 cfg_rx_cdr_coast_req_ovrrd_val : 1;
+		u64 cfg_tx_detrx_en_req_ovrrd_val : 1;
+		u64 cfg_soft_reset_req_ovrrd_val : 1;
+		u64 cfg_lane_pwr_off_ovrrd_val : 1;
+		u64 cfg_tx_mode_ovrrd_val : 2;
+		u64 cfg_tx_pstate_req_ovrrd_val : 2;
+		u64 cfg_lane_mode_req_ovrrd_val : 4;
+	} s;
+	struct cvmx_gserx_lanex_pcs_ctlifc_0_s cn73xx;
+	struct cvmx_gserx_lanex_pcs_ctlifc_0_s cn78xx;
+	struct cvmx_gserx_lanex_pcs_ctlifc_0_s cn78xxp1;
+	struct cvmx_gserx_lanex_pcs_ctlifc_0_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_pcs_ctlifc_0 cvmx_gserx_lanex_pcs_ctlifc_0_t;
+
+/**
+ * cvmx_gser#_lane#_pcs_ctlifc_1
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_pcs_ctlifc_1 {
+	u64 u64;
+	struct cvmx_gserx_lanex_pcs_ctlifc_1_s {
+		u64 reserved_9_63 : 55;
+		u64 cfg_rx_pstate_req_ovrrd_val : 2;
+		u64 reserved_2_6 : 5;
+		u64 cfg_rx_mode_ovrrd_val : 2;
+	} s;
+	struct cvmx_gserx_lanex_pcs_ctlifc_1_cn73xx {
+		u64 reserved_9_63 : 55;
+		u64 cfg_rx_pstate_req_ovrrd_val : 2;
+		u64 reserved_6_2 : 5;
+		u64 cfg_rx_mode_ovrrd_val : 2;
+	} cn73xx;
+	struct cvmx_gserx_lanex_pcs_ctlifc_1_cn73xx cn78xx;
+	struct cvmx_gserx_lanex_pcs_ctlifc_1_s cn78xxp1;
+	struct cvmx_gserx_lanex_pcs_ctlifc_1_cn73xx cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_pcs_ctlifc_1 cvmx_gserx_lanex_pcs_ctlifc_1_t;
+
+/**
+ * cvmx_gser#_lane#_pcs_ctlifc_2
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lanex_pcs_ctlifc_2 {
+	u64 u64;
+	struct cvmx_gserx_lanex_pcs_ctlifc_2_s {
+		u64 reserved_16_63 : 48;
+		u64 ctlifc_ovrrd_req : 1;
+		u64 reserved_9_14 : 6;
+		u64 cfg_tx_vboost_en_ovrrd_en : 1;
+		u64 cfg_tx_coeff_req_ovrrd_en : 1;
+		u64 cfg_rx_cdr_coast_req_ovrrd_en : 1;
+		u64 cfg_tx_detrx_en_req_ovrrd_en : 1;
+		u64 cfg_soft_reset_req_ovrrd_en : 1;
+		u64 cfg_lane_pwr_off_ovrrd_en : 1;
+		u64 cfg_tx_pstate_req_ovrrd_en : 1;
+		u64 cfg_rx_pstate_req_ovrrd_en : 1;
+		u64 cfg_lane_mode_req_ovrrd_en : 1;
+	} s;
+	struct cvmx_gserx_lanex_pcs_ctlifc_2_cn73xx {
+		u64 reserved_16_63 : 48;
+		u64 ctlifc_ovrrd_req : 1;
+		u64 reserved_14_9 : 6;
+		u64 cfg_tx_vboost_en_ovrrd_en : 1;
+		u64 cfg_tx_coeff_req_ovrrd_en : 1;
+		u64 cfg_rx_cdr_coast_req_ovrrd_en : 1;
+		u64 cfg_tx_detrx_en_req_ovrrd_en : 1;
+		u64 cfg_soft_reset_req_ovrrd_en : 1;
+		u64 cfg_lane_pwr_off_ovrrd_en : 1;
+		u64 cfg_tx_pstate_req_ovrrd_en : 1;
+		u64 cfg_rx_pstate_req_ovrrd_en : 1;
+		u64 cfg_lane_mode_req_ovrrd_en : 1;
+	} cn73xx;
+	struct cvmx_gserx_lanex_pcs_ctlifc_2_cn73xx cn78xx;
+	struct cvmx_gserx_lanex_pcs_ctlifc_2_s cn78xxp1;
+	struct cvmx_gserx_lanex_pcs_ctlifc_2_cn73xx cnf75xx;
+};
+
+typedef union cvmx_gserx_lanex_pcs_ctlifc_2 cvmx_gserx_lanex_pcs_ctlifc_2_t;
+
+/**
+ * cvmx_gser#_lane_mode
+ *
+ * These registers are reset by hardware only during chip cold reset. The values of the CSR
+ * fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_lane_mode {
+	u64 u64;
+	struct cvmx_gserx_lane_mode_s {
+		u64 reserved_4_63 : 60;
+		u64 lmode : 4;
+	} s;
+	struct cvmx_gserx_lane_mode_s cn73xx;
+	struct cvmx_gserx_lane_mode_s cn78xx;
+	struct cvmx_gserx_lane_mode_s cn78xxp1;
+	struct cvmx_gserx_lane_mode_s cnf75xx;
+};
+
+typedef union cvmx_gserx_lane_mode cvmx_gserx_lane_mode_t;
+
+/**
+ * cvmx_gser#_pll_p#_mode_0
+ *
+ * These are the RAW PCS PLL global settings mode 0 registers. There is one register per GSER per
+ * GSER_LMODE_E value (0..11). Only one entry is used at any given time in a given GSER - the one
+ * selected by the corresponding GSER()_LANE_MODE[LMODE].
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during subsequent chip warm or
+ * soft resets.
+ */
+union cvmx_gserx_pll_px_mode_0 {
+	u64 u64;
+	struct cvmx_gserx_pll_px_mode_0_s {
+		u64 reserved_16_63 : 48;
+		u64 pll_icp : 4;
+		u64 pll_rloop : 3;
+		u64 pll_pcs_div : 9;
+	} s;
+	struct cvmx_gserx_pll_px_mode_0_s cn73xx;
+	struct cvmx_gserx_pll_px_mode_0_s cn78xx;
+	struct cvmx_gserx_pll_px_mode_0_s cn78xxp1;
+	struct cvmx_gserx_pll_px_mode_0_s cnf75xx;
+};
+
+typedef union cvmx_gserx_pll_px_mode_0 cvmx_gserx_pll_px_mode_0_t;
+
+/**
+ * cvmx_gser#_pll_p#_mode_1
+ *
+ * These are the RAW PCS PLL global settings mode 1 registers. There is one register per GSER per
+ * GSER_LMODE_E value (0..11). Only one entry is used at any given time in a given GSER - the one
+ * selected by the corresponding GSER()_LANE_MODE[LMODE].
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in this register do not change during subsequent chip warm or
+ * soft resets.
+ */
+union cvmx_gserx_pll_px_mode_1 {
+	u64 u64;
+	struct cvmx_gserx_pll_px_mode_1_s {
+		u64 reserved_14_63 : 50;
+		u64 pll_16p5en : 1;
+		u64 pll_cpadj : 2;
+		u64 pll_pcie3en : 1;
+		u64 pll_opr : 1;
+		u64 pll_div : 9;
+	} s;
+	struct cvmx_gserx_pll_px_mode_1_s cn73xx;
+	struct cvmx_gserx_pll_px_mode_1_s cn78xx;
+	struct cvmx_gserx_pll_px_mode_1_s cn78xxp1;
+	struct cvmx_gserx_pll_px_mode_1_s cnf75xx;
+};
+
+typedef union cvmx_gserx_pll_px_mode_1 cvmx_gserx_pll_px_mode_1_t;
+
+/**
+ * cvmx_gser#_pll_stat
+ */
+union cvmx_gserx_pll_stat {
+	u64 u64;
+	struct cvmx_gserx_pll_stat_s {
+		u64 reserved_1_63 : 63;
+		u64 pll_lock : 1;
+	} s;
+	struct cvmx_gserx_pll_stat_s cn73xx;
+	struct cvmx_gserx_pll_stat_s cn78xx;
+	struct cvmx_gserx_pll_stat_s cn78xxp1;
+	struct cvmx_gserx_pll_stat_s cnf75xx;
+};
+
+typedef union cvmx_gserx_pll_stat cvmx_gserx_pll_stat_t;
+
+/**
+ * cvmx_gser#_qlm_stat
+ */
+union cvmx_gserx_qlm_stat {
+	u64 u64;
+	struct cvmx_gserx_qlm_stat_s {
+		u64 reserved_2_63 : 62;
+		u64 rst_rdy : 1;
+		u64 dcok : 1;
+	} s;
+	struct cvmx_gserx_qlm_stat_s cn73xx;
+	struct cvmx_gserx_qlm_stat_s cn78xx;
+	struct cvmx_gserx_qlm_stat_s cn78xxp1;
+	struct cvmx_gserx_qlm_stat_s cnf75xx;
+};
+
+typedef union cvmx_gserx_qlm_stat cvmx_gserx_qlm_stat_t;
+
+/**
+ * cvmx_gser#_slice_cfg
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ */
+union cvmx_gserx_slice_cfg {
+	u64 u64;
+	struct cvmx_gserx_slice_cfg_s {
+		u64 reserved_12_63 : 52;
+		u64 tx_rx_detect_lvl_enc : 4;
+		u64 reserved_6_7 : 2;
+		u64 pcs_sds_rx_pcie_pterm : 2;
+		u64 pcs_sds_rx_pcie_nterm : 2;
+		u64 pcs_sds_tx_stress_eye : 2;
+	} s;
+	struct cvmx_gserx_slice_cfg_cn73xx {
+		u64 reserved_12_63 : 52;
+		u64 tx_rx_detect_lvl_enc : 4;
+		u64 reserved_7_6 : 2;
+		u64 pcs_sds_rx_pcie_pterm : 2;
+		u64 pcs_sds_rx_pcie_nterm : 2;
+		u64 pcs_sds_tx_stress_eye : 2;
+	} cn73xx;
+	struct cvmx_gserx_slice_cfg_cn73xx cn78xx;
+	struct cvmx_gserx_slice_cfg_s cn78xxp1;
+	struct cvmx_gserx_slice_cfg_cn73xx cnf75xx;
+};
+
+typedef union cvmx_gserx_slice_cfg cvmx_gserx_slice_cfg_t;
+
+/**
+ * cvmx_gser#_slice#_pcie1_mode
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ *
+ * Slice 1 does not exist on GSER0, GSER1, GSER4, GSER5, GSER6, GSER7, and GSER8.
+ */
+union cvmx_gserx_slicex_pcie1_mode {
+	u64 u64;
+	struct cvmx_gserx_slicex_pcie1_mode_s {
+		u64 reserved_15_63 : 49;
+		u64 slice_spare_1_0 : 2;
+		u64 rx_ldll_isel : 2;
+		u64 rx_sdll_isel : 2;
+		u64 rx_pi_bwsel : 3;
+		u64 rx_ldll_bwsel : 3;
+		u64 rx_sdll_bwsel : 3;
+	} s;
+	struct cvmx_gserx_slicex_pcie1_mode_s cn73xx;
+	struct cvmx_gserx_slicex_pcie1_mode_s cn78xx;
+	struct cvmx_gserx_slicex_pcie1_mode_s cn78xxp1;
+	struct cvmx_gserx_slicex_pcie1_mode_s cnf75xx;
+};
+
+typedef union cvmx_gserx_slicex_pcie1_mode cvmx_gserx_slicex_pcie1_mode_t;
+
+/**
+ * cvmx_gser#_slice#_pcie2_mode
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ *
+ * Slice 1 does not exist on GSER0, GSER1, GSER4, GSER5, GSER6, GSER7, and GSER8.
+ */
+union cvmx_gserx_slicex_pcie2_mode {
+	u64 u64;
+	struct cvmx_gserx_slicex_pcie2_mode_s {
+		u64 reserved_15_63 : 49;
+		u64 slice_spare_1_0 : 2;
+		u64 rx_ldll_isel : 2;
+		u64 rx_sdll_isel : 2;
+		u64 rx_pi_bwsel : 3;
+		u64 rx_ldll_bwsel : 3;
+		u64 rx_sdll_bwsel : 3;
+	} s;
+	struct cvmx_gserx_slicex_pcie2_mode_s cn73xx;
+	struct cvmx_gserx_slicex_pcie2_mode_s cn78xx;
+	struct cvmx_gserx_slicex_pcie2_mode_s cn78xxp1;
+	struct cvmx_gserx_slicex_pcie2_mode_s cnf75xx;
+};
+
+typedef union cvmx_gserx_slicex_pcie2_mode cvmx_gserx_slicex_pcie2_mode_t;
+
+/**
+ * cvmx_gser#_slice#_pcie3_mode
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ *
+ * Slice 1 does not exist on GSER0, GSER1, GSER4, GSER5, GSER6, GSER7, and GSER8.
+ */
+union cvmx_gserx_slicex_pcie3_mode {
+	u64 u64;
+	struct cvmx_gserx_slicex_pcie3_mode_s {
+		u64 reserved_15_63 : 49;
+		u64 slice_spare_1_0 : 2;
+		u64 rx_ldll_isel : 2;
+		u64 rx_sdll_isel : 2;
+		u64 rx_pi_bwsel : 3;
+		u64 rx_ldll_bwsel : 3;
+		u64 rx_sdll_bwsel : 3;
+	} s;
+	struct cvmx_gserx_slicex_pcie3_mode_s cn73xx;
+	struct cvmx_gserx_slicex_pcie3_mode_s cn78xx;
+	struct cvmx_gserx_slicex_pcie3_mode_s cn78xxp1;
+	struct cvmx_gserx_slicex_pcie3_mode_s cnf75xx;
+};
+
+typedef union cvmx_gserx_slicex_pcie3_mode cvmx_gserx_slicex_pcie3_mode_t;
+
+/**
+ * cvmx_gser#_slice#_rx_sdll_ctrl
+ *
+ * These registers are for diagnostic use only.
+ * These registers are reset by hardware only during chip cold reset.
+ * The values of the CSR fields in these registers do not change during chip warm or soft resets.
+ *
+ * Slice 1 does not exist on GSER0, GSER1, GSER4, GSER5, GSER6, GSER7, and GSER8.
+ */
+union cvmx_gserx_slicex_rx_sdll_ctrl {
+	u64 u64;
+	struct cvmx_gserx_slicex_rx_sdll_ctrl_s {
+		u64 reserved_16_63 : 48;
+		u64 pcs_sds_oob_clk_ctrl : 2;
+		u64 reserved_7_13 : 7;
+		u64 pcs_sds_rx_sdll_tune : 3;
+		u64 pcs_sds_rx_sdll_swsel : 4;
+	} s;
+	struct cvmx_gserx_slicex_rx_sdll_ctrl_cn73xx {
+		u64 reserved_16_63 : 48;
+		u64 pcs_sds_oob_clk_ctrl : 2;
+		u64 reserved_13_7 : 7;
+		u64 pcs_sds_rx_sdll_tune : 3;
+		u64 pcs_sds_rx_sdll_swsel : 4;
+	} cn73xx;
+	struct cvmx_gserx_slicex_rx_sdll_ctrl_cn73xx cn78xx;
+	struct cvmx_gserx_slicex_rx_sdll_ctrl_s cn78xxp1;
+	struct cvmx_gserx_slicex_rx_sdll_ctrl_cn73xx cnf75xx;
+};
+
+typedef union cvmx_gserx_slicex_rx_sdll_ctrl cvmx_gserx_slicex_rx_sdll_ctrl_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-agl.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-agl.h
new file mode 100644
index 0000000..7a5e4d8
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-agl.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Functions for AGL (RGMII) initialization, configuration,
+ * and monitoring.
+ */
+
+#ifndef __CVMX_HELPER_AGL_H__
+#define __CVMX_HELPER_AGL_H__
+
+int __cvmx_helper_agl_enumerate(int interface);
+
+int cvmx_helper_agl_get_port(int xiface);
+
+/**
+ * @INTERNAL
+ * Probe a RGMII interface and determine the number of ports
+ * connected to it. The RGMII interface should still be down
+ * after this call.
+ *
+ * @param interface Interface to probe
+ *
+ * @return Number of ports on the interface. Zero to disable.
+ */
+int __cvmx_helper_agl_probe(int interface);
+
+/**
+ * @INTERNAL
+ * Bringup and enable a RGMII interface. After this call packet
+ * I/O should be fully functional. This is called with IPD
+ * enabled but PKO disabled.
+ *
+ * @param interface Interface to bring up
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_agl_enable(int interface);
+
+/**
+ * @INTERNAL
+ * Return the link state of an IPD/PKO port as returned by
+ * auto negotiation. The result of this function may not match
+ * Octeon's link config if auto negotiation has changed since
+ * the last call to cvmx_helper_link_set().
+ *
+ * @param ipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t __cvmx_helper_agl_link_get(int ipd_port);
+
+/**
+ * @INTERNAL
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead.
+ *
+ * @param ipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_agl_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
+
+#endif /* __CVMX_HELPER_AGL_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-bgx.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-bgx.h
new file mode 100644
index 0000000..ead6193
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-bgx.h
@@ -0,0 +1,335 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Functions to configure the BGX MAC.
+ */
+
+#ifndef __CVMX_HELPER_BGX_H__
+#define __CVMX_HELPER_BGX_H__
+
+#define CVMX_BGX_RX_FIFO_SIZE (64 * 1024)
+#define CVMX_BGX_TX_FIFO_SIZE (32 * 1024)
+
+int __cvmx_helper_bgx_enumerate(int xiface);
+
+/**
+ * @INTERNAL
+ * Disable the BGX port
+ *
+ * @param xipd_port IPD port of the BGX interface to disable
+ */
+void cvmx_helper_bgx_disable(int xipd_port);
+
+/**
+ * @INTERNAL
+ * Probe a SGMII interface and determine the number of ports
+ * connected to it. The SGMII/XAUI interface should still be down after
+ * this call. This is used by interfaces using the bgx mac.
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Number of ports on the interface. Zero to disable.
+ */
+int __cvmx_helper_bgx_probe(int xiface);
+
+/**
+ * @INTERNAL
+ * Bringup and enable a SGMII interface. After this call packet
+ * I/O should be fully functional. This is called with IPD
+ * enabled but PKO disabled. This is used by interfaces using the
+ * bgx mac.
+ *
+ * @param xiface Interface to bring up
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_bgx_sgmii_enable(int xiface);
+
+/**
+ * @INTERNAL
+ * Return the link state of an IPD/PKO port as returned by
+ * auto negotiation. The result of this function may not match
+ * Octeon's link config if auto negotiation has changed since
+ * the last call to cvmx_helper_link_set(). This is used by
+ * interfaces using the bgx mac.
+ *
+ * @param xipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t __cvmx_helper_bgx_sgmii_link_get(int xipd_port);
+
+/**
+ * @INTERNAL
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead. This is used by interfaces
+ * using the bgx mac.
+ *
+ * @param xipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_bgx_sgmii_link_set(int xipd_port, cvmx_helper_link_info_t link_info);
+
+/**
+ * @INTERNAL
+ * Configure a port for internal and/or external loopback. Internal loopback
+ * causes packets sent by the port to be received by Octeon. External loopback
+ * causes packets received from the wire to sent out again. This is used by
+ * interfaces using the bgx mac.
+ *
+ * @param xipd_port IPD/PKO port to loopback.
+ * @param enable_internal
+ *                 Non zero if you want internal loopback
+ * @param enable_external
+ *                 Non zero if you want external loopback
+ *
+ * @return Zero on success, negative on failure.
+ */
+int __cvmx_helper_bgx_sgmii_configure_loopback(int xipd_port, int enable_internal,
+					       int enable_external);
+
+/**
+ * @INTERNAL
+ * Bringup and enable a XAUI interface. After this call packet
+ * I/O should be fully functional. This is called with IPD
+ * enabled but PKO disabled. This is used by interfaces using the
+ * bgx mac.
+ *
+ * @param xiface Interface to bring up
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_bgx_xaui_enable(int xiface);
+
+/**
+ * @INTERNAL
+ * Return the link state of an IPD/PKO port as returned by
+ * auto negotiation. The result of this function may not match
+ * Octeon's link config if auto negotiation has changed since
+ * the last call to cvmx_helper_link_set(). This is used by
+ * interfaces using the bgx mac.
+ *
+ * @param xipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t __cvmx_helper_bgx_xaui_link_get(int xipd_port);
+
+/**
+ * @INTERNAL
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead. This is used by interfaces
+ * using the bgx mac.
+ *
+ * @param xipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_bgx_xaui_link_set(int xipd_port, cvmx_helper_link_info_t link_info);
+
+/**
+ * @INTERNAL
+ * Configure a port for internal and/or external loopback. Internal loopback
+ * causes packets sent by the port to be received by Octeon. External loopback
+ * causes packets received from the wire to sent out again. This is used by
+ * interfaces using the bgx mac.
+ *
+ * @param xipd_port IPD/PKO port to loopback.
+ * @param enable_internal
+ *                 Non zero if you want internal loopback
+ * @param enable_external
+ *                 Non zero if you want external loopback
+ *
+ * @return Zero on success, negative on failure.
+ */
+int __cvmx_helper_bgx_xaui_configure_loopback(int xipd_port, int enable_internal,
+					      int enable_external);
+
+int __cvmx_helper_bgx_mixed_enable(int xiface);
+
+cvmx_helper_link_info_t __cvmx_helper_bgx_mixed_link_get(int xipd_port);
+
+int __cvmx_helper_bgx_mixed_link_set(int xipd_port, cvmx_helper_link_info_t link_info);
+
+int __cvmx_helper_bgx_mixed_configure_loopback(int xipd_port, int enable_internal,
+					       int enable_external);
+
+cvmx_helper_interface_mode_t cvmx_helper_bgx_get_mode(int xiface, int index);
+
+/**
+ * @INTERNAL
+ * Configure Priority-Based Flow Control (a.k.a. PFC/CBFC)
+ * on a specific BGX interface/port.
+ */
+void __cvmx_helper_bgx_xaui_config_pfc(unsigned int node, unsigned int interface, unsigned int port,
+				       bool pfc_enable);
+
+/**
+ * This function control how the hardware handles incoming PAUSE
+ * packets. The most common modes of operation:
+ * ctl_bck = 1, ctl_drp = 1: hardware handles everything
+ * ctl_bck = 0, ctl_drp = 0: software sees all PAUSE frames
+ * ctl_bck = 0, ctl_drp = 1: all PAUSE frames are completely ignored
+ * @param node		node number.
+ * @param interface	interface number
+ * @param port		port number
+ * @param ctl_bck	1: Forward PAUSE information to TX block
+ * @param ctl_drp	1: Drop control PAUSE frames.
+ */
+void cvmx_helper_bgx_rx_pause_ctl(unsigned int node, unsigned int interface, unsigned int port,
+				  unsigned int ctl_bck, unsigned int ctl_drp);
+
+/**
+ * This function configures the receive action taken for multicast, broadcast
+ * and dmac filter match packets.
+ * @param node		node number.
+ * @param interface	interface number
+ * @param port		port number
+ * @param cam_accept	0: reject packets on dmac filter match
+ *                      1: accept packet on dmac filter match
+ * @param mcast_mode	0x0 = Force reject all multicast packets
+ *                      0x1 = Force accept all multicast packets
+ *                      0x2 = Use the address filter CAM
+ * @param bcast_accept  0 = Reject all broadcast packets
+ *                      1 = Accept all broadcast packets
+ */
+void cvmx_helper_bgx_rx_adr_ctl(unsigned int node, unsigned int interface, unsigned int port,
+				unsigned int cam_accept, unsigned int mcast_mode,
+				unsigned int bcast_accept);
+
+/**
+ * Function to control the generation of FCS, padding by the BGX
+ *
+ */
+void cvmx_helper_bgx_tx_options(unsigned int node, unsigned int interface, unsigned int index,
+				bool fcs_enable, bool pad_enable);
+
+/**
+ * Set mac for the ipd_port
+ *
+ * @param xipd_port ipd_port to set the mac
+ * @param bcst      If set, accept all broadcast packets
+ * @param mcst      Multicast mode
+ *		    0 = Force reject all multicast packets
+ *		    1 = Force accept all multicast packets
+ *		    2 = use the address filter CAM.
+ * @param mac       mac address for the ipd_port
+ */
+void cvmx_helper_bgx_set_mac(int xipd_port, int bcst, int mcst, u64 mac);
+
+int __cvmx_helper_bgx_port_init(int xipd_port, int phy_pres);
+void cvmx_helper_bgx_set_jabber(int xiface, unsigned int index, unsigned int size);
+int cvmx_helper_bgx_shutdown_port(int xiface, int index);
+int cvmx_bgx_set_backpressure_override(int xiface, unsigned int port_mask);
+int __cvmx_helper_bgx_fifo_size(int xiface, unsigned int lmac);
+
+/**
+ * Returns if an interface is RGMII or not
+ *
+ * @param xiface	xinterface to check
+ * @param index		port index (must be 0 for rgmii)
+ *
+ * @return	true if RGMII, false otherwise
+ */
+static inline bool cvmx_helper_bgx_is_rgmii(int xiface, int index)
+{
+	union cvmx_bgxx_cmrx_config cmr_config;
+
+	if (!OCTEON_IS_MODEL(OCTEON_CN73XX) || index != 0)
+		return false;
+	cmr_config.u64 = csr_rd(CVMX_BGXX_CMRX_CONFIG(index, xiface));
+	return cmr_config.s.lmac_type == 5;
+}
+
+/**
+ * Probes the BGX Super Path (SMU/SPU) mode
+ *
+ * @param xiface	global interface number
+ * @param index		interface index
+ *
+ * @return	true, if Super-MAC/PCS mode, false -- otherwise
+ */
+bool cvmx_helper_bgx_is_smu(int xiface, int index);
+
+/**
+ * @INTERNAL
+ * Configure parameters of PAUSE packet.
+ *
+ * @param xipd_port		Global IPD port (node + IPD port).
+ * @param smac			Source MAC address.
+ * @param dmac			Destination MAC address.
+ * @param type			PAUSE packet type.
+ * @param time			Pause time for PAUSE packets (number of 512 bit-times).
+ * @param interval		Interval between PAUSE packets (number of 512 bit-times).
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_bgx_set_pause_pkt_param(int xipd_port, u64 smac, u64 dmac, unsigned int type,
+				 unsigned int time, unsigned int interval);
+
+/**
+ * @INTERNAL
+ * Setup the BGX flow-control mode.
+ *
+ * @param xipd_port		Global IPD port (node + IPD port).
+ * @param type			Flow-control type/protocol.
+ * @param mode			Flow-control mode.
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_bgx_set_flowctl_mode(int xipd_port, cvmx_qos_proto_t qos, cvmx_qos_pkt_mode_t mode);
+
+/**
+ * Enables or disables autonegotiation for an interface.
+ *
+ * @param	xiface	interface to set autonegotiation
+ * @param	index	port index
+ * @param	enable	true to enable autonegotiation, false to disable it
+ *
+ * @return	0 for success, -1 on error.
+ */
+int cvmx_helper_set_autonegotiation(int xiface, int index, bool enable);
+
+/**
+ * Enables or disables forward error correction
+ *
+ * @param	xiface	interface
+ * @param	index	port index
+ * @param	enable	set to true to enable FEC, false to disable
+ *
+ * @return	0 for success, -1 on error
+ *
+ * @NOTE:	If autonegotiation is enabled then autonegotiation will be
+ *		restarted for negotiating FEC.
+ */
+int cvmx_helper_set_fec(int xiface, int index, bool enable);
+
+#ifdef CVMX_DUMP_BGX
+/**
+ * Dump BGX configuration for node 0
+ */
+int cvmx_dump_bgx_config(unsigned int bgx);
+/**
+ * Dump BGX status for node 0
+ */
+int cvmx_dump_bgx_status(unsigned int bgx);
+/**
+ * Dump BGX configuration
+ */
+int cvmx_dump_bgx_config_node(unsigned int node, unsigned int bgx);
+/**
+ * Dump BGX status
+ */
+int cvmx_dump_bgx_status_node(unsigned int node, unsigned int bgx);
+
+#endif
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-board.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-board.h
new file mode 100644
index 0000000..d7a7b7d
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-board.h
@@ -0,0 +1,558 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper functions to abstract board specific data about
+ * network ports from the rest of the cvmx-helper files.
+ */
+
+#ifndef __CVMX_HELPER_BOARD_H__
+#define __CVMX_HELPER_BOARD_H__
+
+#define CVMX_VSC7224_NAME_LEN 16
+
+typedef enum {
+	USB_CLOCK_TYPE_REF_12,
+	USB_CLOCK_TYPE_REF_24,
+	USB_CLOCK_TYPE_REF_48,
+	USB_CLOCK_TYPE_CRYSTAL_12,
+} cvmx_helper_board_usb_clock_types_t;
+
+typedef enum cvmx_phy_type {
+	BROADCOM_GENERIC_PHY,
+	MARVELL_GENERIC_PHY,
+	CORTINA_PHY, /** Now Inphi */
+	AQUANTIA_PHY,
+	GENERIC_8023_C22_PHY,
+	GENERIC_8023_C45_PHY,
+	INBAND_PHY,
+	QUALCOMM_S17,	     /** Qualcomm QCA833X switch */
+	VITESSE_VSC8490_PHY, /** Vitesse VSC8490 is non-standard for SGMII */
+	FAKE_PHY,	     /** Unsupported or no PHY, use GPIOs for LEDs */
+} cvmx_phy_type_t;
+
+/** Used to record the host mode used by the Cortina CS4321 PHY */
+typedef enum {
+	CVMX_PHY_HOST_MODE_UNKNOWN,
+	CVMX_PHY_HOST_MODE_SGMII,
+	CVMX_PHY_HOST_MODE_QSGMII,
+	CVMX_PHY_HOST_MODE_XAUI,
+	CVMX_PHY_HOST_MODE_RXAUI,
+} cvmx_phy_host_mode_t;
+
+typedef enum {
+	set_phy_link_flags_autoneg = 0x1,
+	set_phy_link_flags_flow_control_dont_touch = 0x0 << 1,
+	set_phy_link_flags_flow_control_enable = 0x1 << 1,
+	set_phy_link_flags_flow_control_disable = 0x2 << 1,
+	set_phy_link_flags_flow_control_mask = 0x3 << 1,
+} cvmx_helper_board_set_phy_link_flags_types_t;
+
+/**
+ * The EBB6600 board uses a MDIO mux device to select between the two QLM
+ * modules since both QLM modules share the same PHY addresses.  The
+ * MDIO mux is controlled via GPIO by a GPIO device that is also on
+ * the TWSI bus rather than native OCTEON GPIO libes.
+ *
+ * To further complicate matters, the TWSI GPIO device sits behind
+ * a TWSI mux device as well, making accessing the MDIO devices on
+ * this board a very complex operation involving writing to the TWSI mux,
+ * followed by the MDIO mux device.
+ */
+/** Maximum number of GPIO devices used to control the MDIO mux */
+#define CVMX_PHY_MUX_MAX_GPIO 2
+
+/** Type of MDIO mux device, currently OTHER isn't supported */
+typedef enum {
+	SN74CBTLV3253, /** SN74CBTLV3253 I2C device */
+	OTHER	       /** Unknown/other */
+} cvmx_phy_mux_type_t;
+
+/** Type of GPIO line controlling MDIO mux */
+typedef enum {
+	GPIO_OCTEON, /** Native OCTEON */
+	GPIO_PCA8574 /** TWSI mux device */
+} cvmx_phy_gpio_type_t;
+
+/* Forward declarations */
+struct cvmx_fdt_sfp_info; /** Defined in cvmx-helper-fdt.h */
+struct cvmx_vsc7224;
+struct cvmx_fdt_gpio_info;    /** Defined in cvmx-helper-fdt.h */
+struct cvmx_fdt_i2c_bus_info; /** Defined in cvmx-helper-fdt.h */
+struct cvmx_phy_info;
+struct cvmx_fdt_i2c_bus_info;
+struct cvmx_fdt_gpio_info;
+struct cvmx_fdt_gpio_led;
+
+/**
+ * @INTERNAL
+ * This data structure is used when the port LEDs are wired up to Octeon's GPIO
+ * lines instead of to a traditional PHY.
+ */
+struct cvmx_phy_gpio_leds {
+	struct cvmx_phy_gpio_leds *next; /** For when ports are grouped together */
+	u64 last_rx_count;		 /** Counters used to check for activity */
+	u64 last_tx_count;		 /** Counters used to check for activity */
+	u64 last_activity_poll_time;	 /** Last time activity was polled */
+	u64 last_link_poll_time;	 /** Last time link was polled */
+	int of_offset;
+	int link_poll_interval_ms;     /** Link polling interval in ms */
+	int activity_poll_interval_ms; /** Activity polling interval in ms */
+	struct cvmx_fdt_gpio_led *link_status;
+	struct cvmx_fdt_gpio_led *error;
+	struct cvmx_fdt_gpio_led *rx_activity;
+	struct cvmx_fdt_gpio_led *tx_activity;
+	struct cvmx_fdt_gpio_led *identify;
+
+	struct cvmx_fdt_gpio_info *link_status_gpio;
+	struct cvmx_fdt_gpio_info *error_gpio;
+	/** Type of GPIO for error LED */
+	/** If GPIO expander, describe the bus to the expander */
+	struct cvmx_fdt_gpio_info *rx_activity_gpio;
+	struct cvmx_fdt_gpio_info *tx_activity_gpio;
+
+	u16 rx_activity_hz; /** RX activity blink time in hz */
+	u16 tx_activity_hz; /** TX activity blink time in hz */
+	/**
+	 * Set if activity and/or link is using an Inphi/Cortina CS4343 or
+	 * compatible phy that requires software assistance.  NULL if not used.
+	 */
+	bool link_status_active_low;  /** True if active link is active low */
+	bool error_status_active_low; /** True if error LED is active low */
+	bool error_active_low;	      /** True if error is active low */
+	bool rx_activity_active_low;  /** True if rx activity is active low */
+	bool tx_activity_active_low;  /** True if tx activity is active low */
+	/** Set true if LEDs are shared on an interface by all ports */
+	bool interface_leds;
+	int8_t rx_gpio_timer; /** GPIO clock generator timer [0-3] */
+	int8_t tx_gpio_timer; /** GPIO clock generator timer [0-3] */
+
+	/** True if LOS signal activates error LED */
+	bool los_generate_error;
+	/** True if the error LED is hooked up to a GPIO expander */
+	bool error_gpio_expander;
+	/** True if the link and RX activity LEDs are shared */
+	bool link_and_rx_activity_shared;
+	/** True if the link and TX activity LEDs are shared */
+	bool link_and_tx_activity_shared;
+	/** True if the RX activity and TX activity LEDs are shared */
+	bool rx_and_tx_activity_shared;
+	/** True if link is driven directly by the hardware */
+	bool link_led_hw_link;
+	bool error_lit;	    /** True if ERROR LED is lit */
+	bool quad_sfp_mode; /** True if using four SFPs for XLAUI */
+	/** User-defined function to update the link LED */
+	void (*update_link_led)(int xiface, int index, cvmx_helper_link_info_t result);
+	/** User-defined function to update the rx activity LED */
+	void (*update_rx_activity_led)(struct cvmx_phy_gpio_leds *led, int xiface, int index,
+				       bool check_time);
+};
+
+/** This structure contains the tap values to use for various cable lengths */
+struct cvmx_vsc7224_tap {
+	u16 len;      /** Starting cable length for tap values */
+	u16 main_tap; /** Main tap value to use */
+	u16 pre_tap;  /** Pre-tap value to use */
+	u16 post_tap; /** Post-tap value to use */
+};
+
+/** Data structure for Microsemi VSC7224 channel */
+struct cvmx_vsc7224_chan {
+	struct cvmx_vsc7224_chan *next, *prev; /** Used for linking */
+	int ipd_port;			       /** IPD port this channel belongs to */
+	int xiface;			       /** xinterface of SFP */
+	int index;			       /** Port index of SFP */
+	int lane;			       /** Lane on port */
+	int of_offset;			       /** Offset of channel info in dt */
+	bool is_tx;			       /** True if is transmit channel */
+	bool maintap_disable;		       /** True to disable the main tap */
+	bool pretap_disable;		       /** True to disable pre-tap */
+	bool posttap_disable;		       /** True to disable post-tap */
+	int num_taps;			       /** Number of tap values */
+	/** (Q)SFP attached to this channel */
+	struct cvmx_fdt_sfp_info *sfp_info;
+	struct cvmx_vsc7224 *vsc7224; /** Pointer to parent */
+	/** Tap values for various lengths, must be at the end */
+	struct cvmx_vsc7224_tap taps[0];
+};
+
+/** Data structure for Microsemi VSC7224 reclocking chip */
+struct cvmx_vsc7224 {
+	const char *name; /** Name */
+	/** Pointer to cannel data */
+	struct cvmx_vsc7224_chan *channel[4];
+	/** I2C bus device is connected to */
+	struct cvmx_fdt_i2c_bus_info *i2c_bus;
+	/** Address of VSC7224 on i2c bus */
+	int i2c_addr;
+	struct cvmx_fdt_gpio_info *los_gpio;   /** LoS GPIO pin */
+	struct cvmx_fdt_gpio_info *reset_gpio; /** Reset GPIO pin */
+	int of_offset;			       /** Offset in device tree */
+};
+
+/** Data structure for Avago AVSP5410 gearbox phy */
+struct cvmx_avsp5410 {
+	const char *name; /** Name */
+	/** I2C bus device is connected to */
+	struct cvmx_fdt_i2c_bus_info *i2c_bus;
+	/** Address of AVSP5410 on i2c bus */
+	int i2c_addr;
+	int of_offset;	    /** Offset in device tree */
+	int ipd_port;	    /** IPD port this phy belongs to */
+	int xiface;	    /** xinterface of SFP */
+	int index;	    /** Port index of SFP */
+	u64 prev_temp;	    /** Previous temparature recorded on Phy Core */
+	u64 prev_temp_mins; /** Mininutes when the prev temp check is done */
+	/** (Q)SFP attached to this phy */
+	struct cvmx_fdt_sfp_info *sfp_info;
+};
+
+struct cvmx_cs4343_info;
+
+/**
+ * @INTERNAL
+ *
+ * Data structure containing Inphi CS4343 slice information
+ */
+struct cvmx_cs4343_slice_info {
+	const char *name;	       /** Name of this slice in device tree */
+	struct cvmx_cs4343_info *mphy; /** Pointer to mphy cs4343 */
+	struct cvmx_phy_info *phy_info;
+	int of_offset;		      /** Offset in device tree */
+	int slice_no;		      /** Slice number */
+	int reg_offset;		      /** Offset for this slice */
+	u16 sr_stx_cmode_res;	      /** See Rainier device tree */
+	u16 sr_stx_drv_lower_cm;      /** See Rainier device tree */
+	u16 sr_stx_level;	      /** See Rainier device tree */
+	u16 sr_stx_pre_peak;	      /** See Rainier device tree */
+	u16 sr_stx_muxsubrate_sel;    /** See Rainier device tree */
+	u16 sr_stx_post_peak;	      /** See Rainier device tree */
+	u16 cx_stx_cmode_res;	      /** See Rainier device tree */
+	u16 cx_stx_drv_lower_cm;      /** See Rainier device tree */
+	u16 cx_stx_level;	      /** See Rainier device tree */
+	u16 cx_stx_pre_peak;	      /** See Rainier device tree */
+	u16 cx_stx_muxsubrate_sel;    /** See Rainier device tree */
+	u16 cx_stx_post_peak;	      /** See Rainier device tree */
+	u16 basex_stx_cmode_res;      /** See Rainier device tree */
+	u16 basex_stx_drv_lower_cm;   /** See Rainier device tree */
+	u16 basex_stx_level;	      /** See Rainier device tree */
+	u16 basex_stx_pre_peak;	      /** See Rainier device tree */
+	u16 basex_stx_muxsubrate_sel; /** See Rainier device tree */
+	u16 basex_stx_post_peak;      /** See Rainier device tree */
+	int link_gpio;		      /** Link LED gpio pin number, -1 if none */
+	int error_gpio;		      /** Error LED GPIO pin or -1 if none */
+	int los_gpio;		      /** LoS input GPIO or -1 if none */
+	bool los_inverted;	      /** True if LoS input is inverted */
+	bool link_inverted;	      /** True if link output is inverted */
+	bool error_inverted;	      /** True if error output is inverted */
+};
+
+/**
+ * @INTERNAL
+ *
+ * Data structure for Cortina/Inphi CS4343 device
+ */
+struct cvmx_cs4343_info {
+	const char *name; /** Name of Inphi/Cortina CS4343 in DT */
+	struct cvmx_phy_info *phy_info;
+	struct cvmx_cs4343_slice_info slice[4]; /** Slice information */
+	int of_offset;
+};
+
+/**
+ * @INTERNAL
+ * This data structure is used to hold PHY information and is subject to change.
+ * Please do  not use this data structure directly.
+ *
+ * NOTE: The U-Boot OCTEON Ethernet drivers depends on this data structure for
+ * the mux support.
+ */
+typedef struct cvmx_phy_info {
+	int phy_addr;	  /** MDIO address of PHY */
+	int phy_sub_addr; /** Sub-address (i.e. slice), used by Cortina */
+	int ipd_port;	  /** IPD port number for the PHY */
+	/** MDIO bus PHY connected to (even if behind mux) */
+	int mdio_unit;
+	int direct_connect;		 /** 1 if PHY is directly connected */
+	int gpio[CVMX_PHY_MUX_MAX_GPIO]; /** GPIOs used to control mux, -1 if not used */
+
+	/** Type of GPIO.  It can be a local OCTEON GPIO or a TWSI GPIO */
+	cvmx_phy_gpio_type_t gpio_type[CVMX_PHY_MUX_MAX_GPIO];
+
+	/** Address of TWSI GPIO */
+	int cvmx_gpio_twsi[CVMX_PHY_MUX_MAX_GPIO];
+
+	/** Value to put into the GPIO lines to select MDIO bus */
+	int gpio_value;
+	int gpio_parent_mux_twsi;	/** -1 if not used, parent TWSI mux for ebb6600 */
+	int gpio_parent_mux_select;	/** selector to use on parent TWSI mux */
+	cvmx_phy_type_t phy_type;	/** Type of PHY */
+	cvmx_phy_mux_type_t mux_type;	/** Type of MDIO mux */
+	int mux_twsi_addr;		/** Address of the MDIO mux */
+	cvmx_phy_host_mode_t host_mode; /** Used by Cortina PHY */
+	void *phydev;			/** Pointer to parent phy device */
+	int fdt_offset;			/** Node in flat device tree */
+	int phy_i2c_bus;		/** I2C bus for reclocking chips */
+	int phy_i2c_addr;		/** I2C address of reclocking chip */
+	int num_vsc7224;		/** Number of Microsemi VSC7224 devices */
+	struct cvmx_vsc7224 *vsc7224;	/** Info for VSC7224 devices */
+	/** SFP/QSFP descriptor */
+	struct cvmx_fdt_sfp_info *sfp_info;
+	/** CS4343 slice information for SGMII/XFI.  This is NULL in XLAUI mode */
+	struct cvmx_cs4343_slice_info *cs4343_slice_info;
+	/** CS4343 mphy information for XLAUI */
+	struct cvmx_cs4343_info *cs4343_info;
+	/** Pointer to function to return link information */
+	cvmx_helper_link_info_t (*link_function)(struct cvmx_phy_info *phy_info);
+	/**
+	 * If there are LEDs driven by GPIO lines instead of by a PHY device
+	 * then they are described here, otherwise gpio_leds should be NULL.
+	 */
+	struct cvmx_phy_gpio_leds *gpio_leds;
+} cvmx_phy_info_t;
+
+/* Fake IPD port, the RGMII/MII interface may use different PHY, use this
+   macro to return appropriate MIX address to read the PHY. */
+#define CVMX_HELPER_BOARD_MGMT_IPD_PORT -10
+
+/**
+ * Return the MII PHY address associated with the given IPD
+ * port. A result of -1 means there isn't a MII capable PHY
+ * connected to this port. On chips supporting multiple MII
+ * busses the bus number is encoded in bits <15:8>.
+ *
+ * This function must be modified for every new Octeon board.
+ * Internally it uses switch statements based on the cvmx_sysinfo
+ * data to determine board types and revisions. It relies on the
+ * fact that every Octeon board receives a unique board type
+ * enumeration from the bootloader.
+ *
+ * @param ipd_port Octeon IPD port to get the MII address for.
+ *
+ * @return MII PHY address and bus number or -1.
+ */
+int cvmx_helper_board_get_mii_address(int ipd_port);
+
+/**
+ * This function as a board specific method of changing the PHY
+ * speed, duplex, and autonegotiation. This programs the PHY and
+ * not Octeon. This can be used to force Octeon's links to
+ * specific settings.
+ *
+ * @param phy_addr  The address of the PHY to program
+ * @param link_flags
+ *                  Flags to control autonegotiation.  Bit 0 is autonegotiation
+ *                  enable/disable to maintain backward compatibility.
+ * @param link_info Link speed to program. If the speed is zero and autonegotiation
+ *                  is enabled, all possible negotiation speeds are advertised.
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_helper_board_link_set_phy(int phy_addr,
+				   cvmx_helper_board_set_phy_link_flags_types_t link_flags,
+				   cvmx_helper_link_info_t link_info);
+
+/**
+ * @INTERNAL
+ * This function is the board specific method of determining an
+ * ethernet ports link speed. Most Octeon boards have Marvell PHYs
+ * and are handled by the fall through case. This function must be
+ * updated for boards that don't have the normal Marvell PHYs.
+ *
+ * This function must be modified for every new Octeon board.
+ * Internally it uses switch statements based on the cvmx_sysinfo
+ * data to determine board types and revisions. It relies on the
+ * fact that every Octeon board receives a unique board type
+ * enumeration from the bootloader.
+ *
+ * @param ipd_port IPD input port associated with the port we want to get link
+ *                 status for.
+ *
+ * @return The ports link status. If the link isn't fully resolved, this must
+ *         return zero.
+ */
+cvmx_helper_link_info_t __cvmx_helper_board_link_get(int ipd_port);
+
+/**
+ * @INTERNAL
+ * This function is called by cvmx_helper_interface_probe() after it
+ * determines the number of ports Octeon can support on a specific
+ * interface. This function is the per board location to override
+ * this value. It is called with the number of ports Octeon might
+ * support and should return the number of actual ports on the
+ * board.
+ *
+ * This function must be modified for every new Octeon board.
+ * Internally it uses switch statements based on the cvmx_sysinfo
+ * data to determine board types and revisions. It relies on the
+ * fact that every Octeon board receives a unique board type
+ * enumeration from the bootloader.
+ *
+ * @param interface Interface to probe
+ * @param supported_ports
+ *                  Number of ports Octeon supports.
+ *
+ * @return Number of ports the actual board supports. Many times this will
+ *         simple be "support_ports".
+ */
+int __cvmx_helper_board_interface_probe(int interface, int supported_ports);
+
+/**
+ * @INTERNAL
+ * Enable packet input/output from the hardware. This function is
+ * called after by cvmx_helper_packet_hardware_enable() to
+ * perform board specific initialization. For most boards
+ * nothing is needed.
+ *
+ * @param interface Interface to enable
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_board_hardware_enable(int interface);
+
+/**
+ * @INTERNAL
+ * Gets the clock type used for the USB block based on board type.
+ * Used by the USB code for auto configuration of clock type.
+ *
+ * @return USB clock type enumeration
+ */
+cvmx_helper_board_usb_clock_types_t __cvmx_helper_board_usb_get_clock_type(void);
+
+/**
+ * @INTERNAL
+ * Adjusts the number of available USB ports on Octeon based on board
+ * specifics.
+ *
+ * @param supported_ports expected number of ports based on chip type;
+ *
+ *
+ * @return number of available usb ports, based on board specifics.
+ *         Return value is supported_ports if function does not
+ *         override.
+ */
+int __cvmx_helper_board_usb_get_num_ports(int supported_ports);
+
+/**
+ * @INTERNAL
+ * Returns if a port is present on an interface
+ *
+ * @param fdt_addr - address fo flat device tree
+ * @param ipd_port - IPD port number
+ *
+ * @return 1 if port is present, 0 if not present, -1 if error
+ */
+int __cvmx_helper_board_get_port_from_dt(void *fdt_addr, int ipd_port);
+
+/**
+ * Return the host mode for the PHY.  Currently only the Cortina CS4321 PHY
+ * needs this.
+ *
+ * @param ipd_port - ipd port number to get the host mode for
+ *
+ * @return host mode for phy
+ */
+cvmx_phy_host_mode_t cvmx_helper_board_get_phy_host_mode(int ipd_port);
+
+/**
+ * @INTERNAL
+ * This function outputs the cvmx_phy_info_t data structure for the specified
+ * port.
+ *
+ * @param[out] - phy_info - phy info data structure
+ * @param ipd_port - port to get phy info for
+ *
+ * @return 0 for success, -1 if info not available
+ *
+ * NOTE: The phy_info data structure is subject to change.
+ */
+int cvmx_helper_board_get_phy_info(cvmx_phy_info_t *phy_info, int ipd_port);
+
+/**
+ * @INTERNAL
+ * Parse the device tree and set whether a port is valid or not.
+ *
+ * @param fdt_addr	Pointer to device tree
+ *
+ * @return 0 for success, -1 on error.
+ */
+int __cvmx_helper_parse_bgx_dt(const void *fdt_addr);
+
+/**
+ * @INTERNAL
+ * Parse the device tree and set whether a port is valid or not.
+ *
+ * @param fdt_addr	Pointer to device tree
+ *
+ * @return 0 for success, -1 on error.
+ */
+int __cvmx_helper_parse_bgx_rgmii_dt(const void *fdt_addr);
+
+/**
+ * @INTERNAL
+ * Updates any GPIO link LEDs if present
+ *
+ * @param xiface	Interface number
+ * @param index		Port index
+ * @param result	Link status result
+ */
+void cvmx_helper_update_link_led(int xiface, int index, cvmx_helper_link_info_t result);
+/**
+ * Update the RX activity LED for the specified interface and port index
+ *
+ * @param xiface	Interface number
+ * @param index		Port index
+ * @parma check_time	True if we should bail out before the polling interval
+ */
+void cvmx_update_rx_activity_led(int xiface, int index, bool check_time);
+
+/**
+ * @INTERNAL
+ * Figure out which mod_abs changed function to use based on the phy type
+ *
+ * @param	xiface	xinterface number
+ * @param	index	port index on interface
+ *
+ * @return	0 for success, -1 on error
+ *
+ * This function figures out the proper mod_abs_changed function to use and
+ * registers the appropriate function.  This should be called after the device
+ * tree has been fully parsed for the given port as well as after all SFP
+ * slots and any Microsemi VSC7224 devices have been parsed in the device tree.
+ */
+int cvmx_helper_phy_register_mod_abs_changed(int xiface, int index);
+
+/**
+ * @INTERNAL
+ * Return loss of signal
+ *
+ * @param	xiface	xinterface number
+ * @param	index	port index on interface
+ *
+ * @return	0 if signal present, 1 if loss of signal.
+ *
+ * @NOTE:	A result of 0 is possible in some cases where the signal is
+ *		not present.
+ *
+ * This is for use with __cvmx_qlm_rx_equilization
+ */
+int __cvmx_helper_get_los(int xiface, int index);
+
+/**
+ * Given the address of the MDIO registers, output the CPU node and MDIO bus
+ *
+ * @param	addr	64-bit address of MDIO registers (from device tree)
+ * @param[out]	node	CPU node number (78xx)
+ * @param[out]	bus	MDIO bus number
+ */
+void __cvmx_mdio_addr_to_node_bus(u64 addr, int *node, int *bus);
+
+/**
+ * Turn on the error LED
+ *
+ * @param	leds	LEDs belonging to port
+ * @param	error	true to turn on LED, false to turn off
+ */
+void cvmx_helper_leds_show_error(struct cvmx_phy_gpio_leds *leds, bool error);
+
+#endif /* __CVMX_HELPER_BOARD_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-cfg.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-cfg.h
new file mode 100644
index 0000000..d4bd910
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-cfg.h
@@ -0,0 +1,884 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper Functions for the Configuration Framework
+ *
+ * OCTEON_CN68XX introduces a flexible hw interface configuration
+ * scheme. To cope with this change and the requirements of
+ * configurability for other system resources, e.g., IPD/PIP pknd and
+ * PKO ports and queues, a configuration framework for the SDK is
+ * designed. It has two goals: first to recognize and establish the
+ * default configuration and, second, to allow the user to define key
+ * parameters in a high-level language.
+ *
+ * The helper functions query the QLM setup to help achieving the
+ * first goal.
+ *
+ * The second goal is accomplished by generating
+ * cvmx_helper_cfg_init() from a high-level lanaguage.
+ */
+
+#ifndef __CVMX_HELPER_CFG_H__
+#define __CVMX_HELPER_CFG_H__
+
+#include "cvmx-helper-util.h"
+
+#define CVMX_HELPER_CFG_MAX_PKO_PORT	   128
+#define CVMX_HELPER_CFG_MAX_PIP_BPID	   64
+#define CVMX_HELPER_CFG_MAX_PIP_PKND	   64
+#define CVMX_HELPER_CFG_MAX_PKO_QUEUES	   256
+#define CVMX_HELPER_CFG_MAX_PORT_PER_IFACE 256
+
+#define CVMX_HELPER_CFG_INVALID_VALUE -1
+
+#define cvmx_helper_cfg_assert(cond)                                                               \
+	do {                                                                                       \
+		if (!(cond)) {                                                                     \
+			debug("cvmx_helper_cfg_assert (%s) at %s:%d\n", #cond, __FILE__,           \
+			      __LINE__);                                                           \
+		}                                                                                  \
+	} while (0)
+
+extern int cvmx_npi_max_pknds;
+
+/*
+ * Config Options
+ *
+ * These options have to be set via cvmx_helper_cfg_opt_set() before calling the
+ * routines that set up the hw. These routines process the options and set them
+ * correctly to take effect at runtime.
+ */
+enum cvmx_helper_cfg_option {
+	CVMX_HELPER_CFG_OPT_USE_DWB, /*
+					 * Global option to control if
+					 * the SDK configures units (DMA,
+					 * SSO, and PKO) to send don't
+					 * write back (DWB) requests for
+					 * freed buffers. Set to 1/0 to
+					 * enable/disable DWB.
+					 *
+					 * For programs that fit inside
+					 * L2, sending DWB just causes
+					 * more L2 operations without
+					 * benefit.
+					 */
+
+	CVMX_HELPER_CFG_OPT_MAX
+};
+
+typedef enum cvmx_helper_cfg_option cvmx_helper_cfg_option_t;
+
+struct cvmx_phy_info;
+struct cvmx_fdt_sfp_info;
+struct cvmx_vsc7224_chan;
+struct phy_device;
+
+struct cvmx_srio_port_param {
+	/** True to override SRIO CTLE zero setting */
+	bool srio_rx_ctle_zero_override : 1;
+	/** Equalization peaking control dft: 6 */
+	u8 srio_rx_ctle_zero : 4;
+	/** Set true to override CTLE taps */
+	bool srio_rx_ctle_agc_override : 1;
+	u8 srio_rx_agc_pre_ctle : 4;	    /** AGC pre-CTLE gain */
+	u8 srio_rx_agc_post_ctle : 4;	    /** AGC post-CTLE gain */
+	bool srio_tx_swing_override : 1;    /** True to override TX Swing */
+	u8 srio_tx_swing : 5;		    /** TX Swing */
+	bool srio_tx_gain_override : 1;	    /** True to override TX gain */
+	u8 srio_tx_gain : 3;		    /** TX gain */
+	bool srio_tx_premptap_override : 1; /** True to override premptap values */
+	u8 srio_tx_premptap_pre : 4;	    /** Pre premptap value */
+	u8 srio_tx_premptap_post : 5;	    /** Post premptap value */
+	bool srio_tx_vboost_override : 1;   /** True to override TX vboost setting */
+	bool srio_tx_vboost : 1;	    /** vboost setting (default 1) */
+};
+
+/*
+ * Per physical port
+ * Note: This struct is passed between linux and SE apps.
+ */
+struct cvmx_cfg_port_param {
+	int port_fdt_node;		/** Node offset in FDT of node */
+	int phy_fdt_node;		/** Node offset in FDT of PHY */
+	struct cvmx_phy_info *phy_info; /** Data structure with PHY information */
+	int8_t ccpp_pknd;
+	int8_t ccpp_bpid;
+	int8_t ccpp_pko_port_base;
+	int8_t ccpp_pko_num_ports;
+	u8 agl_rx_clk_skew;		  /** AGL rx clock skew setting (default 0) */
+	u8 rgmii_tx_clk_delay;		  /** RGMII TX clock delay value if not bypassed */
+	bool valid : 1;			  /** 1 = port valid, 0 = invalid */
+	bool sgmii_phy_mode : 1;	  /** 1 = port in PHY mode, 0 = MAC mode */
+	bool sgmii_1000x_mode : 1;	  /** 1 = 1000Base-X mode, 0 = SGMII mode */
+	bool agl_rx_clk_delay_bypass : 1; /** 1 = use rx clock delay bypass for AGL mode */
+	bool force_link_up : 1;		  /** Ignore PHY and always report link up */
+	bool disable_an : 1;		  /** true to disable autonegotiation */
+	bool link_down_pwr_dn : 1;	  /** Power PCS off when link is down */
+	bool phy_present : 1;		  /** true if PHY is present */
+	bool tx_clk_delay_bypass : 1;	  /** True to bypass the TX clock delay */
+	bool enable_fec : 1;		  /** True to enable FEC for 10/40G links */
+	/** Settings for short-run SRIO host */
+	struct cvmx_srio_port_param srio_short;
+	/** Settings for long-run SRIO host */
+	struct cvmx_srio_port_param srio_long;
+	u8 agl_refclk_sel; /** RGMII refclk select to use */
+	/** Set if local (non-PHY) LEDs are used */
+	struct cvmx_phy_gpio_leds *gpio_leds;
+	struct cvmx_fdt_sfp_info *sfp_info; /** SFP+/QSFP info for port */
+	/** Offset of SFP/SFP+/QSFP slot in device tree */
+	int sfp_of_offset;
+	/** Microsemi VSC7224 channel info data structure */
+	struct cvmx_vsc7224_chan *vsc7224_chan;
+	/** Avago AVSP-5410 Phy */
+	struct cvmx_avsp5410 *avsp5410;
+	struct phy_device *phydev;
+};
+
+/*
+ * Per pko_port
+ */
+struct cvmx_cfg_pko_port_param {
+	s16 ccppp_queue_base;
+	s16 ccppp_num_queues;
+};
+
+/*
+ * A map from pko_port to
+ *     interface,
+ *     index, and
+ *     pko engine id
+ */
+struct cvmx_cfg_pko_port_map {
+	s16 ccppl_interface;
+	s16 ccppl_index;
+	s16 ccppl_eid;
+};
+
+/*
+ * This is for looking up pko_base_port and pko_nport for ipd_port
+ */
+struct cvmx_cfg_pko_port_pair {
+	int8_t ccppp_base_port;
+	int8_t ccppp_nports;
+};
+
+typedef union cvmx_user_static_pko_queue_config {
+	struct {
+		struct pko_queues_cfg {
+			unsigned queues_per_port : 11, qos_enable : 1, pfc_enable : 1;
+		} pko_cfg_iface[6];
+		struct pko_queues_cfg pko_cfg_loop;
+		struct pko_queues_cfg pko_cfg_npi;
+	} pknd;
+	struct {
+		u8 pko_ports_per_interface[5];
+		u8 pko_queues_per_port_interface[5];
+		u8 pko_queues_per_port_loop;
+		u8 pko_queues_per_port_pci;
+		u8 pko_queues_per_port_srio[4];
+	} non_pknd;
+} cvmx_user_static_pko_queue_config_t;
+
+extern cvmx_user_static_pko_queue_config_t __cvmx_pko_queue_static_config[CVMX_MAX_NODES];
+extern struct cvmx_cfg_pko_port_map cvmx_cfg_pko_port_map[CVMX_HELPER_CFG_MAX_PKO_PORT];
+extern struct cvmx_cfg_port_param cvmx_cfg_port[CVMX_MAX_NODES][CVMX_HELPER_MAX_IFACE]
+					       [CVMX_HELPER_CFG_MAX_PORT_PER_IFACE];
+extern struct cvmx_cfg_pko_port_param cvmx_pko_queue_table[];
+extern int cvmx_enable_helper_flag;
+
+/*
+ * @INTERNAL
+ * Return configured pknd for the port
+ *
+ * @param interface the interface number
+ * @param index the port's index number
+ * @return the pknd
+ */
+int __cvmx_helper_cfg_pknd(int interface, int index);
+
+/*
+ * @INTERNAL
+ * Return the configured bpid for the port
+ *
+ * @param interface the interface number
+ * @param index the port's index number
+ * @return the bpid
+ */
+int __cvmx_helper_cfg_bpid(int interface, int index);
+
+/**
+ * @INTERNAL
+ * Return the configured pko_port base for the port
+ *
+ * @param interface the interface number
+ * @param index the port's index number
+ * @return the pko_port base
+ */
+int __cvmx_helper_cfg_pko_port_base(int interface, int index);
+
+/*
+ * @INTERNAL
+ * Return the configured number of pko_ports for the port
+ *
+ * @param interface the interface number
+ * @param index the port's index number
+ * @return the number of pko_ports
+ */
+int __cvmx_helper_cfg_pko_port_num(int interface, int index);
+
+/*
+ * @INTERNAL
+ * Return the configured pko_queue base for the pko_port
+ *
+ * @param pko_port
+ * @return the pko_queue base
+ */
+int __cvmx_helper_cfg_pko_queue_base(int pko_port);
+
+/*
+ * @INTERNAL
+ * Return the configured number of pko_queues for the pko_port
+ *
+ * @param pko_port
+ * @return the number of pko_queues
+ */
+int __cvmx_helper_cfg_pko_queue_num(int pko_port);
+
+/*
+ * @INTERNAL
+ * Return the interface the pko_port is configured for
+ *
+ * @param pko_port
+ * @return the interface for the pko_port
+ */
+int __cvmx_helper_cfg_pko_port_interface(int pko_port);
+
+/*
+ * @INTERNAL
+ * Return the index of the port the pko_port is configured for
+ *
+ * @param pko_port
+ * @return the index of the port
+ */
+int __cvmx_helper_cfg_pko_port_index(int pko_port);
+
+/*
+ * @INTERNAL
+ * Return the pko_eid of the pko_port
+ *
+ * @param pko_port
+ * @return the pko_eid
+ */
+int __cvmx_helper_cfg_pko_port_eid(int pko_port);
+
+/*
+ * @INTERNAL
+ * Return the max# of pko queues allocated.
+ *
+ * @return the max# of pko queues
+ *
+ * Note: there might be holes in the queue space depending on user
+ * configuration. The function returns the highest queue's index in
+ * use.
+ */
+int __cvmx_helper_cfg_pko_max_queue(void);
+
+/*
+ * @INTERNAL
+ * Return the max# of PKO DMA engines allocated.
+ *
+ * @return the max# of DMA engines
+ *
+ * NOTE: the DMA engines are allocated contiguously and starting from
+ * 0.
+ */
+int __cvmx_helper_cfg_pko_max_engine(void);
+
+/*
+ * Get the value set for the config option ``opt''.
+ *
+ * @param opt is the config option.
+ * @return the value set for the option
+ *
+ * LR: only used for DWB in NPI, POW, PKO1
+ */
+u64 cvmx_helper_cfg_opt_get(cvmx_helper_cfg_option_t opt);
+
+/*
+ * Set the value for a config option.
+ *
+ * @param opt is the config option.
+ * @param val is the value to set for the opt.
+ * @return 0 for success and -1 on error
+ *
+ * Note an option here is a config-time parameter and this means that
+ * it has to be set before calling the corresponding setup functions
+ * that actually sets the option in hw.
+ *
+ * LR: Not used.
+ */
+int cvmx_helper_cfg_opt_set(cvmx_helper_cfg_option_t opt, u64 val);
+
+/*
+ * Retrieve the pko_port base given ipd_port.
+ *
+ * @param ipd_port is the IPD eport
+ * @return the corresponding PKO port base for the physical port
+ * represented by the IPD eport or CVMX_HELPER_CFG_INVALID_VALUE.
+ */
+int cvmx_helper_cfg_ipd2pko_port_base(int ipd_port);
+
+/*
+ * Retrieve the number of pko_ports given ipd_port.
+ *
+ * @param ipd_port is the IPD eport
+ * @return the corresponding number of PKO ports for the physical port
+ *  represented by IPD eport or CVMX_HELPER_CFG_INVALID_VALUE.
+ */
+int cvmx_helper_cfg_ipd2pko_port_num(int ipd_port);
+
+/*
+ * @INTERNAL
+ * The init function
+ *
+ * @param node
+ * @return 0 for success.
+ *
+ * Note: this function is meant to be called to set the ``configured
+ * parameters,'' e.g., pknd, bpid, etc. and therefore should be before
+ * any of the corresponding cvmx_helper_cfg_xxxx() functions are
+ * called.
+ */
+int __cvmx_helper_init_port_config_data(int node);
+
+/*
+ * @INTERNAL
+ * The local init function
+ *
+ * @param none
+ * @return 0 for success.
+ *
+ * Note: this function is meant to be called to set the ``configured
+ * parameters locally,'' e.g., pknd, bpid, etc. and therefore should be before
+ * any of the corresponding cvmx_helper_cfg_xxxx() functions are
+ * called.
+ */
+int __cvmx_helper_init_port_config_data_local(void);
+
+/*
+ * Set the frame max size and jabber size to 65535.
+ *
+ */
+void cvmx_helper_cfg_set_jabber_and_frame_max(void);
+
+/*
+ * Enable storing short packets only in the WQE.
+ */
+void cvmx_helper_cfg_store_short_packets_in_wqe(void);
+
+/*
+ * Allocated a block of internal ports and queues for the specified
+ * interface/port
+ *
+ * @param  interface  the interface for which the internal ports and queues
+ *                    are requested
+ * @param  port       the index of the port within in the interface for which
+		      the internal ports and queues are requested.
+ * @param  pot_count  the number of internal ports requested
+ * @param  queue_cnt  the number of queues requested for each of the internal
+ *                    port. This call will allocate a total of
+ *		      (port_cnt * queue_cnt) queues
+ *
+ * @return  0 on success
+ *         -1 on failure
+ *
+ * LR: Called ONLY from comfig-parse!
+ */
+int cvmx_pko_alloc_iport_and_queues(int interface, int port, int port_cnt, int queue_cnt);
+
+/*
+ * Free the queues that are associated with the specified port
+ *
+ * @param  port   the internal port for which the queues are freed.
+ *
+ * @return  0 on success
+ *         -1 on failure
+ */
+int cvmx_pko_queue_free(u64 port);
+
+/*
+ * Initializes the pko queue range data structure.
+ * @return  0 on success
+ *         -1 on failure
+ */
+int init_cvmx_pko_que_range(void);
+
+/*
+ * Frees up all the allocated ques.
+ */
+void cvmx_pko_queue_free_all(void);
+
+/**
+ * Returns if port is valid for a given interface
+ *
+ * @param xiface     interface to check
+ * @param index      port index in the interface
+ *
+ * @return status of the port present or not.
+ */
+int cvmx_helper_is_port_valid(int xiface, int index);
+
+/**
+ * Set whether or not a port is valid
+ *
+ * @param interface interface to set
+ * @param index     port index to set
+ * @param valid     set 0 to make port invalid, 1 for valid
+ */
+void cvmx_helper_set_port_valid(int interface, int index, bool valid);
+
+/**
+ * @INTERNAL
+ * Return if port is in PHY mode
+ *
+ * @param interface the interface number
+ * @param index the port's index number
+ *
+ * @return 1 if port is in PHY mode, 0 if port is in MAC mode
+ */
+bool cvmx_helper_get_mac_phy_mode(int interface, int index);
+void cvmx_helper_set_mac_phy_mode(int interface, int index, bool valid);
+
+/**
+ * @INTERNAL
+ * Return if port is in 1000Base X mode
+ *
+ * @param interface the interface number
+ * @param index the port's index number
+ *
+ * @return 1 if port is in 1000Base X mode, 0 if port is in SGMII mode
+ */
+bool cvmx_helper_get_1000x_mode(int interface, int index);
+void cvmx_helper_set_1000x_mode(int interface, int index, bool valid);
+
+/**
+ * @INTERNAL
+ * Return if an AGL port should bypass the RX clock delay
+ *
+ * @param interface the interface number
+ * @param index the port's index number
+ */
+bool cvmx_helper_get_agl_rx_clock_delay_bypass(int interface, int index);
+void cvmx_helper_set_agl_rx_clock_delay_bypass(int interface, int index, bool valid);
+
+/**
+ * @INTERNAL
+ * Forces a link to always return that it is up ignoring the PHY (if present)
+ *
+ * @param interface the interface number
+ * @param index the port's index
+ */
+bool cvmx_helper_get_port_force_link_up(int interface, int index);
+void cvmx_helper_set_port_force_link_up(int interface, int index, bool value);
+
+/**
+ * @INTERNAL
+ * Return true if PHY is present to the passed xiface
+ *
+ * @param xiface the interface number
+ * @param index the port's index
+ */
+bool cvmx_helper_get_port_phy_present(int xiface, int index);
+void cvmx_helper_set_port_phy_present(int xiface, int index, bool value);
+
+/**
+ * @INTERNAL
+ * Return the AGL port rx clock skew, only used
+ * if agl_rx_clock_delay_bypass is set.
+ *
+ * @param interface the interface number
+ * @param index the port's index number
+ */
+u8 cvmx_helper_get_agl_rx_clock_skew(int interface, int index);
+void cvmx_helper_set_agl_rx_clock_skew(int interface, int index, u8 value);
+u8 cvmx_helper_get_agl_refclk_sel(int interface, int index);
+void cvmx_helper_set_agl_refclk_sel(int interface, int index, u8 value);
+
+/**
+ * @INTERNAL
+ * Store the FDT node offset in the device tree of a port
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param node_offset	node offset to store
+ */
+void cvmx_helper_set_port_fdt_node_offset(int xiface, int index, int node_offset);
+
+/**
+ * @INTERNAL
+ * Return the FDT node offset in the device tree of a port
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @return		node offset of port or -1 if invalid
+ */
+int cvmx_helper_get_port_fdt_node_offset(int xiface, int index);
+
+/**
+ * @INTERNAL
+ * Store the FDT node offset in the device tree of a phy
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param node_offset	node offset to store
+ */
+void cvmx_helper_set_phy_fdt_node_offset(int xiface, int index, int node_offset);
+
+/**
+ * @INTERNAL
+ * Return the FDT node offset in the device tree of a phy
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @return		node offset of phy or -1 if invalid
+ */
+int cvmx_helper_get_phy_fdt_node_offset(int xiface, int index);
+
+/**
+ * @INTERNAL
+ * Override default autonegotiation for a port
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param enable	true to enable autonegotiation, false to force full
+ *			duplex, full speed.
+ */
+void cvmx_helper_set_port_autonegotiation(int xiface, int index, bool enable);
+
+/**
+ * @INTERNAL
+ * Returns if autonegotiation is enabled or not.
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return 0 if autonegotiation is disabled, 1 if enabled.
+ */
+bool cvmx_helper_get_port_autonegotiation(int xiface, int index);
+
+/**
+ * @INTERNAL
+ * Returns if forward error correction is enabled or not.
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return 0 if fec is disabled, 1 if enabled.
+ */
+bool cvmx_helper_get_port_fec(int xiface, int index);
+
+/**
+ * @INTERNAL
+ * Override default forward error correction for a port
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param enable	true to enable fec, false to disable.
+ */
+void cvmx_helper_set_port_fec(int xiface, int index, bool enable);
+
+/**
+ * @INTERNAL
+ * Configure the SRIO RX interface AGC settings in host mode
+ *
+ * @param xiface	node and interface
+ * @param index		lane
+ * @param long_run	true for long run, false for short run
+ * @param agc_override	true to put AGC in manual mode
+ * @param ctle_zero	RX equalizer peaking control (default 0x6)
+ * @param agc_pre_ctle	AGC pre-CTLE gain (default 0x5)
+ * @param agc_post_ctle	AGC post-CTLE gain (default 0x4)
+ *
+ * NOTE: This must be called before SRIO is initialized to take effect
+ */
+void cvmx_helper_set_srio_rx(int xiface, int index, bool long_run, bool ctle_zero_override,
+			     u8 ctle_zero, bool agc_override, u8 agc_pre_ctle, u8 agc_post_ctle);
+
+/**
+ * @INTERNAL
+ * Get the SRIO RX interface AGC settings for host mode
+ *
+ * @param xiface	node and interface
+ * @param index		lane
+ * @param long_run	true for long run, false for short run
+ * @param[out] ctle_zero_override true if overridden
+ * @param[out] ctle_zero	RX equalizer peaking control (default 0x6)
+ * @param[out] agc_override	true to put AGC in manual mode
+ * @param[out] agc_pre_ctle	AGC pre-CTLE gain (default 0x5)
+ * @param[out] agc_post_ctle	AGC post-CTLE gain (default 0x4)
+ */
+void cvmx_helper_get_srio_rx(int xiface, int index, bool long_run, bool *ctle_zero_override,
+			     u8 *ctle_zero, bool *agc_override, u8 *agc_pre_ctle,
+			     u8 *agc_post_ctle);
+
+/**
+ * @INTERNAL
+ * Configure the SRIO TX interface for host mode
+ *
+ * @param xiface		node and interface
+ * @param index			lane
+ * @param long_run	true for long run, false for short run
+ * @param tx_swing		tx swing value to use (default 0x7), -1 to not
+ *				override.
+ * @param tx_gain		PCS SDS TX gain (default 0x3), -1 to not
+ *				override
+ * @param tx_premptap_override	true to override preemphasis control
+ * @param tx_premptap_pre	preemphasis pre tap value (default 0x0)
+ * @param tx_premptap_post	preemphasis post tap value (default 0xF)
+ * @param tx_vboost		vboost enable (1 = enable, -1 = don't override)
+ *				hardware default is 1.
+ *
+ * NOTE: This must be called before SRIO is initialized to take effect
+ */
+void cvmx_helper_set_srio_tx(int xiface, int index, bool long_run, int tx_swing, int tx_gain,
+			     bool tx_premptap_override, u8 tx_premptap_pre, u8 tx_premptap_post,
+			     int tx_vboost);
+
+/**
+ * @INTERNAL
+ * Get the SRIO TX interface settings for host mode
+ *
+ * @param xiface			node and interface
+ * @param index				lane
+ * @param long_run			true for long run, false for short run
+ * @param[out] tx_swing_override	true to override pcs_sds_txX_swing
+ * @param[out] tx_swing			tx swing value to use (default 0x7)
+ * @param[out] tx_gain_override		true to override default gain
+ * @param[out] tx_gain			PCS SDS TX gain (default 0x3)
+ * @param[out] tx_premptap_override	true to override preemphasis control
+ * @param[out] tx_premptap_pre		preemphasis pre tap value (default 0x0)
+ * @param[out] tx_premptap_post		preemphasis post tap value (default 0xF)
+ * @param[out] tx_vboost_override	override vboost setting
+ * @param[out] tx_vboost		vboost enable (default true)
+ */
+void cvmx_helper_get_srio_tx(int xiface, int index, bool long_run, bool *tx_swing_override,
+			     u8 *tx_swing, bool *tx_gain_override, u8 *tx_gain,
+			     bool *tx_premptap_override, u8 *tx_premptap_pre, u8 *tx_premptap_post,
+			     bool *tx_vboost_override, bool *tx_vboost);
+
+/**
+ * @INTERNAL
+ * Sets the PHY info data structure
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param[in] phy_info	phy information data structure pointer
+ */
+void cvmx_helper_set_port_phy_info(int xiface, int index, struct cvmx_phy_info *phy_info);
+/**
+ * @INTERNAL
+ * Returns the PHY information data structure for a port
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return pointer to PHY information data structure or NULL if not set
+ */
+struct cvmx_phy_info *cvmx_helper_get_port_phy_info(int xiface, int index);
+
+/**
+ * @INTERNAL
+ * Returns a pointer to the PHY LED configuration (if local GPIOs drive them)
+ *
+ * @param xiface	node and interface
+ * @param index		portindex
+ *
+ * @return pointer to the PHY LED information data structure or NULL if not
+ *	   present
+ */
+struct cvmx_phy_gpio_leds *cvmx_helper_get_port_phy_leds(int xiface, int index);
+
+/**
+ * @INTERNAL
+ * Sets a pointer to the PHY LED configuration (if local GPIOs drive them)
+ *
+ * @param xiface	node and interface
+ * @param index		portindex
+ * @param leds		pointer to led data structure
+ */
+void cvmx_helper_set_port_phy_leds(int xiface, int index, struct cvmx_phy_gpio_leds *leds);
+
+/**
+ * @INTERNAL
+ * Disables RGMII TX clock bypass and sets delay value
+ *
+ * @param xiface	node and interface
+ * @param index		portindex
+ * @param bypass	Set true to enable the clock bypass and false
+ *			to sync clock and data synchronously.
+ *			Default is false.
+ * @param clk_delay	Delay value to skew TXC from TXD
+ */
+void cvmx_helper_cfg_set_rgmii_tx_clk_delay(int xiface, int index, bool bypass, int clk_delay);
+
+/**
+ * @INTERNAL
+ * Gets RGMII TX clock bypass and delay value
+ *
+ * @param xiface	node and interface
+ * @param index		portindex
+ * @param bypass	Set true to enable the clock bypass and false
+ *			to sync clock and data synchronously.
+ *			Default is false.
+ * @param clk_delay	Delay value to skew TXC from TXD, default is 0.
+ */
+void cvmx_helper_cfg_get_rgmii_tx_clk_delay(int xiface, int index, bool *bypass, int *clk_delay);
+
+/**
+ * @INTERNAL
+ * Retrieve node-specific PKO Queue configuration.
+ *
+ * @param node		OCTEON3 node.
+ * @param pkocfg	PKO Queue static configuration.
+ */
+int cvmx_helper_pko_queue_config_get(int node, cvmx_user_static_pko_queue_config_t *cfg);
+
+/**
+ * @INTERNAL
+ * Update node-specific PKO Queue configuration.
+ *
+ * @param node		OCTEON3 node.
+ * @param pkocfg	PKO Queue static configuration.
+ */
+int cvmx_helper_pko_queue_config_set(int node, cvmx_user_static_pko_queue_config_t *cfg);
+
+/**
+ * @INTERNAL
+ * Retrieve the SFP node offset in the device tree
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return offset in device tree or -1 if error or not defined.
+ */
+int cvmx_helper_cfg_get_sfp_fdt_offset(int xiface, int index);
+
+/**
+ * Search for a port based on its FDT node offset
+ *
+ * @param	of_offset	Node offset of port to search for
+ *
+ * @return	ipd_port or -1 if not found
+ */
+int cvmx_helper_cfg_get_ipd_port_by_fdt_node_offset(int of_offset);
+
+/**
+ * @INTERNAL
+ * Sets the SFP node offset
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ * @param sfp_of_offset	Offset of SFP node in device tree
+ */
+void cvmx_helper_cfg_set_sfp_fdt_offset(int xiface, int index, int sfp_of_offset);
+
+/**
+ * Search for a port based on its FDT node offset
+ *
+ * @param	of_offset	Node offset of port to search for
+ * @param[out]	xiface		xinterface of match
+ * @param[out]	index		port index of match
+ *
+ * @return	0 if found, -1 if not found
+ */
+int cvmx_helper_cfg_get_xiface_index_by_fdt_node_offset(int of_offset, int *xiface, int *index);
+
+/**
+ * Get data structure defining the Microsemi VSC7224 channel info
+ * or NULL if not present
+ *
+ * @param xiface	node and interface
+ * @param index		port index
+ *
+ * @return pointer to vsc7224 data structure or NULL if not present
+ */
+struct cvmx_vsc7224_chan *cvmx_helper_cfg_get_vsc7224_chan_info(int xiface, int index);
+
+/**
+ * Sets the Microsemi VSC7224 channel data structure
+ *
+ * @param	xiface	node and interface
+ * @param	index	port index
+ * @param[in]	vsc7224_info	Microsemi VSC7224 data structure
+ */
+void cvmx_helper_cfg_set_vsc7224_chan_info(int xiface, int index,
+					   struct cvmx_vsc7224_chan *vsc7224_chan_info);
+
+/**
+ * Get data structure defining the Avago AVSP5410 phy info
+ * or NULL if not present
+ *
+ * @param xiface        node and interface
+ * @param index         port index
+ *
+ * @return pointer to avsp5410 data structure or NULL if not present
+ */
+struct cvmx_avsp5410 *cvmx_helper_cfg_get_avsp5410_info(int xiface, int index);
+
+/**
+ * Sets the Avago AVSP5410 phy info data structure
+ *
+ * @param       xiface  node and interface
+ * @param       index   port index
+ * @param[in]   avsp5410_info   Avago AVSP5410 data structure
+ */
+void cvmx_helper_cfg_set_avsp5410_info(int xiface, int index, struct cvmx_avsp5410 *avsp5410_info);
+
+/**
+ * Gets the SFP data associated with a port
+ *
+ * @param	xiface	node and interface
+ * @param	index	port index
+ *
+ * @return	pointer to SFP data structure or NULL if none
+ */
+struct cvmx_fdt_sfp_info *cvmx_helper_cfg_get_sfp_info(int xiface, int index);
+
+/**
+ * Sets the SFP data associated with a port
+ *
+ * @param	xiface		node and interface
+ * @param	index		port index
+ * @param[in]	sfp_info	port SFP data or NULL for none
+ */
+void cvmx_helper_cfg_set_sfp_info(int xiface, int index, struct cvmx_fdt_sfp_info *sfp_info);
+
+/*
+ * Initializes cvmx with user specified config info.
+ */
+int cvmx_user_static_config(void);
+void cvmx_pko_queue_show(void);
+int cvmx_fpa_pool_init_from_cvmx_config(void);
+int __cvmx_helper_init_port_valid(void);
+
+/**
+ * Returns a pointer to the phy device associated with a port
+ *
+ * @param	xiface		node and interface
+ * @param	index		port index
+ *
+ * return	pointer to phy device or NULL if none
+ */
+struct phy_device *cvmx_helper_cfg_get_phy_device(int xiface, int index);
+
+/**
+ * Sets the phy device associated with a port
+ *
+ * @param	xiface		node and interface
+ * @param	index		port index
+ * @param[in]	phydev		phy device to assiciate
+ */
+void cvmx_helper_cfg_set_phy_device(int xiface, int index, struct phy_device *phydev);
+
+#endif /* __CVMX_HELPER_CFG_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-errata.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-errata.h
new file mode 100644
index 0000000..9ed13c1
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-errata.h
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Fixes and workaround for Octeon chip errata. This file
+ * contains functions called by cvmx-helper to workaround known
+ * chip errata. For the most part, code doesn't need to call
+ * these functions directly.
+ */
+
+#ifndef __CVMX_HELPER_ERRATA_H__
+#define __CVMX_HELPER_ERRATA_H__
+
+#include "cvmx-wqe.h"
+
+/**
+ * @INTERNAL
+ * Function to adjust internal IPD pointer alignments
+ *
+ * @return 0 on success
+ *         !0 on failure
+ */
+int __cvmx_helper_errata_fix_ipd_ptr_alignment(void);
+
+/**
+ * This function needs to be called on all Octeon chips with
+ * errata PKI-100.
+ *
+ * The Size field is 8 too large in WQE and next pointers
+ *
+ *  The Size field generated by IPD is 8 larger than it should
+ *  be. The Size field is <55:40> of both:
+ *      - WORD3 in the work queue entry, and
+ *      - the next buffer pointer (which precedes the packet data
+ *        in each buffer).
+ *
+ * @param work   Work queue entry to fix
+ * @return Zero on success. Negative on failure
+ */
+int cvmx_helper_fix_ipd_packet_chain(cvmx_wqe_t *work);
+
+/**
+ * Due to errata G-720, the 2nd order CDR circuit on CN52XX pass
+ * 1 doesn't work properly. The following code disables 2nd order
+ * CDR for the specified QLM.
+ *
+ * @param qlm    QLM to disable 2nd order CDR for.
+ */
+void __cvmx_helper_errata_qlm_disable_2nd_order_cdr(int qlm);
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-fdt.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-fdt.h
new file mode 100644
index 0000000..d3809ae
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-fdt.h
@@ -0,0 +1,568 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * FDT Helper functions similar to those provided to U-Boot.
+ * If compiled for U-Boot, just provide wrappers to the equivalent U-Boot
+ * functions.
+ */
+
+#ifndef __CVMX_HELPER_FDT_H__
+#define __CVMX_HELPER_FDT_H__
+
+#include <fdt_support.h>
+#include <fdtdec.h>
+#include <time.h>
+#include <asm/global_data.h>
+#include <linux/libfdt.h>
+
+#include <mach/cvmx-helper-sfp.h>
+
+enum cvmx_i2c_bus_type {
+	CVMX_I2C_BUS_OCTEON,
+	CVMX_I2C_MUX_PCA9540,
+	CVMX_I2C_MUX_PCA9542,
+	CVMX_I2C_MUX_PCA9543,
+	CVMX_I2C_MUX_PCA9544,
+	CVMX_I2C_MUX_PCA9545,
+	CVMX_I2C_MUX_PCA9546,
+	CVMX_I2C_MUX_PCA9547,
+	CVMX_I2C_MUX_PCA9548,
+	CVMX_I2C_MUX_OTHER
+};
+
+struct cvmx_sfp_mod_info; /** Defined in cvmx-helper-sfp.h */
+struct cvmx_phy_info;	  /** Defined in cvmx-helper-board.h */
+
+/**
+ * This data structure holds information about various I2C muxes and switches
+ * that may be between a device and the Octeon chip.
+ */
+struct cvmx_fdt_i2c_bus_info {
+	/** Parent I2C bus, NULL if root */
+	struct cvmx_fdt_i2c_bus_info *parent;
+	/** Child I2C bus or NULL if last entry in the chain */
+	struct cvmx_fdt_i2c_bus_info *child;
+	/** Offset in device tree */
+	int of_offset;
+	/** Type of i2c bus or mux */
+	enum cvmx_i2c_bus_type type;
+	/** I2C address of mux */
+	u8 i2c_addr;
+	/** Mux channel number */
+	u8 channel;
+	/** For muxes, the bit(s) to set to enable them */
+	u8 enable_bit;
+	/** True if mux, false if switch */
+	bool is_mux;
+};
+
+/**
+ * Data structure containing information about SFP/QSFP slots
+ */
+struct cvmx_fdt_sfp_info {
+	/** Used for a linked list of slots */
+	struct cvmx_fdt_sfp_info *next, *prev;
+	/** Used when multiple SFP ports share the same IPD port */
+	struct cvmx_fdt_sfp_info *next_iface_sfp;
+	/** Name from device tree of slot */
+	const char *name;
+	/** I2C bus for slot EEPROM */
+	struct cvmx_fdt_i2c_bus_info *i2c_bus;
+	/** Data from SFP or QSFP EEPROM */
+	struct cvmx_sfp_mod_info sfp_info;
+	/** Data structure with PHY information */
+	struct cvmx_phy_info *phy_info;
+	/** IPD port(s) slot is connected to */
+	int ipd_port[4];
+	/** Offset in device tree of slot */
+	int of_offset;
+	/** EEPROM address of SFP module (usually 0x50) */
+	u8 i2c_eeprom_addr;
+	/** Diagnostic address of SFP module (usually 0x51) */
+	u8 i2c_diag_addr;
+	/** True if QSFP module */
+	bool is_qsfp;
+	/** True if EEPROM data is valid */
+	bool valid;
+	/** SFP tx_disable GPIO descriptor */
+	struct cvmx_fdt_gpio_info *tx_disable;
+	/** SFP mod_abs/QSFP mod_prs GPIO descriptor */
+	struct cvmx_fdt_gpio_info *mod_abs;
+	/** SFP tx_error GPIO descriptor */
+	struct cvmx_fdt_gpio_info *tx_error;
+	/** SFP rx_los GPIO discriptor */
+	struct cvmx_fdt_gpio_info *rx_los;
+	/** QSFP select GPIO descriptor */
+	struct cvmx_fdt_gpio_info *select;
+	/** QSFP reset GPIO descriptor */
+	struct cvmx_fdt_gpio_info *reset;
+	/** QSFP interrupt GPIO descriptor */
+	struct cvmx_fdt_gpio_info *interrupt;
+	/** QSFP lp_mode GPIO descriptor */
+	struct cvmx_fdt_gpio_info *lp_mode;
+	/** Last mod_abs value */
+	int last_mod_abs;
+	/** Last rx_los value */
+	int last_rx_los;
+	/** Function to call to check mod_abs */
+	int (*check_mod_abs)(struct cvmx_fdt_sfp_info *sfp_info, void *data);
+	/** User-defined data to pass to check_mod_abs */
+	void *mod_abs_data;
+	/** Function to call when mod_abs changes */
+	int (*mod_abs_changed)(struct cvmx_fdt_sfp_info *sfp_info, int val, void *data);
+	/** User-defined data to pass to mod_abs_changed */
+	void *mod_abs_changed_data;
+	/** Function to call when rx_los changes */
+	int (*rx_los_changed)(struct cvmx_fdt_sfp_info *sfp_info, int val, void *data);
+	/** User-defined data to pass to rx_los_changed */
+	void *rx_los_changed_data;
+	/** True if we're connected to a Microsemi VSC7224 reclocking chip */
+	bool is_vsc7224;
+	/** Data structure for first vsc7224 channel we're attached to */
+	struct cvmx_vsc7224_chan *vsc7224_chan;
+	/** True if we're connected to a Avago AVSP5410 phy */
+	bool is_avsp5410;
+	/** Data structure for avsp5410 phy we're attached to */
+	struct cvmx_avsp5410 *avsp5410;
+	/** xinterface we're on */
+	int xiface;
+	/** port index */
+	int index;
+};
+
+/**
+ * Look up a phandle and follow it to its node then return the offset of that
+ * node.
+ *
+ * @param[in]	fdt_addr	pointer to FDT blob
+ * @param	node		node to read phandle from
+ * @param[in]	prop_name	name of property to find
+ * @param[in,out] lenp		Number of phandles, input max number
+ * @param[out]	nodes		Array of phandle nodes
+ *
+ * @return	-ve error code on error or 0 for success
+ */
+int cvmx_fdt_lookup_phandles(const void *fdt_addr, int node, const char *prop_name, int *lenp,
+			     int *nodes);
+
+/**
+ * Helper to return the address property
+ *
+ * @param[in] fdt_addr	pointer to FDT blob
+ * @param node		node to read address from
+ * @param prop_name	property name to read
+ *
+ * @return address of property or FDT_ADDR_T_NONE if not found
+ */
+static inline fdt_addr_t cvmx_fdt_get_addr(const void *fdt_addr, int node, const char *prop_name)
+{
+	return fdtdec_get_addr(fdt_addr, node, prop_name);
+}
+
+/**
+ * Helper function to return an integer property
+ *
+ * @param[in] fdt_addr	pointer to FDT blob
+ * @param node		node to read integer from
+ * @param[in] prop_name	property name to read
+ * @param default_val	default value to return if property doesn't exist
+ *
+ * @return	integer value of property or default_val if it doesn't exist.
+ */
+static inline int cvmx_fdt_get_int(const void *fdt_addr, int node, const char *prop_name,
+				   int default_val)
+{
+	return fdtdec_get_int(fdt_addr, node, prop_name, default_val);
+}
+
+static inline bool cvmx_fdt_get_bool(const void *fdt_addr, int node, const char *prop_name)
+{
+	return fdtdec_get_bool(fdt_addr, node, prop_name);
+}
+
+static inline u64 cvmx_fdt_get_uint64(const void *fdt_addr, int node, const char *prop_name,
+				      u64 default_val)
+{
+	return fdtdec_get_uint64(fdt_addr, node, prop_name, default_val);
+}
+
+/**
+ * Look up a phandle and follow it to its node then return the offset of that
+ * node.
+ *
+ * @param[in] fdt_addr	pointer to FDT blob
+ * @param node		node to read phandle from
+ * @param[in] prop_name	name of property to find
+ *
+ * @return	node offset if found, -ve error code on error
+ */
+static inline int cvmx_fdt_lookup_phandle(const void *fdt_addr, int node, const char *prop_name)
+{
+	return fdtdec_lookup_phandle(fdt_addr, node, prop_name);
+}
+
+/**
+ * Translate an address from the device tree into a CPU physical address by
+ * walking up the device tree and applying bus mappings along the way.
+ *
+ * This uses #size-cells and #address-cells.
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ * @param	node		node to start translating from
+ * @param[in]	in_addr		Address to translate
+ *				NOTE: in_addr must be in the native ENDIAN
+ *				format.
+ *
+ * @return	Translated address or FDT_ADDR_T_NONE if address cannot be
+ *		translated.
+ */
+static inline u64 cvmx_fdt_translate_address(const void *fdt_addr, int node, const u32 *in_addr)
+{
+	return fdt_translate_address((void *)fdt_addr, node, in_addr);
+}
+
+/**
+ * Compare compatibile strings in the flat device tree.
+ *
+ * @param[in] s1	First string to compare
+ * @param[in] sw	Second string to compare
+ *
+ * @return	0 if no match
+ *		1 if only the part number matches and not the manufacturer
+ *		2 if both the part number and manufacturer match
+ */
+int cvmx_fdt_compat_match(const char *s1, const char *s2);
+
+/**
+ * Returns whether a list of strings contains the specified string
+ *
+ * @param[in]	slist	String list
+ * @param	llen	string list total length
+ * @param[in]	str	string to search for
+ *
+ * @return	1 if string list contains string, 0 if it does not.
+ */
+int cvmx_fdt_compat_list_contains(const char *slist, int llen, const char *str);
+
+/**
+ * Check if a node is compatible with the specified compat string
+ *
+ * @param[in]	fdt_addr	FDT address
+ * @param	node		node offset to check
+ * @param[in]	compat		compatible string to check
+ *
+ * @return	0 if compatible, 1 if not compatible, error if negative
+ */
+int cvmx_fdt_node_check_compatible(const void *fdt_addr, int node, const char *compat);
+
+/**
+ * @INTERNAL
+ * Compares a string to a compatible field.
+ *
+ * @param[in]	compat		compatible string
+ * @param[in]	str		string to check
+ *
+ * @return	0 if not compatible, 1 if manufacturer compatible, 2 if
+ *		part is compatible, 3 if both part and manufacturer are
+ *		compatible.
+ */
+int __cvmx_fdt_compat_match(const char *compat, const char *str);
+
+/**
+ * Given a phandle to a GPIO device return the type of GPIO device it is.
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ * @param	phandle		phandle to GPIO
+ * @param[out]	size		Number of pins (optional, may be NULL)
+ *
+ * @return	Type of GPIO device or PIN_ERROR if error
+ */
+enum cvmx_gpio_type cvmx_fdt_get_gpio_type(const void *fdt_addr, int phandle, int *size);
+
+/**
+ * Given a phandle to a GPIO node output the i2c bus and address
+ *
+ * @param[in]	fdt_addr	Address of FDT
+ * @param	phandle		phandle of GPIO device
+ * @param[out]	bus		TWSI bus number with node in bits 1-3, can be
+ *				NULL for none.
+ * @param[out]	addr		TWSI address number, can be NULL for none
+ *
+ * @return	0 for success, error otherwise
+ */
+int cvmx_fdt_get_twsi_gpio_bus_addr(const void *fdt_addr, int phandle, int *bus, int *addr);
+
+/**
+ * Given a FDT node return the CPU node number
+ *
+ * @param[in]	fdt_addr	Address of FDT
+ * @param	node		FDT node number
+ *
+ * @return	CPU node number or error if negative
+ */
+int cvmx_fdt_get_cpu_node(const void *fdt_addr, int node);
+
+/**
+ * Get the total size of the flat device tree
+ *
+ * @param[in]	fdt_addr	Address of FDT
+ *
+ * @return	Size of flat device tree in bytes or -1 if error.
+ */
+int cvmx_fdt_get_fdt_size(const void *fdt_addr);
+
+/**
+ * Returns if a node is compatible with one of the items in the string list
+ *
+ * @param[in]	fdt_addr	Pointer to flat device tree
+ * @param	node		Node offset to check
+ * @param[in]	strlist		Array of FDT device compatibility strings,
+ *				must end with NULL or empty string.
+ *
+ * @return	0 if at least one item matches, 1 if no matches
+ */
+int cvmx_fdt_node_check_compatible_list(const void *fdt_addr, int node, const char *const *strlist);
+
+/**
+ * Given a FDT node, return the next compatible node.
+ *
+ * @param[in]	fdt_addr	Pointer to flat device tree
+ * @param	start_offset	Starting node offset or -1 to find the first
+ * @param	strlist		Array of FDT device compatibility strings, must
+ *				end with NULL or empty string.
+ *
+ * @return	next matching node or -1 if no more matches.
+ */
+int cvmx_fdt_node_offset_by_compatible_list(const void *fdt_addr, int startoffset,
+					    const char *const *strlist);
+
+/**
+ * Given the parent offset of an i2c device build up a list describing the bus
+ * which can contain i2c muxes and switches.
+ *
+ * @param[in]	fdt_addr	address of device tree
+ * @param	of_offset	Offset of the parent node of a GPIO device in
+ *				the device tree.
+ *
+ * @return	pointer to list of i2c devices starting from the root which
+ *		can include i2c muxes and switches or NULL if error.  Note that
+ *		all entries are allocated on the heap.
+ *
+ * @see cvmx_fdt_free_i2c_bus()
+ */
+struct cvmx_fdt_i2c_bus_info *cvmx_fdt_get_i2c_bus(const void *fdt_addr, int of_offset);
+
+/**
+ * Return the Octeon bus number for a bus descriptor
+ *
+ * @param[in]	bus	bus descriptor
+ *
+ * @return	Octeon twsi bus number or -1 on error
+ */
+int cvmx_fdt_i2c_get_root_bus(const struct cvmx_fdt_i2c_bus_info *bus);
+
+/**
+ * Frees all entries for an i2c bus descriptor
+ *
+ * @param	bus	bus to free
+ *
+ * @return	0
+ */
+int cvmx_fdt_free_i2c_bus(struct cvmx_fdt_i2c_bus_info *bus);
+
+/**
+ * Given the bus to a device, enable it.
+ *
+ * @param[in]	bus	i2c bus descriptor to enable or disable
+ * @param	enable	set to true to enable, false to disable
+ *
+ * @return	0 for success or -1 for invalid bus
+ *
+ * This enables the entire bus including muxes and switches in the path.
+ */
+int cvmx_fdt_enable_i2c_bus(const struct cvmx_fdt_i2c_bus_info *bus, bool enable);
+
+/**
+ * Return a GPIO handle given a GPIO phandle of the form <&gpio pin flags>
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ * @param	of_offset	node offset for property
+ * @param	prop_name	name of property
+ *
+ * @return	pointer to GPIO handle or NULL if error
+ */
+struct cvmx_fdt_gpio_info *cvmx_fdt_gpio_get_info_phandle(const void *fdt_addr, int of_offset,
+							  const char *prop_name);
+
+/**
+ * Sets a GPIO pin given the GPIO descriptor
+ *
+ * @param	pin	GPIO pin descriptor
+ * @param	value	value to set it to, 0 or 1
+ *
+ * @return	0 on success, -1 on error.
+ *
+ * NOTE: If the CVMX_GPIO_ACTIVE_LOW flag is set then the output value will be
+ * inverted.
+ */
+int cvmx_fdt_gpio_set(struct cvmx_fdt_gpio_info *pin, int value);
+
+/**
+ * Given a GPIO pin descriptor, input the value of that pin
+ *
+ * @param	pin	GPIO pin descriptor
+ *
+ * @return	0 if low, 1 if high, -1 on error.  Note that the input will be
+ *		inverted if the CVMX_GPIO_ACTIVE_LOW flag bit is set.
+ */
+int cvmx_fdt_gpio_get(struct cvmx_fdt_gpio_info *pin);
+
+/**
+ * Assigns an IPD port to a SFP slot
+ *
+ * @param	sfp		Handle to SFP data structure
+ * @param	ipd_port	Port to assign it to
+ *
+ * @return	0 for success, -1 on error
+ */
+int cvmx_sfp_set_ipd_port(struct cvmx_fdt_sfp_info *sfp, int ipd_port);
+
+/**
+ * Get the IPD port of a SFP slot
+ *
+ * @param[in]	sfp		Handle to SFP data structure
+ *
+ * @return	IPD port number for SFP slot
+ */
+static inline int cvmx_sfp_get_ipd_port(const struct cvmx_fdt_sfp_info *sfp)
+{
+	return sfp->ipd_port[0];
+}
+
+/**
+ * Get the IPD ports for a QSFP port
+ *
+ * @param[in]	sfp		Handle to SFP data structure
+ * @param[out]	ipd_ports	IPD ports for each lane, if running as 40G then
+ *				only ipd_ports[0] is valid and the others will
+ *				be set to -1.
+ */
+static inline void cvmx_qsfp_get_ipd_ports(const struct cvmx_fdt_sfp_info *sfp, int ipd_ports[4])
+{
+	int i;
+
+	for (i = 0; i < 4; i++)
+		ipd_ports[i] = sfp->ipd_port[i];
+}
+
+/**
+ * Attaches a PHY to a SFP or QSFP.
+ *
+ * @param	sfp		sfp to attach PHY to
+ * @param	phy_info	phy descriptor to attach or NULL to detach
+ */
+void cvmx_sfp_attach_phy(struct cvmx_fdt_sfp_info *sfp, struct cvmx_phy_info *phy_info);
+
+/**
+ * Returns a phy descriptor for a SFP slot
+ *
+ * @param[in]	sfp	SFP to get phy info from
+ *
+ * @return	phy descriptor or NULL if none.
+ */
+static inline struct cvmx_phy_info *cvmx_sfp_get_phy_info(const struct cvmx_fdt_sfp_info *sfp)
+{
+	return sfp->phy_info;
+}
+
+/**
+ * @INTERNAL
+ * Parses all instances of the Vitesse VSC7224 reclocking chip
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ *
+ * @return	0 for success, error otherwise
+ */
+int __cvmx_fdt_parse_vsc7224(const void *fdt_addr);
+
+/**
+ * @INTERNAL
+ * Parses all instances of the Avago AVSP5410 gearbox phy
+ *
+ * @param[in]   fdt_addr        Address of flat device tree
+ *
+ * @return      0 for success, error otherwise
+ */
+int __cvmx_fdt_parse_avsp5410(const void *fdt_addr);
+
+/**
+ * Parse SFP information from device tree
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ *
+ * @return pointer to sfp info or NULL if error
+ */
+struct cvmx_fdt_sfp_info *cvmx_helper_fdt_parse_sfp_info(const void *fdt_addr, int of_offset);
+
+/**
+ * @INTERNAL
+ * Parses either a CS4343 phy or a slice of the phy from the device tree
+ * @param[in]	fdt_addr	Address of FDT
+ * @param	of_offset	offset of slice or phy in device tree
+ * @param	phy_info	phy_info data structure to fill in
+ *
+ * @return	0 for success, -1 on error
+ */
+int cvmx_fdt_parse_cs4343(const void *fdt_addr, int of_offset, struct cvmx_phy_info *phy_info);
+
+/**
+ * Given an i2c bus and device address, write an 8 bit value
+ *
+ * @param bus	i2c bus number
+ * @param addr	i2c device address (7 bits)
+ * @param val	8-bit value to write
+ *
+ * This is just an abstraction to ease support in both U-Boot and SE.
+ */
+void cvmx_fdt_i2c_reg_write(int bus, int addr, u8 val);
+
+/**
+ * Read an 8-bit value from an i2c bus and device address
+ *
+ * @param bus	i2c bus number
+ * @param addr	i2c device address (7 bits)
+ *
+ * @return 8-bit value or error if negative
+ */
+int cvmx_fdt_i2c_reg_read(int bus, int addr);
+
+/**
+ * Write an 8-bit value to a register indexed i2c device
+ *
+ * @param bus	i2c bus number to write to
+ * @param addr	i2c device address (7 bits)
+ * @param reg	i2c 8-bit register address
+ * @param val	8-bit value to write
+ *
+ * @return 0 for success, otherwise error
+ */
+int cvmx_fdt_i2c_write8(int bus, int addr, int reg, u8 val);
+
+/**
+ * Read an 8-bit value from a register indexed i2c device
+ *
+ * @param bus	i2c bus number to write to
+ * @param addr	i2c device address (7 bits)
+ * @param reg	i2c 8-bit register address
+ *
+ * @return value or error if negative
+ */
+int cvmx_fdt_i2c_read8(int bus, int addr, int reg);
+
+int cvmx_sfp_vsc7224_mod_abs_changed(struct cvmx_fdt_sfp_info *sfp_info,
+				     int val, void *data);
+int cvmx_sfp_avsp5410_mod_abs_changed(struct cvmx_fdt_sfp_info *sfp_info,
+				      int val, void *data);
+
+#endif /* CVMX_HELPER_FDT_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-fpa.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-fpa.h
new file mode 100644
index 0000000..8b3a89b
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-fpa.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper functions for FPA setup.
+ */
+
+#ifndef __CVMX_HELPER_H_FPA__
+#define __CVMX_HELPER_H_FPA__
+
+/**
+ * Allocate memory and initialize the FPA pools using memory
+ * from cvmx-bootmem. Sizes of each element in the pools is
+ * controlled by the cvmx-config.h header file. Specifying
+ * zero for any parameter will cause that FPA pool to not be
+ * setup. This is useful if you aren't using some of the
+ * hardware and want to save memory.
+ *
+ * @param packet_buffers
+ *               Number of packet buffers to allocate
+ * @param work_queue_entries
+ *               Number of work queue entries
+ * @param pko_buffers
+ *               PKO Command buffers. You should at minimum have two per
+ *               each PKO queue.
+ * @param tim_buffers
+ *               TIM ring buffer command queues. At least two per timer bucket
+ *               is recommended.
+ * @param dfa_buffers
+ *               DFA command buffer. A relatively small (32 for example)
+ *               number should work.
+ * @return Zero on success, non-zero if out of memory
+ */
+int cvmx_helper_initialize_fpa(int packet_buffers, int work_queue_entries, int pko_buffers,
+			       int tim_buffers, int dfa_buffers);
+
+int __cvmx_helper_initialize_fpa_pool(int pool, u64 buffer_size, u64 buffers, const char *name);
+
+int cvmx_helper_shutdown_fpa_pools(int node);
+
+void cvmx_helper_fpa_dump(int node);
+
+#endif /* __CVMX_HELPER_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-gpio.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-gpio.h
new file mode 100644
index 0000000..787eccf
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-gpio.h
@@ -0,0 +1,427 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Defines some GPIO information used in multiple places
+ */
+
+#ifndef __CVMX_HELPER_GPIO_H__
+#define __CVMX_HELPER_GPIO_H__
+
+#define CVMX_GPIO_NAME_LEN 32 /** Length of name */
+
+enum cvmx_gpio_type {
+	CVMX_GPIO_PIN_OCTEON,  /** GPIO pin is directly connected to OCTEON */
+	CVMX_GPIO_PIN_PCA953X, /** GPIO pin is NXP PCA953X compat chip */
+	CVMX_GPIO_PIN_PCA957X,
+	CVMX_GPIO_PIN_PCF857X, /** GPIO pin is NXP PCF857X compat chip */
+	CVMX_GPIO_PIN_PCA9698, /** GPIO pin is NXP PCA9698 compat chip */
+	CVMX_GPIO_PIN_CS4343,  /** Inphi/Cortina CS4343 GPIO pins */
+	CVMX_GPIO_PIN_OTHER,   /** GPIO pin is something else */
+};
+
+enum cvmx_gpio_operation {
+	CVMX_GPIO_OP_CONFIG,	  /** Initial configuration of the GPIO pin */
+	CVMX_GPIO_OP_SET,	  /** Set pin */
+	CVMX_GPIO_OP_CLEAR,	  /** Clear pin */
+	CVMX_GPIO_OP_READ,	  /** Read pin */
+	CVMX_GPIO_OP_TOGGLE,	  /** Toggle pin */
+	CVMX_GPIO_OP_BLINK_START, /** Put in blink mode (if supported) */
+	CVMX_GPIO_OP_BLINK_STOP,  /** Takes the pin out of blink mode */
+	CVMX_GPIO_OP_SET_LINK,	  /** Put in link monitoring mode */
+	CVMX_GPIO_OP_SET_ACT,	  /** Put in RX activity mode */
+};
+
+/**
+ * Inphi CS4343 output source select values for the GPIO_GPIOX output_src_sel.
+ */
+enum cvmx_inphi_cs4343_gpio_gpio_output_src_sel {
+	GPIO_SEL_DRIVE = 0,	/** Value of GPIOX_DRIVE */
+	GPIO_SEL_DELAY = 1,	/** Drive delayed */
+	GPIO_SEL_TOGGLE = 2,	/** Used for blinking */
+	GPIO_SEL_EXT = 3,	/** External function */
+	GPIO_SEL_EXT_DELAY = 4, /** External function delayed */
+};
+
+/** Inphi GPIO_GPIOX configuration register */
+union cvmx_inphi_cs4343_gpio_cfg_reg {
+	u16 u;
+	struct {
+u16: 4;
+		/** Data source for the GPIO output */
+		u16 output_src_sel : 3;
+		/** 1 = GPIO output is inverted before being output */
+		u16 invert_output : 1;
+		/** 1 = GPIO input is inverted before being processed */
+		u16 invert_input : 1;
+		/** 0 = 2.5v/1.8v signalling, 1 = 1.2v signalling */
+		u16 iovddsel_1v2 : 1;
+		/**
+		 * 0 = output selected by outen bit
+		 * 1 = output controlled by selected GPIO output source
+		 */
+		u16 outen_ovr : 1;
+		/** 0 = GPIO is input only, 1 = GPIO output driver enabled */
+		u16 outen : 1;
+u16: 2;
+		u16 pullup_1k;	/** 1 = enable 1K pad pullup */
+		u16 pullup_10k; /** 1 = enable 10K pad pullup */
+	} s;
+};
+
+#define CVMX_INPHI_CS4343_GPIO_CFG_OFFSET 0x0
+
+/**
+ * This selects which port the GPIO gets its signals from when configured
+ * as an output.
+ */
+enum cvmx_inphi_cs4343_gpio_output_cfg_port {
+	PORT_0_HOST_RX = 0, /** Port pair 0 host RX */
+	PORT_0_LINE_RX = 1, /** Port pair 0 line RX */
+	PORT_1_HOST_RX = 2, /** Port pair 1 host RX */
+	PORT_1_LINE_RX = 3, /** Port pair 1 line RX */
+	PORT_3_HOST_RX = 4, /** Port pair 3 host RX */
+	PORT_3_LINE_RX = 5, /** Port pair 3 line RX */
+	PORT_2_HOST_RX = 6, /** Port pair 2 host RX */
+	PORT_2_LINE_RX = 7, /** Port pair 2 line RX */
+	COMMON = 8,	    /** Common */
+};
+
+enum cvmx_inphi_cs4343_gpio_output_cfg_function {
+	RX_LOS = 0,	   /** Port - 1 = Receive LOS (from DSP) */
+	RX_LOL = 1,	   /** Port - 1 = Receive LOL (inverted from MSEQ) */
+	EDC_CONVERGED = 2, /** Port - 1 = EDC converged (from DSP) */
+	/** Port - 1 = PRBS checker in sync (inverted from SDS) */
+	RX_PRBS_SYNC = 3,
+	COMMON_LOGIC_0 = 0,	 /** Common - Logic 0 */
+	COMMON_GPIO1_INPUT = 1,	 /** Common - GPIO 1 input */
+	COMMON_GPIO2_INPUT = 2,	 /** Common - GPIO 2 input */
+	COMMON_GPIO3_INPUT = 3,	 /** Common - GPIO 3 input */
+	COMMON_GPIO4_INPUT = 4,	 /** Common - GPIO 4 input */
+	COMMON_INTERR_INPUT = 5, /** Common - INTERR input */
+	/** Common - Interrupt output from GLOBAL_INT register */
+	COMMON_GLOBAL_INT = 6,
+	/** Common - Interrupt output from GPIO_INT register */
+	COMMON_GPIO_INT = 7,
+	/** Common - Temp/voltage monitor interrupt */
+	COMMON_MONITOR_INT = 8,
+	/** Common - Selected clock output of global clock monitor */
+	COMMON_GBL_CLKMON_CLK = 9,
+};
+
+union cvmx_inphi_cs4343_gpio_output_cfg {
+	u16 u;
+	struct {
+u16: 8;
+		u16 port : 4;	  /** port */
+		u16 function : 4; /** function */
+	} s;
+};
+
+#define CVMX_INPHI_CS4343_GPIO_OUTPUT_CFG_OFFSET 0x1
+
+union cvmx_inphi_cs4343_gpio_drive {
+	u16 u;
+	struct {
+u16: 15;
+		u16 value : 1; /** output value */
+	} s;
+};
+
+#define CVMX_INPHI_CS4343_GPIO_DRIVE_OFFSET 0x2
+
+union cvmx_inphi_cs4343_gpio_value {
+	u16 u;
+	struct {
+u16: 15;
+		u16 value : 1; /** input value (read-only) */
+	} s;
+};
+
+#define CVMX_INPHI_CS4343_GPIO_VALUE_OFFSET 0x3
+
+union cvmx_inphi_cs4343_gpio_toggle {
+	u16 u;
+	struct {
+		/** Toggle rate in ms, multiply by 2 to get period in ms */
+		u16 rate : 16;
+	} s;
+};
+
+#define CVMX_INPHI_CS4343_GPIO_TOGGLE_OFFSET 0x4
+
+union cvmx_inphi_cs4343_gpio_delay {
+	u16 u;
+	struct {
+		/** On delay for GPIO output in ms when enabled */
+		u16 on_delay : 16;
+	} s;
+};
+
+#define CVMX_INPHI_CS4343_GPIO_DELAY_OFFSET 0x5
+
+/**
+ * GPIO flags associated with a GPIO pin (can be combined)
+ */
+enum cvmx_gpio_flags {
+	CVMX_GPIO_ACTIVE_HIGH = 0,    /** Active high (default) */
+	CVMX_GPIO_ACTIVE_LOW = 1,     /** Active low (inverted) */
+	CVMX_GPIO_OPEN_COLLECTOR = 2, /** Output is open-collector */
+};
+
+/** Default timer number to use for outputting a frequency [0..3] */
+#define CVMX_GPIO_DEFAULT_TIMER 3
+
+/** Configuration data for native Octeon GPIO pins */
+struct cvmx_octeon_gpio_data {
+	int cpu_node; /** CPU node for GPIO pin */
+	int timer;    /** Timer number used when in toggle mode, 0-3 */
+};
+
+struct cvmx_pcf857x_gpio_data {
+	unsigned int latch_out;
+};
+
+#define CVMX_INPHI_CS4343_EFUSE_PDF_SKU_REG 0x19f
+#define CVMX_INPHI_CS4343_SKU_CS4223	    0x10
+#define CVMX_INPHI_CS4343_SKU_CS4224	    0x11
+#define CVMX_INPHI_CS4343_SKU_CS4343	    0x12
+#define CVMX_INPHI_CS4343_SKU_CS4221	    0x13
+#define CVMX_INPHI_CS4343_SKU_CS4227	    0x14
+#define CVMX_INPHI_CS4343_SKU_CS4341	    0x16
+
+struct cvmx_cs4343_gpio_data {
+	int reg_offset; /** Base register address for GPIO */
+	enum cvmx_gpio_operation last_op;
+	u8 link_port; /** Link port number for link status */
+	u16 sku;      /** Value from CS4224_EFUSE_PDF_SKU register */
+	u8 out_src_sel;
+	u8 field_func;
+	bool out_en;
+	bool is_cs4343; /** True if dual package */
+	struct phy_device *phydev;
+};
+
+struct cvmx_fdt_gpio_info;
+
+/** Function called for GPIO operations */
+typedef int (*cvmx_fdt_gpio_op_func_t)(struct cvmx_fdt_gpio_info *, enum cvmx_gpio_operation);
+
+/**
+ * GPIO descriptor
+ */
+struct cvmx_fdt_gpio_info {
+	struct cvmx_fdt_gpio_info *next; /** For list of GPIOs */
+	char name[CVMX_GPIO_NAME_LEN];	 /** Name of GPIO */
+	int pin;			 /** GPIO pin number */
+	enum cvmx_gpio_type gpio_type;	 /** Type of GPIO controller */
+	int of_offset;			 /** Offset in device tree */
+	int phandle;
+	struct cvmx_fdt_i2c_bus_info *i2c_bus; /** I2C bus descriptor */
+	int i2c_addr;			       /** Address on i2c bus */
+	enum cvmx_gpio_flags flags;	       /** Flags associated with pin */
+	int num_pins;			       /** Total number of pins */
+	unsigned int latch_out;		       /** Latched output for 857x */
+	/** Rate in ms between toggle states */
+	int toggle_rate;
+	/** Pointer to user data for user-defined functions */
+	void *data;
+	/** Function to set, clear, toggle, etc. */
+	cvmx_fdt_gpio_op_func_t op_func;
+	/* Two values are used to detect the initial case where nothing has
+	 * been configured.  Initially, all of the following will be false
+	 * which will force the initial state to be properly set.
+	 */
+	/** True if the GPIO pin is currently set, useful for toggle */
+	bool is_set;
+	/** Set if configured to invert */
+	bool invert_set;
+	/** Set if input is to be inverted */
+	bool invert_input;
+	/** Set if direction is configured as output */
+	bool dir_out;
+	/** Set if direction is configured as input */
+	bool dir_in;
+	/** Pin is set to toggle periodically */
+	bool toggle;
+	/** True if LED is used to indicate link status */
+	bool link_led;
+	/** True if LED is used to indicate rx activity */
+	bool rx_act_led;
+	/** True if LED is used to indicate tx activity */
+	bool tx_act_led;
+	/** True if LED is used to indicate networking errors */
+	bool error_led;
+	/** True if LED can automatically show link */
+	bool hw_link;
+};
+
+/** LED datastructure */
+struct cvmx_fdt_gpio_led {
+	struct cvmx_fdt_gpio_led *next, *prev; /** List of LEDs */
+	char name[CVMX_GPIO_NAME_LEN];	       /** Name */
+	struct cvmx_fdt_gpio_info *gpio;       /** GPIO for LED */
+	int of_offset;			       /** Device tree node */
+	/** True if active low, note that GPIO contains this info */
+	bool active_low;
+};
+
+/**
+ * Returns the operation function for the GPIO phandle
+ *
+ * @param[in]	fdt_addr	Pointer to FDT
+ * @param	phandle		phandle of GPIO entry
+ *
+ * @return	Pointer to op function or NULL if not found.
+ */
+cvmx_fdt_gpio_op_func_t cvmx_fdt_gpio_get_op_func(const void *fdt_addr, int phandle);
+
+/**
+ * Given a phandle to a GPIO device return the type of GPIO device it is.
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ * @param	phandle		phandle to GPIO
+ * @param[out]	size		Number of pins (optional, may be NULL)
+ *
+ * @return	Type of GPIO device or PIN_ERROR if error
+ */
+enum cvmx_gpio_type cvmx_fdt_get_gpio_type(const void *fdt_addr, int phandle, int *size);
+
+/**
+ * Return a GPIO handle given a GPIO phandle of the form <&gpio pin flags>
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ * @param	of_offset	node offset of GPIO device
+ * @param	prop_name	name of property
+ *
+ * @return	pointer to GPIO handle or NULL if error
+ */
+struct cvmx_fdt_gpio_info *cvmx_fdt_gpio_get_info(const void *fdt_addr, int of_offset,
+						  const char *prop_name);
+
+/**
+ * Return a GPIO handle given a GPIO phandle of the form <&gpio pin flags>
+ *
+ * @param[in]	fdt_addr	Address of flat device tree
+ * @param	of_offset	node offset for property
+ * @param	prop_name	name of property
+ *
+ * @return	pointer to GPIO handle or NULL if error
+ */
+struct cvmx_fdt_gpio_info *cvmx_fdt_gpio_get_info_phandle(const void *fdt_addr, int of_offset,
+							  const char *prop_name);
+
+/**
+ * Parses a GPIO entry and fills in the gpio info data structure
+ *
+ * @param[in]	fdt_addr	Address of FDT
+ * @param	phandle		phandle for GPIO
+ * @param	pin		pin number
+ * @param	flags		flags set (1 = invert)
+ * @param[out]	gpio		GPIO info data structure
+ *
+ * @return	0 for success, -1 on error
+ */
+int cvmx_fdt_parse_gpio(const void *fdt_addr, int phandle, int pin, u32 flags,
+			struct cvmx_fdt_gpio_info *gpio);
+
+/**
+ * @param	gpio	GPIO descriptor to assign timer to
+ * @param	timer	Octeon hardware timer number [0..3]
+ */
+void cvmx_fdt_gpio_set_timer(struct cvmx_fdt_gpio_info *gpio, int timer);
+
+/**
+ * Given a GPIO pin descriptor, input the value of that pin
+ *
+ * @param	pin	GPIO pin descriptor
+ *
+ * @return	0 if low, 1 if high, -1 on error.  Note that the input will be
+ *		inverted if the CVMX_GPIO_ACTIVE_LOW flag bit is set.
+ */
+int cvmx_fdt_gpio_get(struct cvmx_fdt_gpio_info *pin);
+
+/**
+ * Sets a GPIO pin given the GPIO descriptor
+ *
+ * @param	gpio	GPIO pin descriptor
+ * @param	value	value to set it to, 0 or 1
+ *
+ * @return	0 on success, -1 on error.
+ *
+ * NOTE: If the CVMX_GPIO_ACTIVE_LOW flag is set then the output value will be
+ * inverted.
+ */
+int cvmx_fdt_gpio_set(struct cvmx_fdt_gpio_info *gpio, int value);
+
+/**
+ * Sets the blink frequency for a GPIO pin
+ *
+ * @param gpio	GPIO handle
+ * @param freq	Frequency in hz [0..500]
+ */
+void cvmx_fdt_gpio_set_freq(struct cvmx_fdt_gpio_info *gpio, int freq);
+
+/**
+ * Enables or disables blinking a GPIO pin
+ *
+ * @param	gpio	GPIO handle
+ * @param	blink	True to start blinking, false to stop
+ *
+ * @return	0 for success, -1 on error
+ * NOTE: Not all GPIO types support blinking.
+ */
+int cvmx_fdt_gpio_set_blink(struct cvmx_fdt_gpio_info *gpio, bool blink);
+
+/**
+ * Alternates between link and blink mode
+ *
+ * @param	gpio	GPIO handle
+ * @param	blink	True to start blinking, false to use link status
+ *
+ * @return	0 for success, -1 on error
+ * NOTE: Not all GPIO types support this.
+ */
+int cvmx_fdt_gpio_set_link_blink(struct cvmx_fdt_gpio_info *gpio, bool blink);
+
+static inline bool cvmx_fdt_gpio_hw_link_supported(const struct cvmx_fdt_gpio_info *gpio)
+{
+	return gpio->hw_link;
+}
+
+/**
+ * Configures a GPIO pin as input or output
+ *
+ * @param	gpio	GPIO pin to configure
+ * @param	output	Set to true to make output, false for input
+ */
+void cvmx_fdt_gpio_set_output(struct cvmx_fdt_gpio_info *gpio, bool output);
+
+/**
+ * Allocates an LED data structure
+ * @param[in]	name		name to assign LED
+ * @param	of_offset	Device tree offset
+ * @param	gpio		GPIO assigned to LED (can be NULL)
+ * @param	last		Previous LED to build a list
+ *
+ * @return	pointer to LED data structure or NULL if out of memory
+ */
+struct cvmx_fdt_gpio_led *cvmx_alloc_led(const char *name, int of_offset,
+					 struct cvmx_fdt_gpio_info *gpio,
+					 struct cvmx_fdt_gpio_led *last);
+
+/**
+ * Parses an LED in the device tree
+ *
+ * @param[in]	fdt_addr		Pointer to flat device tree
+ * @param	led_of_offset		Device tree offset of LED
+ * @param	gpio			GPIO data structure to use (can be NULL)
+ * @param	last			Previous LED if this is a group of LEDs
+ *
+ * @return	Pointer to LED data structure or NULL if error
+ */
+struct cvmx_fdt_gpio_led *cvmx_fdt_parse_led(const void *fdt_addr, int led_of_offset,
+					     struct cvmx_fdt_gpio_info *gpio,
+					     struct cvmx_fdt_gpio_led *last);
+
+#endif /* __CVMX_HELPER_GPIO_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-ilk.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-ilk.h
new file mode 100644
index 0000000..29af48e
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-ilk.h
@@ -0,0 +1,93 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Functions for ILK initialization, configuration,
+ * and monitoring.
+ */
+
+#ifndef __CVMX_HELPER_ILK_H__
+#define __CVMX_HELPER_ILK_H__
+
+int __cvmx_helper_ilk_enumerate(int interface);
+
+/**
+ * @INTERNAL
+ * Clear all calendar entries to the xoff state. This
+ * means no data is sent or received.
+ *
+ * @param interface Interface whose calendar are to be initialized.
+ */
+void __cvmx_ilk_clear_cal(int interface);
+
+/**
+ * @INTERNAL
+ * Setup the channel's tx calendar entry.
+ *
+ * @param interface Interface channel belongs to
+ * @param channel Channel whose calendar entry is to be updated
+ * @param bpid Bpid assigned to the channel
+ */
+void __cvmx_ilk_write_tx_cal_entry(int interface, int channel, unsigned char bpid);
+
+/**
+ * @INTERNAL
+ * Setup the channel's rx calendar entry.
+ *
+ * @param interface Interface channel belongs to
+ * @param channel Channel whose calendar entry is to be updated
+ * @param pipe PKO assigned to the channel
+ */
+void __cvmx_ilk_write_rx_cal_entry(int interface, int channel, unsigned char pipe);
+
+/**
+ * @INTERNAL
+ * Probe a ILK interface and determine the number of ports
+ * connected to it. The ILK interface should still be down after
+ * this call.
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Number of ports on the interface. Zero to disable.
+ */
+int __cvmx_helper_ilk_probe(int xiface);
+
+/**
+ * @INTERNAL
+ * Bringup and enable a ILK interface. After this call packet
+ * I/O should be fully functional. This is called with IPD
+ * enabled but PKO disabled.
+ *
+ * @param xiface Interface to bring up
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_ilk_enable(int xiface);
+
+/**
+ * @INTERNAL
+ * Return the link state of an IPD/PKO port as returned by ILK link status.
+ *
+ * @param ipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t __cvmx_helper_ilk_link_get(int ipd_port);
+
+/**
+ * @INTERNAL
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead.
+ *
+ * @param ipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_ilk_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
+
+void __cvmx_helper_ilk_show_stats(void);
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-ipd.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-ipd.h
new file mode 100644
index 0000000..025743d
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-ipd.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper functions for IPD
+ */
+
+#ifndef __CVMX_HELPER_IPD_H__
+#define __CVMX_HELPER_IPD_H__
+
+void cvmx_helper_ipd_set_wqe_no_ptr_mode(bool mode);
+void cvmx_helper_ipd_pkt_wqe_le_mode(bool mode);
+int __cvmx_helper_ipd_global_setup(void);
+int __cvmx_helper_ipd_setup_interface(int interface);
+
+#endif /* __CVMX_HELPER_PKI_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-jtag.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-jtag.h
new file mode 100644
index 0000000..fa379ea
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-jtag.h
@@ -0,0 +1,84 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ *  Helper utilities for qlm_jtag.
+ */
+
+#ifndef __CVMX_HELPER_JTAG_H__
+#define __CVMX_HELPER_JTAG_H__
+
+/**
+ * The JTAG chain for CN52XX and CN56XX is 4 * 268 bits long, or 1072.
+ * CN5XXX full chain shift is:
+ *     new data => lane 3 => lane 2 => lane 1 => lane 0 => data out
+ * The JTAG chain for CN63XX is 4 * 300 bits long, or 1200.
+ * The JTAG chain for CN68XX is 4 * 304 bits long, or 1216.
+ * The JTAG chain for CN66XX/CN61XX/CNF71XX is 4 * 304 bits long, or 1216.
+ * CN6XXX full chain shift is:
+ *     new data => lane 0 => lane 1 => lane 2 => lane 3 => data out
+ * Shift LSB first, get LSB out
+ */
+extern const __cvmx_qlm_jtag_field_t __cvmx_qlm_jtag_field_cn63xx[];
+extern const __cvmx_qlm_jtag_field_t __cvmx_qlm_jtag_field_cn66xx[];
+extern const __cvmx_qlm_jtag_field_t __cvmx_qlm_jtag_field_cn68xx[];
+
+#define CVMX_QLM_JTAG_UINT32 40
+
+typedef u32 qlm_jtag_uint32_t[CVMX_QLM_JTAG_UINT32 * 8];
+
+/**
+ * Initialize the internal QLM JTAG logic to allow programming
+ * of the JTAG chain by the cvmx_helper_qlm_jtag_*() functions.
+ * These functions should only be used at the direction of Cavium
+ * Networks. Programming incorrect values into the JTAG chain
+ * can cause chip damage.
+ */
+void cvmx_helper_qlm_jtag_init(void);
+
+/**
+ * Write up to 32bits into the QLM jtag chain. Bits are shifted
+ * into the MSB and out the LSB, so you should shift in the low
+ * order bits followed by the high order bits. The JTAG chain for
+ * CN52XX and CN56XX is 4 * 268 bits long, or 1072. The JTAG chain
+ * for CN63XX is 4 * 300 bits long, or 1200.
+ *
+ * @param qlm    QLM to shift value into
+ * @param bits   Number of bits to shift in (1-32).
+ * @param data   Data to shift in. Bit 0 enters the chain first, followed by
+ *               bit 1, etc.
+ *
+ * @return The low order bits of the JTAG chain that shifted out of the
+ *         circle.
+ */
+u32 cvmx_helper_qlm_jtag_shift(int qlm, int bits, u32 data);
+
+/**
+ * Shift long sequences of zeros into the QLM JTAG chain. It is
+ * common to need to shift more than 32 bits of zeros into the
+ * chain. This function is a convience wrapper around
+ * cvmx_helper_qlm_jtag_shift() to shift more than 32 bits of
+ * zeros at a time.
+ *
+ * @param qlm    QLM to shift zeros into
+ * @param bits
+ */
+void cvmx_helper_qlm_jtag_shift_zeros(int qlm, int bits);
+
+/**
+ * Program the QLM JTAG chain into all lanes of the QLM. You must
+ * have already shifted in the proper number of bits into the
+ * JTAG chain. Updating invalid values can possibly cause chip damage.
+ *
+ * @param qlm    QLM to program
+ */
+void cvmx_helper_qlm_jtag_update(int qlm);
+
+/**
+ * Load the QLM JTAG chain with data from all lanes of the QLM.
+ *
+ * @param qlm    QLM to program
+ */
+void cvmx_helper_qlm_jtag_capture(int qlm);
+
+#endif /* __CVMX_HELPER_JTAG_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-loop.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-loop.h
new file mode 100644
index 0000000..defd955
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-loop.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Functions for LOOP initialization, configuration,
+ * and monitoring.
+ */
+
+#ifndef __CVMX_HELPER_LOOP_H__
+#define __CVMX_HELPER_LOOP_H__
+
+/**
+ * @INTERNAL
+ * Probe a LOOP interface and determine the number of ports
+ * connected to it. The LOOP interface should still be down after
+ * this call.
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Number of ports on the interface. Zero to disable.
+ */
+int __cvmx_helper_loop_probe(int xiface);
+int __cvmx_helper_loop_enumerate(int xiface);
+
+/**
+ * @INTERNAL
+ * Bringup and enable a LOOP interface. After this call packet
+ * I/O should be fully functional. This is called with IPD
+ * enabled but PKO disabled.
+ *
+ * @param xiface Interface to bring up
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_loop_enable(int xiface);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-npi.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-npi.h
new file mode 100644
index 0000000..6a600a0
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-npi.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Functions for NPI initialization, configuration,
+ * and monitoring.
+ */
+
+#ifndef __CVMX_HELPER_NPI_H__
+#define __CVMX_HELPER_NPI_H__
+
+/**
+ * @INTERNAL
+ * Probe a NPI interface and determine the number of ports
+ * connected to it. The NPI interface should still be down after
+ * this call.
+ *
+ * @param interface Interface to probe
+ *
+ * @return Number of ports on the interface. Zero to disable.
+ */
+int __cvmx_helper_npi_probe(int interface);
+
+/**
+ * @INTERNAL
+ * Bringup and enable a NPI interface. After this call packet
+ * I/O should be fully functional. This is called with IPD
+ * enabled but PKO disabled.
+ *
+ * @param xiface Interface to bring up
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_npi_enable(int xiface);
+
+/**
+ * Sets the number of pipe used by SLI packet output in the variable,
+ * which then later used for setting it up in HW
+ */
+void cvmx_npi_config_set_num_pipes(int num_pipes);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-pki.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-pki.h
new file mode 100644
index 0000000..f5933f2
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-pki.h
@@ -0,0 +1,319 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper functions for PKI
+ */
+
+#ifndef __CVMX_HELPER_PKI_H__
+#define __CVMX_HELPER_PKI_H__
+
+#include "cvmx-pki.h"
+
+/* Modify this if more than 8 ilk channels need to be supported */
+#define CVMX_MAX_PORT_PER_INTERFACE  64
+#define CVMX_MAX_QOS_PRIORITY	     64
+#define CVMX_PKI_FIND_AVAILABLE_RSRC (-1)
+
+struct cvmx_pki_qos_schd {
+	cvmx_fpa3_gaura_t _aura;
+	cvmx_fpa3_pool_t _pool;
+	bool pool_per_qos;
+	int pool_num;
+	char *pool_name;
+	u64 pool_buff_size;
+	u64 pool_max_buff;
+	bool aura_per_qos;
+	int aura_num;
+	char *aura_name;
+	u64 aura_buff_cnt;
+	bool sso_grp_per_qos;
+	int sso_grp;
+	u16 port_add;
+	int qpg_base;
+};
+
+struct cvmx_pki_prt_schd {
+	cvmx_fpa3_pool_t _pool;
+	cvmx_fpa3_gaura_t _aura;
+	bool cfg_port;
+	int style;
+	bool pool_per_prt;
+	int pool_num;
+	char *pool_name;
+	u64 pool_buff_size;
+	u64 pool_max_buff;
+	bool aura_per_prt;
+	int aura_num;
+	char *aura_name;
+	u64 aura_buff_cnt;
+	bool sso_grp_per_prt;
+	int sso_grp;
+	enum cvmx_pki_qpg_qos qpg_qos;
+	int qpg_base;
+	struct cvmx_pki_qos_schd qos_s[CVMX_MAX_QOS_PRIORITY];
+};
+
+struct cvmx_pki_intf_schd {
+	cvmx_fpa3_pool_t _pool;
+	cvmx_fpa3_gaura_t _aura;
+	bool style_per_intf;
+	int style;
+	bool pool_per_intf;
+	int pool_num;
+	char *pool_name;
+	u64 pool_buff_size;
+	u64 pool_max_buff;
+	bool aura_per_intf;
+	int aura_num;
+	char *aura_name;
+	u64 aura_buff_cnt;
+	bool sso_grp_per_intf;
+	int sso_grp;
+	bool qos_share_aura;
+	bool qos_share_grp;
+	int qpg_base;
+	struct cvmx_pki_prt_schd prt_s[CVMX_MAX_PORT_PER_INTERFACE];
+};
+
+struct cvmx_pki_global_schd {
+	bool setup_pool;
+	int pool_num;
+	char *pool_name;
+	u64 pool_buff_size;
+	u64 pool_max_buff;
+	bool setup_aura;
+	int aura_num;
+	char *aura_name;
+	u64 aura_buff_cnt;
+	bool setup_sso_grp;
+	int sso_grp;
+	cvmx_fpa3_pool_t _pool;
+	cvmx_fpa3_gaura_t _aura;
+};
+
+struct cvmx_pki_legacy_qos_watcher {
+	bool configured;
+	enum cvmx_pki_term field;
+	u32 data;
+	u32 data_mask;
+	u8 advance;
+	u8 sso_grp;
+};
+
+extern bool cvmx_pki_dflt_init[CVMX_MAX_NODES];
+
+extern struct cvmx_pki_pool_config pki_dflt_pool[CVMX_MAX_NODES];
+extern struct cvmx_pki_aura_config pki_dflt_aura[CVMX_MAX_NODES];
+extern struct cvmx_pki_style_config pki_dflt_style[CVMX_MAX_NODES];
+extern struct cvmx_pki_pkind_config pki_dflt_pkind[CVMX_MAX_NODES];
+extern u64 pkind_style_map[CVMX_MAX_NODES][CVMX_PKI_NUM_PKIND];
+extern struct cvmx_pki_sso_grp_config pki_dflt_sso_grp[CVMX_MAX_NODES];
+extern struct cvmx_pki_legacy_qos_watcher qos_watcher[8];
+
+/**
+ * This function Enabled the PKI hardware to
+ * start accepting/processing packets.
+ * @param node    node number
+ */
+void cvmx_helper_pki_enable(int node);
+
+/**
+ * This function frees up PKI resources consumed by that port.
+ * This function should only be called if port resources
+ * (fpa pools aura, style qpg entry pcam entry etc.) are not shared
+ * @param xipd_port     ipd port number for which resources need to
+ *                      be freed.
+ */
+int cvmx_helper_pki_port_shutdown(int xipd_port);
+
+/**
+ * This function shuts down complete PKI hardware
+ * and software resources.
+ * @param node          node number where PKI needs to shutdown.
+ */
+void cvmx_helper_pki_shutdown(int node);
+
+/**
+ * This function calculates how mant qpf entries will be needed for
+ * a particular QOS.
+ * @param qpg_qos       qos value for which entries need to be calculated.
+ */
+int cvmx_helper_pki_get_num_qpg_entry(enum cvmx_pki_qpg_qos qpg_qos);
+
+/**
+ * This function setups the qos table by allocating qpg entry and writing
+ * the provided parameters to that entry (offset).
+ * @param node          node number.
+ * @param qpg_cfg       pointer to struct containing qpg configuration
+ */
+int cvmx_helper_pki_set_qpg_entry(int node, struct cvmx_pki_qpg_config *qpg_cfg);
+
+/**
+ * This function sets up aura QOS for RED, backpressure and tail-drop.
+ *
+ * @param node       node number.
+ * @param aura       aura to configure.
+ * @param ena_red       enable RED based on [DROP] and [PASS] levels
+ *			1: enable 0:disable
+ * @param pass_thresh   pass threshold for RED.
+ * @param drop_thresh   drop threshold for RED
+ * @param ena_bp        enable backpressure based on [BP] level.
+ *			1:enable 0:disable
+ * @param bp_thresh     backpressure threshold.
+ * @param ena_drop      enable tail drop.
+ *			1:enable 0:disable
+ * @return Zero on success. Negative on failure
+ */
+int cvmx_helper_setup_aura_qos(int node, int aura, bool ena_red, bool ena_drop, u64 pass_thresh,
+			       u64 drop_thresh, bool ena_bp, u64 bp_thresh);
+
+/**
+ * This function maps specified bpid to all the auras from which it can receive bp and
+ * then maps that bpid to all the channels, that bpid can asserrt bp on.
+ *
+ * @param node          node number.
+ * @param aura          aura number which will back pressure specified bpid.
+ * @param bpid          bpid to map.
+ * @param chl_map       array of channels to map to that bpid.
+ * @param chl_cnt	number of channel/ports to map to that bpid.
+ * @return Zero on success. Negative on failure
+ */
+int cvmx_helper_pki_map_aura_chl_bpid(int node, u16 aura, u16 bpid, u16 chl_map[], u16 chl_cnt);
+
+/**
+ * This function sets up the global pool, aura and sso group
+ * resources which application can use between any interfaces
+ * and ports.
+ * @param node          node number
+ * @param gblsch        pointer to struct containing global
+ *                      scheduling parameters.
+ */
+int cvmx_helper_pki_set_gbl_schd(int node, struct cvmx_pki_global_schd *gblsch);
+
+/**
+ * This function sets up scheduling parameters (pool, aura, sso group etc)
+ * of an ipd port.
+ * @param xipd_port     ipd port number
+ * @param prtsch        pointer to struct containing port's
+ *                      scheduling parameters.
+ */
+int cvmx_helper_pki_init_port(int xipd_port, struct cvmx_pki_prt_schd *prtsch);
+
+/**
+ * This function sets up scheduling parameters (pool, aura, sso group etc)
+ * of an interface (all ports/channels on that interface).
+ * @param xiface        interface number with node.
+ * @param intfsch      pointer to struct containing interface
+ *                      scheduling parameters.
+ * @param gblsch       pointer to struct containing global scheduling parameters
+ *                      (can be NULL if not used)
+ */
+int cvmx_helper_pki_init_interface(const int xiface, struct cvmx_pki_intf_schd *intfsch,
+				   struct cvmx_pki_global_schd *gblsch);
+/**
+ * This function gets all the PKI parameters related to that
+ * particular port from hardware.
+ * @param xipd_port     ipd port number to get parameter of
+ * @param port_cfg      pointer to structure where to store read parameters
+ */
+void cvmx_pki_get_port_config(int xipd_port, struct cvmx_pki_port_config *port_cfg);
+
+/**
+ * This function sets all the PKI parameters related to that
+ * particular port in hardware.
+ * @param xipd_port     ipd port number to get parameter of
+ * @param port_cfg      pointer to structure containing port parameters
+ */
+void cvmx_pki_set_port_config(int xipd_port, struct cvmx_pki_port_config *port_cfg);
+
+/**
+ * This function displays all the PKI parameters related to that
+ * particular port.
+ * @param xipd_port      ipd port number to display parameter of
+ */
+void cvmx_pki_show_port_config(int xipd_port);
+
+/**
+ * Modifies maximum frame length to check.
+ * It modifies the global frame length set used by this port, any other
+ * port using the same set will get affected too.
+ * @param xipd_port	ipd port for which to modify max len.
+ * @param max_size	maximum frame length
+ */
+void cvmx_pki_set_max_frm_len(int xipd_port, u32 max_size);
+
+/**
+ * This function sets up all the ports of particular interface
+ * for chosen fcs mode. (only use for backward compatibility).
+ * New application can control it via init_interface calls.
+ * @param node          node number.
+ * @param interface     interface number.
+ * @param nports        number of ports
+ * @param has_fcs       1 -- enable fcs check and fcs strip.
+ *                      0 -- disable fcs check.
+ */
+void cvmx_helper_pki_set_fcs_op(int node, int interface, int nports, int has_fcs);
+
+/**
+ * This function sets the wqe buffer mode of all ports. First packet data buffer can reside
+ * either in same buffer as wqe OR it can go in separate buffer. If used the later mode,
+ * make sure software allocate enough buffers to now have wqe separate from packet data.
+ * @param node	                node number.
+ * @param pkt_outside_wqe	0 = The packet link pointer will be at word [FIRST_SKIP]
+ *				    immediately followed by packet data, in the same buffer
+ *				    as the work queue entry.
+ *				1 = The packet link pointer will be at word [FIRST_SKIP] in a new
+ *				    buffer separate from the work queue entry. Words following the
+ *				    WQE in the same cache line will be zeroed, other lines in the
+ *				    buffer will not be modified and will retain stale data (from the
+ *				    buffer’s previous use). This setting may decrease the peak PKI
+ *				    performance by up to half on small packets.
+ */
+void cvmx_helper_pki_set_wqe_mode(int node, bool pkt_outside_wqe);
+
+/**
+ * This function sets the Packet mode of all ports and styles to little-endian.
+ * It Changes write operations of packet data to L2C to
+ * be in little-endian. Does not change the WQE header format, which is
+ * properly endian neutral.
+ * @param node	                node number.
+ */
+void cvmx_helper_pki_set_little_endian(int node);
+
+void cvmx_helper_pki_set_dflt_pool(int node, int pool, int buffer_size, int buffer_count);
+void cvmx_helper_pki_set_dflt_aura(int node, int aura, int pool, int buffer_count);
+void cvmx_helper_pki_set_dflt_pool_buffer(int node, int buffer_count);
+
+void cvmx_helper_pki_set_dflt_aura_buffer(int node, int buffer_count);
+
+void cvmx_helper_pki_set_dflt_pkind_map(int node, int pkind, int style);
+
+void cvmx_helper_pki_get_dflt_style(int node, struct cvmx_pki_style_config *style_cfg);
+void cvmx_helper_pki_set_dflt_style(int node, struct cvmx_pki_style_config *style_cfg);
+
+void cvmx_helper_pki_get_dflt_qpg(int node, struct cvmx_pki_qpg_config *qpg_cfg);
+void cvmx_helper_pki_set_dflt_qpg(int node, struct cvmx_pki_qpg_config *qpg_cfg);
+
+void cvmx_helper_pki_no_dflt_init(int node);
+
+void cvmx_helper_pki_set_dflt_bp_en(int node, bool bp_en);
+
+void cvmx_pki_dump_wqe(const cvmx_wqe_78xx_t *wqp);
+
+int __cvmx_helper_pki_port_setup(int node, int xipd_port);
+
+int __cvmx_helper_pki_global_setup(int node);
+void cvmx_helper_pki_show_port_config(int xipd_port);
+
+int __cvmx_helper_pki_install_dflt_vlan(int node);
+void __cvmx_helper_pki_set_dflt_ltype_map(int node);
+int cvmx_helper_pki_route_dmac(int node, int style, u64 mac_addr, u64 mac_addr_mask,
+			       int final_style);
+int cvmx_pki_clone_style(int node, int style, u64 cluster_mask);
+void cvmx_helper_pki_modify_prtgrp(int xipd_port, int grp_ok, int grp_bad);
+int cvmx_helper_pki_route_prt_dmac(int xipd_port, u64 mac_addr, u64 mac_addr_mask, int grp);
+
+void cvmx_helper_pki_errata(int node);
+
+#endif /* __CVMX_HELPER_PKI_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-pko.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-pko.h
new file mode 100644
index 0000000..806102d
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-pko.h
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * PKO helper, configuration API
+ */
+
+#ifndef __CVMX_HELPER_PKO_H__
+#define __CVMX_HELPER_PKO_H__
+
+/* CSR typedefs have been moved to cvmx-pko-defs.h */
+
+/**
+ * cvmx_override_pko_queue_priority(int ipd_port, u64
+ * priorities[16]) is a function pointer. It is meant to allow
+ * customization of the PKO queue priorities based on the port
+ * number. Users should set this pointer to a function before
+ * calling any cvmx-helper operations.
+ */
+void (*cvmx_override_pko_queue_priority)(int ipd_port, u8 *priorities);
+
+/**
+ * Gets the fpa pool number of pko pool
+ */
+s64 cvmx_fpa_get_pko_pool(void);
+
+/**
+ * Gets the buffer size of pko pool
+ */
+u64 cvmx_fpa_get_pko_pool_block_size(void);
+
+/**
+ * Gets the buffer size  of pko pool
+ */
+u64 cvmx_fpa_get_pko_pool_buffer_count(void);
+
+int cvmx_helper_pko_init(void);
+
+/*
+ * This function is a no-op
+ * included here for backwards compatibility only.
+ */
+static inline int cvmx_pko_initialize_local(void)
+{
+	return 0;
+}
+
+int __cvmx_helper_pko_drain(void);
+int __cvmx_helper_interface_setup_pko(int interface);
+
+#endif /* __CVMX_HELPER_PKO_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-pko3.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-pko3.h
new file mode 100644
index 0000000..ca8d848
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-pko3.h
@@ -0,0 +1,76 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_HELPER_PKO3_H__
+#define __CVMX_HELPER_PKO3_H__
+
+/*
+ * Initialize PKO3 unit on the current node.
+ *
+ * Covers the common hardware, memory and global configuration.
+ * Per-interface initialization is performed separately.
+ *
+ * @return 0 on success.
+ *
+ */
+int cvmx_helper_pko3_init_global(unsigned int node);
+int __cvmx_helper_pko3_init_global(unsigned int node, u16 gaura);
+
+/**
+ * Initialize a simple interface with a a given number of
+ * fair or prioritized queues.
+ * This function will assign one channel per sub-interface.
+ */
+int __cvmx_pko3_config_gen_interface(int xiface, u8 subif, u8 num_queues, bool prioritized);
+
+/*
+ * Configure and initialize PKO3 for an interface
+ *
+ * @param interface is the interface number to configure
+ * @return 0 on success.
+ *
+ */
+int cvmx_helper_pko3_init_interface(int xiface);
+int __cvmx_pko3_helper_dqs_activate(int xiface, int index, bool min_pad);
+
+/**
+ * Uninitialize PKO3 interface
+ *
+ * Release all resources held by PKO for an interface.
+ * The shutdown code is the same for all supported interfaces.
+ */
+int cvmx_helper_pko3_shut_interface(int xiface);
+
+/**
+ * Shutdown PKO3
+ *
+ * Should be called after all interfaces have been shut down on the PKO3.
+ *
+ * Disables the PKO, frees all its buffers.
+ */
+int cvmx_helper_pko3_shutdown(unsigned int node);
+
+/**
+ * Show integrated PKO configuration.
+ *
+ * @param node	   node number
+ */
+int cvmx_helper_pko3_config_dump(unsigned int node);
+
+/**
+ * Show integrated PKO statistics.
+ *
+ * @param node	   node number
+ */
+int cvmx_helper_pko3_stats_dump(unsigned int node);
+
+/**
+ * Clear PKO statistics.
+ *
+ * @param node	   node number
+ */
+void cvmx_helper_pko3_stats_clear(unsigned int node);
+
+#endif /* __CVMX_HELPER_PKO3_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-rgmii.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-rgmii.h
new file mode 100644
index 0000000..2a206a8
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-rgmii.h
@@ -0,0 +1,99 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Functions for RGMII/GMII/MII initialization, configuration,
+ * and monitoring.
+ */
+
+#ifndef __CVMX_HELPER_RGMII_H__
+#define __CVMX_HELPER_RGMII_H__
+
+/**
+ * @INTERNAL
+ * Probe RGMII ports and determine the number present
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Number of RGMII/GMII/MII ports (0-4).
+ */
+int __cvmx_helper_rgmii_probe(int xiface);
+
+/**
+ * Put an RGMII interface in loopback mode. Internal packets sent
+ * out will be received back again on the same port. Externally
+ * received packets will echo back out.
+ *
+ * @param port   IPD port number to loop.
+ */
+void cvmx_helper_rgmii_internal_loopback(int port);
+
+/**
+ * @INTERNAL
+ * Configure all of the ASX, GMX, and PKO regsiters required
+ * to get RGMII to function on the supplied interface.
+ *
+ * @param xiface PKO Interface to configure (0 or 1)
+ *
+ * @return Zero on success
+ */
+int __cvmx_helper_rgmii_enable(int xiface);
+
+/**
+ * @INTERNAL
+ * Return the link state of an IPD/PKO port as returned by
+ * auto negotiation. The result of this function may not match
+ * Octeon's link config if auto negotiation has changed since
+ * the last call to cvmx_helper_link_set().
+ *
+ * @param ipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t __cvmx_helper_gmii_link_get(int ipd_port);
+
+/**
+ * @INTERNAL
+ * Return the link state of an IPD/PKO port as returned by
+ * auto negotiation. The result of this function may not match
+ * Octeon's link config if auto negotiation has changed since
+ * the last call to cvmx_helper_link_set().
+ *
+ * @param ipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t __cvmx_helper_rgmii_link_get(int ipd_port);
+
+/**
+ * @INTERNAL
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead.
+ *
+ * @param ipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_rgmii_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
+
+/**
+ * @INTERNAL
+ * Configure a port for internal and/or external loopback. Internal loopback
+ * causes packets sent by the port to be received by Octeon. External loopback
+ * causes packets received from the wire to sent out again.
+ *
+ * @param ipd_port IPD/PKO port to loopback.
+ * @param enable_internal
+ *                 Non zero if you want internal loopback
+ * @param enable_external
+ *                 Non zero if you want external loopback
+ *
+ * @return Zero on success, negative on failure.
+ */
+int __cvmx_helper_rgmii_configure_loopback(int ipd_port, int enable_internal, int enable_external);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-sfp.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-sfp.h
new file mode 100644
index 0000000..6fe5509
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-sfp.h
@@ -0,0 +1,437 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper functions to abstract SFP and QSFP connectors
+ */
+
+#ifndef __CVMX_HELPER_SFP_H__
+#define __CVMX_HELPER_SFP_H__
+
+/**
+ * Maximum size for the SFP EEPROM.  Currently only 96 bytes are used.
+ */
+#define CVMX_SFP_MAX_EEPROM_SIZE 0x100
+
+/**
+ * Default address of sfp EEPROM
+ */
+#define CVMX_SFP_DEFAULT_I2C_ADDR 0x50
+
+/**
+ * Default address of SFP diagnostics chip
+ */
+#define CVMX_SFP_DEFAULT_DIAG_I2C_ADDR 0x51
+
+struct cvmx_fdt_sfp_info;
+struct cvmx_fdt_gpio_info;
+/**
+ * Connector type for module, usually we only see SFP and QSFPP
+ */
+enum cvmx_phy_sfp_conn_type {
+	CVMX_SFP_CONN_GBIC = 0x01,	 /** GBIC */
+	CVMX_SFP_CONN_SFP = 0x03,	 /** SFP/SFP+/SFP28 */
+	CVMX_SFP_CONN_QSFP = 0x0C,	 /** 1G QSFP (obsolete) */
+	CVMX_SFP_CONN_QSFPP = 0x0D,	 /** QSFP+ or later */
+	CVMX_SFP_CONN_QSFP28 = 0x11,	 /** QSFP28 (100Gbps) */
+	CVMX_SFP_CONN_MICRO_QSFP = 0x17, /** Micro QSFP */
+	CVMX_SFP_CONN_QSFP_DD = 0x18,	 /** QSFP-DD Double Density 8X */
+	CVMX_SFP_CONN_SFP_DD = 0x1A,	 /** SFP-DD Double Density 2X */
+};
+
+/**
+ * module type plugged into a SFP/SFP+/QSFP+ port
+ */
+enum cvmx_phy_sfp_mod_type {
+	CVMX_SFP_MOD_UNKNOWN = 0, /** Unknown or unspecified */
+	/** Fiber optic module (LC connector) */
+	CVMX_SFP_MOD_OPTICAL_LC = 0x7,
+	/** Multiple optical */
+	CVMX_SFP_MOD_MULTIPLE_OPTICAL = 0x9,
+	/** Fiber optic module (pigtail, no connector) */
+	CVMX_SFP_MOD_OPTICAL_PIGTAIL = 0xB,
+	CVMX_SFP_MOD_COPPER_PIGTAIL = 0x21, /** copper module */
+	CVMX_SFP_MOD_RJ45 = 0x22,	    /** RJ45 (i.e. 10GBase-T) */
+	/** No separable connector (SFP28/copper) */
+	CVMX_SFP_MOD_NO_SEP_CONN = 0x23,
+	/** MXC 2X16 */
+	CVMX_SFP_MOD_MXC_2X16 = 0x24,
+	/** CS optical connector */
+	CVMX_SFP_MOD_CS_OPTICAL = 0x25,
+	/** Mini CS optical connector */
+	CVMX_SFP_MOD_MINI_CS_OPTICAL = 0x26,
+	/** Unknown/other module type */
+	CVMX_SFP_MOD_OTHER
+};
+
+/** Peak rate supported by SFP cable */
+enum cvmx_phy_sfp_rate {
+	CVMX_SFP_RATE_UNKNOWN, /** Unknown rate */
+	CVMX_SFP_RATE_1G,      /** 1Gbps */
+	CVMX_SFP_RATE_10G,     /** 10Gbps */
+	CVMX_SFP_RATE_25G,     /** 25Gbps */
+	CVMX_SFP_RATE_40G,     /** 40Gbps */
+	CVMX_SFP_RATE_100G     /** 100Gbps */
+};
+
+/**
+ * Cable compliance specification
+ * See table 4-4 from SFF-8024 for the extended specification compliance codes
+ */
+enum cvmx_phy_sfp_cable_ext_compliance {
+	CVMX_SFP_CABLE_UNSPEC = 0,
+	CVMX_SFP_CABLE_100G_25GAUI_C2M_AOC_HIGH_BER = 0x01, /** Active optical cable */
+	CVMX_SFP_CABLE_100G_SR4_25G_SR = 0x2,
+	CVMX_SFP_CABLE_100G_LR4_25G_LR = 0x3,
+	CVMX_SFP_CABLE_100G_ER4_25G_ER = 0x4,
+	CVMX_SFP_CABLE_100G_SR10 = 0x5,
+	CVMX_SFP_CABLE_100G_CWDM4_MSA = 0x6,
+	CVMX_SFP_CABLE_100G_PSM4 = 0x7,
+	CVMX_SFP_CABLE_100G_25GAUI_C2M_ACC_HIGH_BER = 0x8,
+	CVMX_SFP_CABLE_100G_CWDM4 = 0x9,
+	CVMX_SFP_CABLE_100G_CR4_25G_CR_CA_L = 0xB,
+	CVMX_SFP_CABLE_25G_CR_CA_S = 0xC,
+	CVMX_SFP_CABLE_25G_CR_CA_N = 0xD,
+	CVMX_SFP_CABLE_40G_ER4 = 0x10,
+	CVMX_SFP_CABLE_4X10G_SR = 0x11,
+	CVMX_SFP_CABLE_40G_PSM4 = 0x12,
+	CVMX_SFP_CABLE_G959_1_P1I1_2D1 = 0x13,
+	CVMX_SFP_CABLE_G959_1_P1S1_2D2 = 0x14,
+	CVMX_SFP_CABLE_G959_1_P1L1_2D2 = 0x15,
+	CVMX_SFP_CABLE_10GBASE_T = 0x16,
+	CVMX_SFP_CABLE_100G_CLR4 = 0x17,
+	CVMX_SFP_CABLE_100G_25GAUI_C2M_AOC_LOW_BER = 0x18,
+	CVMX_SFP_CABLE_100G_25GAUI_C2M_ACC_LOW_BER = 0x19,
+	CVMX_SFP_CABLE_100G_2_LAMBDA_DWDM = 0x1a,
+	CVMX_SFP_CABLE_100G_1550NM_WDM = 0x1b,
+	CVMX_SFP_CABLE_10GBASE_T_SR = 0x1c,
+	CVMX_SFP_CABLE_5GBASE_T = 0x1d,
+	CVMX_SFP_CABLE_2_5GBASE_T = 0x1e,
+	CVMX_SFP_CABLE_40G_SWDM4 = 0x1f,
+	CVMX_SFP_CABLE_100G_SWDM4 = 0x20,
+	CVMX_SFP_CABLE_100G_PAM4_BIDI = 0x21,
+	CVMX_SFP_CABLE_100G_4WDM_10_FEC_HOST = 0x22,
+	CVMX_SFP_CABLE_100G_4WDM_20_FEC_HOST = 0x23,
+	CVMX_SFP_CABLE_100G_4WDM_40_FEC_HOST = 0x24,
+	CVMX_SFP_CABLE_100GBASE_DR_CAUI4_NO_FEC = 0x25,
+	CVMX_SFP_CABLE_100G_FR_CAUI4_NO_FEC = 0x26,
+	CVMX_SFP_CABLE_100G_LR_CAUI4_NO_FEC = 0x27,
+	CVMX_SFP_CABLE_ACTIVE_COPPER_50_100_200GAUI_LOW_BER = 0x30,
+	CVMX_SFP_CABLE_ACTIVE_OPTICAL_50_100_200GAUI_LOW_BER = 0x31,
+	CVMX_SFP_CABLE_ACTIVE_COPPER_50_100_200GAUI_HI_BER = 0x32,
+	CVMX_SFP_CABLE_ACTIVE_OPTICAL_50_100_200GAUI_HI_BER = 0x33,
+	CVMX_SFP_CABLE_50_100_200G_CR = 0x40,
+	CVMX_SFP_CABLE_50_100_200G_SR = 0x41,
+	CVMX_SFP_CABLE_50GBASE_FR_200GBASE_DR4 = 0x42,
+	CVMX_SFP_CABLE_200GBASE_FR4 = 0x43,
+	CVMX_SFP_CABLE_200G_1550NM_PSM4 = 0x44,
+	CVMX_SFP_CABLE_50GBASE_LR = 0x45,
+	CVMX_SFP_CABLE_200GBASE_LR4 = 0x46,
+	CVMX_SFP_CABLE_64GFC_EA = 0x50,
+	CVMX_SFP_CABLE_64GFC_SW = 0x51,
+	CVMX_SFP_CABLE_64GFC_LW = 0x52,
+	CVMX_SFP_CABLE_128GFC_EA = 0x53,
+	CVMX_SFP_CABLE_128GFC_SW = 0x54,
+	CVMX_SFP_CABLE_128GFC_LW = 0x55,
+
+};
+
+/** Optical modes module is compliant with */
+enum cvmx_phy_sfp_10g_eth_compliance {
+	CVMX_SFP_CABLE_10GBASE_ER = 0x80,  /** 10G ER */
+	CVMX_SFP_CABLE_10GBASE_LRM = 0x40, /** 10G LRM */
+	CVMX_SFP_CABLE_10GBASE_LR = 0x20,  /** 10G LR */
+	CVMX_SFP_CABLE_10GBASE_SR = 0x10   /** 10G SR */
+};
+
+/** Diagnostic ASIC compatibility */
+enum cvmx_phy_sfp_sff_8472_diag_rev {
+	CVMX_SFP_SFF_8472_NO_DIAG = 0x00,
+	CVMX_SFP_SFF_8472_REV_9_3 = 0x01,
+	CVMX_SFP_SFF_8472_REV_9_5 = 0x02,
+	CVMX_SFP_SFF_8472_REV_10_2 = 0x03,
+	CVMX_SFP_SFF_8472_REV_10_4 = 0x04,
+	CVMX_SFP_SFF_8472_REV_11_0 = 0x05,
+	CVMX_SFP_SFF_8472_REV_11_3 = 0x06,
+	CVMX_SFP_SFF_8472_REV_11_4 = 0x07,
+	CVMX_SFP_SFF_8472_REV_12_0 = 0x08,
+	CVMX_SFP_SFF_8472_REV_UNALLOCATED = 0xff
+};
+
+/**
+ * Data structure describing the current SFP or QSFP EEPROM
+ */
+struct cvmx_sfp_mod_info {
+	enum cvmx_phy_sfp_conn_type conn_type; /** Connector type */
+	enum cvmx_phy_sfp_mod_type mod_type;   /** Module type */
+	enum cvmx_phy_sfp_rate rate;	       /** Rate of module */
+	/** 10G Ethernet Compliance codes (logical OR) */
+	enum cvmx_phy_sfp_10g_eth_compliance eth_comp;
+	/** Extended Cable compliance */
+	enum cvmx_phy_sfp_cable_ext_compliance cable_comp;
+	u8 vendor_name[17]; /** Module vendor name */
+	u8 vendor_oui[3];   /** vendor OUI */
+	u8 vendor_pn[17];   /** Vendor part number */
+	u8 vendor_rev[5];   /** Vendor revision */
+	u8 vendor_sn[17];   /** Vendor serial number */
+	u8 date_code[9];    /** Date code */
+	bool valid;	    /** True if module is valid */
+	bool active_cable;  /** False for passive copper */
+	bool copper_cable;  /** True if cable is copper */
+	/** True if module is limiting (i.e. not passive copper) */
+	bool limiting;
+	/** Maximum length of copper cable in meters */
+	int max_copper_cable_len;
+	/** Max single mode cable length in meters */
+	int max_single_mode_cable_length;
+	/** Max 50um OM2 cable length */
+	int max_50um_om2_cable_length;
+	/** Max 62.5um OM1 cable length */
+	int max_62_5um_om1_cable_length;
+	/** Max 50um OM4 cable length */
+	int max_50um_om4_cable_length;
+	/** Max 50um OM3 cable length */
+	int max_50um_om3_cable_length;
+	/** Minimum bitrate in Mbps */
+	int bitrate_min;
+	/** Maximum bitrate in Mbps */
+	int bitrate_max;
+	/**
+	 * Set to true if forward error correction is required,
+	 * for example, a 25GBase-CR CA-S cable.
+	 *
+	 * FEC should only be disabled at 25G with CA-N cables.  FEC is required
+	 * with 5M and longer cables.
+	 */
+	bool fec_required;
+	/** True if RX output is linear */
+	bool linear_rx_output;
+	/** Power level, can be 1, 2 or 3 */
+	int power_level;
+	/** False if conventional cooling is used, true for active cooling */
+	bool cooled_laser;
+	/** True if internal retimer or clock and data recovery circuit */
+	bool internal_cdr;
+	/** True if LoS is implemented */
+	bool los_implemented;
+	/** True if LoS is inverted from the standard */
+	bool los_inverted;
+	/** True if TX_FAULT is implemented */
+	bool tx_fault_implemented;
+	/** True if TX_DISABLE is implemented */
+	bool tx_disable_implemented;
+	/** True if RATE_SELECT is implemented */
+	bool rate_select_implemented;
+	/** True if tuneable transmitter technology is used */
+	bool tuneable_transmitter;
+	/** True if receiver decision threshold is implemented */
+	bool rx_decision_threshold_implemented;
+	/** True if diagnostic monitoring present */
+	bool diag_monitoring;
+	/** True if diagnostic address 0x7f is used for selecting the page */
+	bool diag_paging;
+	/** Diagnostic feature revision */
+	enum cvmx_phy_sfp_sff_8472_diag_rev diag_rev;
+	/** True if an address change sequence is required for diagnostics */
+	bool diag_addr_change_required;
+	/** True if RX power is averaged, false if OMA */
+	bool diag_rx_power_averaged;
+	/** True if diagnostics are externally calibrated */
+	bool diag_externally_calibrated;
+	/** True if diagnostics are internally calibrated */
+	bool diag_internally_calibrated;
+	/** True of soft rate select control implemented per SFF-8431 */
+	bool diag_soft_rate_select_control;
+	/** True if application select control implemented per SFF-8079 */
+	bool diag_app_select_control;
+	/** True if soft RATE_SELECT control and moonitoring implemented */
+	bool diag_soft_rate_select_implemented;
+	/** True if soft RX_LOS monitoring implemented */
+	bool diag_soft_rx_los_implemented;
+	/** True if soft TX_FAULT monitoring implemented */
+	bool diag_soft_tx_fault_implemented;
+	/** True if soft TX_DISABLE control and monitoring implemented */
+	bool diag_soft_tx_disable_implemented;
+	/** True if alarm/warning flags implemented */
+	bool diag_alarm_warning_flags_implemented;
+};
+
+/**
+ * Reads the SFP EEPROM using the i2c bus
+ *
+ * @param[out]	buffer		Buffer to store SFP EEPROM data in
+ *				The buffer should be SFP_MAX_EEPROM_SIZE bytes.
+ * @param	i2c_bus		i2c bus number to read from for SFP port
+ * @param	i2c_addr	i2c address to use, 0 for default
+ *
+ * @return	-1 if invalid bus or i2c read error, 0 for success
+ */
+int cvmx_phy_sfp_read_i2c_eeprom(u8 *buffer, int i2c_bus, int i2c_addr);
+
+/**
+ * Reads the SFP/SFP+/QSFP EEPROM and outputs the type of module or cable
+ * plugged in
+ *
+ * @param[out]	sfp_info	Info about SFP module
+ * @param[in]	buffer		SFP EEPROM buffer to parse
+ *
+ * @return	0 on success, -1 if error reading EEPROM or if EEPROM corrupt
+ */
+int cvmx_phy_sfp_parse_eeprom(struct cvmx_sfp_mod_info *sfp_info, const u8 *buffer);
+
+/**
+ * Prints out information about a SFP/QSFP device
+ *
+ * @param[in]	sfp_info	data structure to print
+ */
+void cvmx_phy_sfp_print_info(const struct cvmx_sfp_mod_info *sfp_info);
+
+/**
+ * Reads and parses SFP/QSFP EEPROM
+ *
+ * @param	sfp	sfp handle to read
+ *
+ * @return	0 for success, -1 on error.
+ */
+int cvmx_sfp_read_i2c_eeprom(struct cvmx_fdt_sfp_info *sfp);
+
+/**
+ * Returns the information about a SFP/QSFP device
+ *
+ * @param       sfp             sfp handle
+ *
+ * @return      sfp_info        Pointer sfp mod info data structure
+ */
+const struct cvmx_sfp_mod_info *cvmx_phy_get_sfp_mod_info(const struct cvmx_fdt_sfp_info *sfp);
+
+/**
+ * Function called to check and return the status of the mod_abs pin or
+ * mod_pres pin for QSFPs.
+ *
+ * @param	sfp	Handle to SFP information.
+ * @param	data	User-defined data passed to the function
+ *
+ * @return	0 if absent, 1 if present, -1 on error
+ */
+int cvmx_sfp_check_mod_abs(struct cvmx_fdt_sfp_info *sfp, void *data);
+
+/**
+ * Registers a function to be called to check mod_abs/mod_pres for a SFP/QSFP
+ * slot.
+ *
+ * @param	sfp		Handle to SFP data structure
+ * @param	check_mod_abs	Function to be called or NULL to remove
+ * @param	mod_abs_data	User-defined data to be passed to check_mod_abs
+ *
+ * @return	0 for success
+ */
+int cvmx_sfp_register_check_mod_abs(struct cvmx_fdt_sfp_info *sfp,
+				    int (*check_mod_abs)(struct cvmx_fdt_sfp_info *sfp, void *data),
+				    void *mod_abs_data);
+
+/**
+ * Registers a function to be called whenever the mod_abs/mod_pres signal
+ * changes.
+ *
+ * @param	sfp		Handle to SFP data structure
+ * @param	mod_abs_changed	Function called whenever mod_abs is changed
+ *				or NULL to remove.
+ * @param	mod_abs_changed_data	User-defined data passed to
+ *					mod_abs_changed
+ *
+ * @return	0 for success
+ */
+int cvmx_sfp_register_mod_abs_changed(struct cvmx_fdt_sfp_info *sfp,
+				      int (*mod_abs_changed)(struct cvmx_fdt_sfp_info *sfp, int val,
+							     void *data),
+				      void *mod_abs_changed_data);
+
+/**
+ * Function called to check and return the status of the tx_fault pin
+ *
+ * @param	sfp	Handle to SFP information.
+ * @param	data	User-defined data passed to the function
+ *
+ * @return	0 if signal present, 1 if signal absent, -1 on error
+ */
+int cvmx_sfp_check_tx_fault(struct cvmx_fdt_sfp_info *sfp, void *data);
+
+/**
+ * Function called to check and return the status of the rx_los pin
+ *
+ * @param	sfp	Handle to SFP information.
+ * @param	data	User-defined data passed to the function
+ *
+ * @return	0 if signal present, 1 if signal absent, -1 on error
+ */
+int cvmx_sfp_check_rx_los(struct cvmx_fdt_sfp_info *sfp, void *data);
+
+/**
+ * Registers a function to be called whenever rx_los changes
+ *
+ * @param	sfp		Handle to SFP data structure
+ * @param	rx_los_changed	Function to be called when rx_los changes
+ *				or NULL to remove the function
+ * @param	rx_los_changed_data	User-defined data passed to
+ *					rx_los_changed
+ *
+ * @return	0 for success
+ */
+int cvmx_sfp_register_rx_los_changed(struct cvmx_fdt_sfp_info *sfp,
+				     int (*rx_los_changed)(struct cvmx_fdt_sfp_info *sfp, int val,
+							   void *data),
+				     void *rx_los_changed_data);
+
+/**
+ * Parses the device tree for SFP and QSFP slots
+ *
+ * @param	fdt_addr	Address of flat device-tree
+ *
+ * @return	0 for success, -1 on error
+ */
+int cvmx_sfp_parse_device_tree(const void *fdt_addr);
+
+/**
+ * Given an IPD port number find the corresponding SFP or QSFP slot
+ *
+ * @param	ipd_port	IPD port number to search for
+ *
+ * @return	pointer to SFP data structure or NULL if not found
+ */
+struct cvmx_fdt_sfp_info *cvmx_sfp_find_slot_by_port(int ipd_port);
+
+/**
+ * Given a fdt node offset find the corresponding SFP or QSFP slot
+ *
+ * @param	of_offset	flat device tree node offset
+ *
+ * @return	pointer to SFP data structure or NULL if not found
+ */
+struct cvmx_fdt_sfp_info *cvmx_sfp_find_slot_by_fdt_node(int of_offset);
+
+/**
+ * Reads the EEPROMs of all SFP modules.
+ *
+ * @return 0 for success
+ */
+int cvmx_sfp_read_all_modules(void);
+
+/**
+ * Validates if the module is correct for the specified port
+ *
+ * @param[in]	sfp	SFP port to check
+ * @param	mode	interface mode
+ *
+ * @return	true if module is valid, false if invalid
+ * NOTE: This will also toggle the error LED, if present
+ */
+bool cvmx_sfp_validate_module(struct cvmx_fdt_sfp_info *sfp, int mode);
+
+/**
+ * Prints information about the SFP module
+ *
+ * @param[in]	sfp	sfp data structure
+ */
+void cvmx_sfp_print_info(const struct cvmx_fdt_sfp_info *sfp);
+
+#endif /* __CVMX_HELPER_SFP_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-sgmii.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-sgmii.h
new file mode 100644
index 0000000..c5110c9
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-sgmii.h
@@ -0,0 +1,81 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Functions for SGMII initialization, configuration,
+ * and monitoring.
+ */
+
+#ifndef __CVMX_HELPER_SGMII_H__
+#define __CVMX_HELPER_SGMII_H__
+
+/**
+ * @INTERNAL
+ * Probe a SGMII interface and determine the number of ports
+ * connected to it. The SGMII interface should still be down after
+ * this call.
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Number of ports on the interface. Zero to disable.
+ */
+int __cvmx_helper_sgmii_probe(int xiface);
+int __cvmx_helper_sgmii_enumerate(int xiface);
+
+/**
+ * @INTERNAL
+ * Bringup and enable a SGMII interface. After this call packet
+ * I/O should be fully functional. This is called with IPD
+ * enabled but PKO disabled.
+ *
+ * @param xiface Interface to bring up
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_sgmii_enable(int xiface);
+
+/**
+ * @INTERNAL
+ * Return the link state of an IPD/PKO port as returned by
+ * auto negotiation. The result of this function may not match
+ * Octeon's link config if auto negotiation has changed since
+ * the last call to cvmx_helper_link_set().
+ *
+ * @param ipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t __cvmx_helper_sgmii_link_get(int ipd_port);
+
+/**
+ * @INTERNAL
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead.
+ *
+ * @param ipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_sgmii_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
+
+/**
+ * @INTERNAL
+ * Configure a port for internal and/or external loopback. Internal loopback
+ * causes packets sent by the port to be received by Octeon. External loopback
+ * causes packets received from the wire to sent out again.
+ *
+ * @param ipd_port IPD/PKO port to loopback.
+ * @param enable_internal
+ *                 Non zero if you want internal loopback
+ * @param enable_external
+ *                 Non zero if you want external loopback
+ *
+ * @return Zero on success, negative on failure.
+ */
+int __cvmx_helper_sgmii_configure_loopback(int ipd_port, int enable_internal, int enable_external);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-spi.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-spi.h
new file mode 100644
index 0000000..cae72f2
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-spi.h
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Functions for SPI initialization, configuration,
+ * and monitoring.
+ */
+
+#ifndef __CVMX_HELPER_SPI_H__
+#define __CVMX_HELPER_SPI_H__
+
+#include "cvmx-helper.h"
+
+/**
+ * @INTERNAL
+ * Probe a SPI interface and determine the number of ports
+ * connected to it. The SPI interface should still be down after
+ * this call.
+ *
+ * @param interface Interface to probe
+ *
+ * @return Number of ports on the interface. Zero to disable.
+ */
+int __cvmx_helper_spi_probe(int interface);
+int __cvmx_helper_spi_enumerate(int interface);
+
+/**
+ * @INTERNAL
+ * Bringup and enable a SPI interface. After this call packet I/O
+ * should be fully functional. This is called with IPD enabled but
+ * PKO disabled.
+ *
+ * @param interface Interface to bring up
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_spi_enable(int interface);
+
+/**
+ * @INTERNAL
+ * Return the link state of an IPD/PKO port as returned by
+ * auto negotiation. The result of this function may not match
+ * Octeon's link config if auto negotiation has changed since
+ * the last call to cvmx_helper_link_set().
+ *
+ * @param ipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t __cvmx_helper_spi_link_get(int ipd_port);
+
+/**
+ * @INTERNAL
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead.
+ *
+ * @param ipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_spi_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
+
+/**
+ * Sets the spi timeout in config data
+ * @param timeout value
+ */
+void cvmx_spi_config_set_timeout(int timeout);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-srio.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-srio.h
new file mode 100644
index 0000000..2b7571d
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-srio.h
@@ -0,0 +1,72 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Functions for SRIO initialization, configuration,
+ * and monitoring.
+ */
+
+#ifndef __CVMX_HELPER_SRIO_H__
+#define __CVMX_HELPER_SRIO_H__
+
+/**
+ * @INTERNAL
+ * Convert interface number to sRIO link number
+ * per SoC model.
+ *
+ * @param xiface Interface to convert
+ *
+ * @return Srio link number
+ */
+int __cvmx_helper_srio_port(int xiface);
+
+/**
+ * @INTERNAL
+ * Probe a SRIO interface and determine the number of ports
+ * connected to it. The SRIO interface should still be down after
+ * this call.
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Number of ports on the interface. Zero to disable.
+ */
+int __cvmx_helper_srio_probe(int xiface);
+
+/**
+ * @INTERNAL
+ * Bringup and enable a SRIO interface. After this call packet
+ * I/O should be fully functional. This is called with IPD
+ * enabled but PKO disabled.
+ *
+ * @param xiface Interface to bring up
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_srio_enable(int xiface);
+
+/**
+ * @INTERNAL
+ * Return the link state of an IPD/PKO port as returned by SRIO link status.
+ *
+ * @param ipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t __cvmx_helper_srio_link_get(int ipd_port);
+
+/**
+ * @INTERNAL
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead.
+ *
+ * @param ipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_srio_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-util.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-util.h
new file mode 100644
index 0000000..cf98eae
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-util.h
@@ -0,0 +1,412 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_HELPER_UTIL_H__
+#define __CVMX_HELPER_UTIL_H__
+
+#include "cvmx-mio-defs.h"
+#include "cvmx-helper.h"
+#include "cvmx-fpa.h"
+
+typedef char cvmx_pknd_t;
+typedef char cvmx_bpid_t;
+
+#define CVMX_INVALID_PKND ((cvmx_pknd_t)-1)
+#define CVMX_INVALID_BPID ((cvmx_bpid_t)-1)
+#define CVMX_MAX_PKND	  ((cvmx_pknd_t)64)
+#define CVMX_MAX_BPID	  ((cvmx_bpid_t)64)
+
+#define CVMX_HELPER_MAX_IFACE 11
+#define CVMX_HELPER_MAX_PORTS 16
+
+/* Maximum range for normalized (a.k.a. IPD) port numbers (12-bit field) */
+#define CVMX_PKO3_IPD_NUM_MAX 0x1000 //FIXME- take it from someplace else ?
+#define CVMX_PKO3_DQ_NUM_MAX  0x400  // 78xx has 1024 queues
+
+#define CVMX_PKO3_IPD_PORT_NULL (CVMX_PKO3_IPD_NUM_MAX - 1)
+#define CVMX_PKO3_IPD_PORT_LOOP 0
+
+struct cvmx_xport {
+	int node;
+	int port;
+};
+
+typedef struct cvmx_xport cvmx_xport_t;
+
+static inline struct cvmx_xport cvmx_helper_ipd_port_to_xport(int ipd_port)
+{
+	struct cvmx_xport r;
+
+	r.port = ipd_port & (CVMX_PKO3_IPD_NUM_MAX - 1);
+	r.node = (ipd_port >> 12) & CVMX_NODE_MASK;
+	return r;
+}
+
+static inline int cvmx_helper_node_to_ipd_port(int node, int index)
+{
+	return (node << 12) + index;
+}
+
+struct cvmx_xdq {
+	int node;
+	int queue;
+};
+
+typedef struct cvmx_xdq cvmx_xdq_t;
+
+static inline struct cvmx_xdq cvmx_helper_queue_to_xdq(int queue)
+{
+	struct cvmx_xdq r;
+
+	r.queue = queue & (CVMX_PKO3_DQ_NUM_MAX - 1);
+	r.node = (queue >> 10) & CVMX_NODE_MASK;
+	return r;
+}
+
+static inline int cvmx_helper_node_to_dq(int node, int queue)
+{
+	return (node << 10) + queue;
+}
+
+struct cvmx_xiface {
+	int node;
+	int interface;
+};
+
+typedef struct cvmx_xiface cvmx_xiface_t;
+
+/**
+ * Return node and interface number from XIFACE.
+ *
+ * @param xiface interface with node information
+ *
+ * @return struct that contains node and interface number.
+ */
+static inline struct cvmx_xiface cvmx_helper_xiface_to_node_interface(int xiface)
+{
+	cvmx_xiface_t interface_node;
+
+	/*
+	 * If the majic number 0xde0000 is not present in the
+	 * interface, then assume it is node 0.
+	 */
+
+	if (((xiface >> 0x8) & 0xff) == 0xde) {
+		interface_node.node = (xiface >> 16) & CVMX_NODE_MASK;
+		interface_node.interface = xiface & 0xff;
+	} else {
+		interface_node.node = cvmx_get_node_num();
+		interface_node.interface = xiface & 0xff;
+	}
+	return interface_node;
+}
+
+/* Used internally only*/
+static inline bool __cvmx_helper_xiface_is_null(int xiface)
+{
+	return (xiface & 0xff) == 0xff;
+}
+
+#define __CVMX_XIFACE_NULL 0xff
+
+/**
+ * Return interface with majic number and node information (XIFACE)
+ *
+ * @param node       node of the interface referred to
+ * @param interface  interface to use.
+ *
+ * @return
+ */
+static inline int cvmx_helper_node_interface_to_xiface(int node, int interface)
+{
+	return ((node & CVMX_NODE_MASK) << 16) | (0xde << 8) | (interface & 0xff);
+}
+
+/**
+ * Free the pip packet buffers contained in a work queue entry.
+ * The work queue entry is not freed.
+ *
+ * @param work   Work queue entry with packet to free
+ */
+static inline void cvmx_helper_free_pip_pkt_data(cvmx_wqe_t *work)
+{
+	u64 number_buffers;
+	cvmx_buf_ptr_t buffer_ptr;
+	cvmx_buf_ptr_t next_buffer_ptr;
+	u64 start_of_buffer;
+
+	number_buffers = work->word2.s.bufs;
+	if (number_buffers == 0)
+		return;
+
+	buffer_ptr = work->packet_ptr;
+
+	/* Since the number of buffers is not zero, we know this is not a dynamic
+	   short packet. We need to check if it is a packet received with
+	   IPD_CTL_STATUS[NO_WPTR]. If this is true, we need to free all buffers
+	   except for the first one. The caller doesn't expect their WQE pointer
+	   to be freed */
+	start_of_buffer = ((buffer_ptr.s.addr >> 7) - buffer_ptr.s.back) << 7;
+	if (cvmx_ptr_to_phys(work) == start_of_buffer) {
+		next_buffer_ptr = *(cvmx_buf_ptr_t *)cvmx_phys_to_ptr(buffer_ptr.s.addr - 8);
+		buffer_ptr = next_buffer_ptr;
+		number_buffers--;
+	}
+
+	while (number_buffers--) {
+		/* Remember the back pointer is in cache lines, not 64bit words */
+		start_of_buffer = ((buffer_ptr.s.addr >> 7) - buffer_ptr.s.back) << 7;
+		/* Read pointer to next buffer before we free the current buffer. */
+		next_buffer_ptr = *(cvmx_buf_ptr_t *)cvmx_phys_to_ptr(buffer_ptr.s.addr - 8);
+		cvmx_fpa_free(cvmx_phys_to_ptr(start_of_buffer), buffer_ptr.s.pool, 0);
+		buffer_ptr = next_buffer_ptr;
+	}
+}
+
+/**
+ * Free the pki packet buffers contained in a work queue entry.
+ * If first packet buffer contains wqe, wqe gets freed too so do not access
+ * wqe after calling this function.
+ * This function asssumes that buffers to be freed are from
+ * Naturally aligned pool/aura.
+ * It does not use don't write back.
+ * @param work   Work queue entry with packet to free
+ */
+static inline void cvmx_helper_free_pki_pkt_data(cvmx_wqe_t *work)
+{
+	u64 number_buffers;
+	u64 start_of_buffer;
+	cvmx_buf_ptr_pki_t next_buffer_ptr;
+	cvmx_buf_ptr_pki_t buffer_ptr;
+	cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		return;
+	}
+	/* Make sure errata pki-20776 has been applied*/
+	cvmx_wqe_pki_errata_20776(work);
+	buffer_ptr = wqe->packet_ptr;
+	number_buffers = cvmx_wqe_get_bufs(work);
+
+	while (number_buffers--) {
+		/* FIXME: change WQE function prototype */
+		unsigned int x = cvmx_wqe_get_aura(work);
+		cvmx_fpa3_gaura_t aura = __cvmx_fpa3_gaura(x >> 10, x & 0x3ff);
+		/* XXX- assumes the buffer is cache-line aligned and naturally aligned mode*/
+		start_of_buffer = (buffer_ptr.addr >> 7) << 7;
+		/* Read pointer to next buffer before we free the current buffer. */
+		next_buffer_ptr = *(cvmx_buf_ptr_pki_t *)cvmx_phys_to_ptr(buffer_ptr.addr - 8);
+		/* FPA AURA comes from WQE, includes node */
+		cvmx_fpa3_free(cvmx_phys_to_ptr(start_of_buffer), aura, 0);
+		buffer_ptr = next_buffer_ptr;
+	}
+}
+
+/**
+ * Free the pki wqe entry buffer.
+ * If wqe buffers contains first packet buffer, wqe does not get freed here.
+ * This function asssumes that buffers to be freed are from
+ * Naturally aligned pool/aura.
+ * It does not use don't write back.
+ * @param work   Work queue entry to free
+ */
+static inline void cvmx_wqe_pki_free(cvmx_wqe_t *work)
+{
+	cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+	unsigned int x;
+	cvmx_fpa3_gaura_t aura;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		return;
+	}
+	/* Do nothing if the first packet buffer shares WQE buffer */
+	if (!wqe->packet_ptr.packet_outside_wqe)
+		return;
+
+	/* FIXME change WQE function prototype */
+	x = cvmx_wqe_get_aura(work);
+	aura = __cvmx_fpa3_gaura(x >> 10, x & 0x3ff);
+
+	cvmx_fpa3_free(work, aura, 0);
+}
+
+/**
+ * Convert a interface mode into a human readable string
+ *
+ * @param mode   Mode to convert
+ *
+ * @return String
+ */
+const char *cvmx_helper_interface_mode_to_string(cvmx_helper_interface_mode_t mode);
+
+/**
+ * Debug routine to dump the packet structure to the console
+ *
+ * @param work   Work queue entry containing the packet to dump
+ * @return
+ */
+int cvmx_helper_dump_packet(cvmx_wqe_t *work);
+
+/**
+ * Get the version of the CVMX libraries.
+ *
+ * @return Version string. Note this buffer is allocated statically
+ *         and will be shared by all callers.
+ */
+const char *cvmx_helper_get_version(void);
+
+/**
+ * @INTERNAL
+ * Setup the common GMX settings that determine the number of
+ * ports. These setting apply to almost all configurations of all
+ * chips.
+ *
+ * @param xiface Interface to configure
+ * @param num_ports Number of ports on the interface
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_setup_gmx(int xiface, int num_ports);
+
+/**
+ * @INTERNAL
+ * Get the number of pko_ports on an interface.
+ *
+ * @param interface
+ *
+ * @return the number of pko_ports on the interface.
+ */
+int __cvmx_helper_get_num_pko_ports(int interface);
+
+/**
+ * Returns the IPD port number for a port on the given
+ * interface.
+ *
+ * @param interface Interface to use
+ * @param port      Port on the interface
+ *
+ * @return IPD port number
+ */
+int cvmx_helper_get_ipd_port(int interface, int port);
+
+/**
+ * Returns the PKO port number for a port on the given interface,
+ * This is the base pko_port for o68 and ipd_port for older models.
+ *
+ * @param interface Interface to use
+ * @param port      Port on the interface
+ *
+ * @return PKO port number and -1 on error.
+ */
+int cvmx_helper_get_pko_port(int interface, int port);
+
+/**
+ * Returns the IPD/PKO port number for the first port on the given
+ * interface.
+ *
+ * @param interface Interface to use
+ *
+ * @return IPD/PKO port number
+ */
+static inline int cvmx_helper_get_first_ipd_port(int interface)
+{
+	return cvmx_helper_get_ipd_port(interface, 0);
+}
+
+int cvmx_helper_ports_on_interface(int interface);
+
+/**
+ * Returns the IPD/PKO port number for the last port on the given
+ * interface.
+ *
+ * @param interface Interface to use
+ *
+ * @return IPD/PKO port number
+ *
+ * Note: for o68, the last ipd port on an interface does not always equal to
+ * the first plus the number of ports as the ipd ports are not contiguous in
+ * some cases, e.g., SGMII.
+ *
+ * Note: code that makes the assumption of contiguous ipd port numbers needs to
+ * be aware of this.
+ */
+static inline int cvmx_helper_get_last_ipd_port(int interface)
+{
+	return cvmx_helper_get_ipd_port(interface, cvmx_helper_ports_on_interface(interface) - 1);
+}
+
+/**
+ * Free the packet buffers contained in a work queue entry.
+ * The work queue entry is not freed.
+ * Note that this function will not free the work queue entry
+ * even if it contains a non-redundant data packet, and hence
+ * it is not really comparable to how the PKO would free a packet
+ * buffers if requested.
+ *
+ * @param work   Work queue entry with packet to free
+ */
+void cvmx_helper_free_packet_data(cvmx_wqe_t *work);
+
+/**
+ * Returns the interface number for an IPD/PKO port number.
+ *
+ * @param ipd_port IPD/PKO port number
+ *
+ * @return Interface number
+ */
+int cvmx_helper_get_interface_num(int ipd_port);
+
+/**
+ * Returns the interface index number for an IPD/PKO port
+ * number.
+ *
+ * @param ipd_port IPD/PKO port number
+ *
+ * @return Interface index number
+ */
+int cvmx_helper_get_interface_index_num(int ipd_port);
+
+/**
+ * Get port kind for a given port in an interface.
+ *
+ * @param xiface  Interface
+ * @param index   index of the port in the interface
+ *
+ * @return port kind on sucicess  and -1 on failure
+ */
+int cvmx_helper_get_pknd(int xiface, int index);
+
+/**
+ * Get bpid for a given port in an interface.
+ *
+ * @param interface  Interface
+ * @param port       index of the port in the interface
+ *
+ * @return port kind on sucicess  and -1 on failure
+ */
+int cvmx_helper_get_bpid(int interface, int port);
+
+/**
+ * Internal functions.
+ */
+int __cvmx_helper_post_init_interfaces(void);
+int cvmx_helper_setup_red(int pass_thresh, int drop_thresh);
+void cvmx_helper_show_stats(int port);
+
+/*
+ * Return number of array alements
+ */
+#define NUM_ELEMENTS(arr) (sizeof(arr) / sizeof((arr)[0]))
+
+/**
+ * Prints out a buffer with the address, hex bytes, and ASCII
+ *
+ * @param	addr	Start address to print on the left
+ * @param[in]	buffer	array of bytes to print
+ * @param	count	Number of bytes to print
+ */
+void cvmx_print_buffer_u8(unsigned int addr, const u8 *buffer, size_t count);
+
+#endif /* __CVMX_HELPER_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-xaui.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-xaui.h
new file mode 100644
index 0000000..6ff4576
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-xaui.h
@@ -0,0 +1,108 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Functions for XAUI initialization, configuration,
+ * and monitoring.
+ */
+
+#ifndef __CVMX_HELPER_XAUI_H__
+#define __CVMX_HELPER_XAUI_H__
+
+/**
+ * @INTERNAL
+ * Probe a XAUI interface and determine the number of ports
+ * connected to it. The XAUI interface should still be down
+ * after this call.
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Number of ports on the interface. Zero to disable.
+ */
+int __cvmx_helper_xaui_probe(int xiface);
+int __cvmx_helper_xaui_enumerate(int xiface);
+
+/**
+ * @INTERNAL
+ * Bringup and enable a XAUI interface. After this call packet
+ * I/O should be fully functional. This is called with IPD
+ * enabled but PKO disabled.
+ *
+ * @param xiface Interface to bring up
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_xaui_enable(int xiface);
+
+/**
+ * Retrain XAUI interface.
+ *
+ * GMX is disabled as part of retraining.
+ * While GMX is disabled, new received packets are dropped.
+ * If GMX was in the middle of recieving a packet when disabled,
+ * that packet will be received before GMX idles.
+ * Transmitted packets are buffered normally, but not sent.
+ * If GMX was in the middle of transmitting a packet when disabled,
+ * that packet will be transmitted before GMX idles.
+ *
+ * @param interface Interface to retrain
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_helper_xaui_link_retrain(int interface);
+
+/**
+ * Reinitialize XAUI interface.  Does a probe without changing the hardware
+ * state.
+ *
+ * @param interface	Interface to reinitialize
+ *
+ * @return	0 on success, negative on failure
+ */
+int cvmx_helper_xaui_link_reinit(int interface);
+
+/**
+ * @INTERNAL
+ * Return the link state of an IPD/PKO port as returned by
+ * auto negotiation. The result of this function may not match
+ * Octeon's link config if auto negotiation has changed since
+ * the last call to cvmx_helper_link_set().
+ *
+ * @param ipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t __cvmx_helper_xaui_link_get(int ipd_port);
+
+/**
+ * @INTERNAL
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead.
+ *
+ * @param ipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_xaui_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
+
+/**
+ * @INTERNAL
+ * Configure a port for internal and/or external loopback. Internal loopback
+ * causes packets sent by the port to be received by Octeon. External loopback
+ * causes packets received from the wire to sent out again.
+ *
+ * @param ipd_port IPD/PKO port to loopback.
+ * @param enable_internal
+ *                 Non zero if you want internal loopback
+ * @param enable_external
+ *                 Non zero if you want external loopback
+ *
+ * @return Zero on success, negative on failure.
+ */
+int __cvmx_helper_xaui_configure_loopback(int ipd_port, int enable_internal, int enable_external);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper.h b/arch/mips/mach-octeon/include/mach/cvmx-helper.h
new file mode 100644
index 0000000..b82e201
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper.h
@@ -0,0 +1,565 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Helper functions for common, but complicated tasks.
+ */
+
+#ifndef __CVMX_HELPER_H__
+#define __CVMX_HELPER_H__
+
+#include "cvmx-wqe.h"
+
+/* Max number of GMXX */
+#define CVMX_HELPER_MAX_GMX                                                                        \
+	(OCTEON_IS_MODEL(OCTEON_CN78XX) ?                                                          \
+		       6 :                                                                               \
+		       (OCTEON_IS_MODEL(OCTEON_CN68XX) ?                                                 \
+				5 :                                                                      \
+				(OCTEON_IS_MODEL(OCTEON_CN73XX) ?                                        \
+					 3 :                                                             \
+					 (OCTEON_IS_MODEL(OCTEON_CNF75XX) ? 1 : 2))))
+
+#define CVMX_HELPER_CSR_INIT0                                                                      \
+	0 /* Do not change as
+						   CVMX_HELPER_WRITE_CSR()
+						   assumes it */
+#define CVMX_HELPER_CSR_INIT_READ -1
+
+/*
+ * CVMX_HELPER_WRITE_CSR--set a field in a CSR with a value.
+ *
+ * @param chcsr_init    initial value of the csr (CVMX_HELPER_CSR_INIT_READ
+ *                      means to use the existing csr value as the
+ *                      initial value.)
+ * @param chcsr_csr     the name of the csr
+ * @param chcsr_type    the type of the csr (see the -defs.h)
+ * @param chcsr_chip    the chip for the csr/field
+ * @param chcsr_fld     the field in the csr
+ * @param chcsr_val     the value for field
+ */
+#define CVMX_HELPER_WRITE_CSR(chcsr_init, chcsr_csr, chcsr_type, chcsr_chip, chcsr_fld, chcsr_val) \
+	do {                                                                                       \
+		chcsr_type csr;                                                                    \
+		if ((chcsr_init) == CVMX_HELPER_CSR_INIT_READ)                                     \
+			csr.u64 = cvmx_read_csr(chcsr_csr);                                        \
+		else                                                                               \
+			csr.u64 = (chcsr_init);                                                    \
+		csr.chcsr_chip.chcsr_fld = (chcsr_val);                                            \
+		cvmx_write_csr((chcsr_csr), csr.u64);                                              \
+	} while (0)
+
+/*
+ * CVMX_HELPER_WRITE_CSR0--set a field in a CSR with the initial value of 0
+ */
+#define CVMX_HELPER_WRITE_CSR0(chcsr_csr, chcsr_type, chcsr_chip, chcsr_fld, chcsr_val)            \
+	CVMX_HELPER_WRITE_CSR(CVMX_HELPER_CSR_INIT0, chcsr_csr, chcsr_type, chcsr_chip, chcsr_fld, \
+			      chcsr_val)
+
+/*
+ * CVMX_HELPER_WRITE_CSR1--set a field in a CSR with the initial value of
+ *                      the CSR's current value.
+ */
+#define CVMX_HELPER_WRITE_CSR1(chcsr_csr, chcsr_type, chcsr_chip, chcsr_fld, chcsr_val)            \
+	CVMX_HELPER_WRITE_CSR(CVMX_HELPER_CSR_INIT_READ, chcsr_csr, chcsr_type, chcsr_chip,        \
+			      chcsr_fld, chcsr_val)
+
+/* These flags are passed to __cvmx_helper_packet_hardware_enable */
+
+typedef enum {
+	CVMX_HELPER_INTERFACE_MODE_DISABLED,
+	CVMX_HELPER_INTERFACE_MODE_RGMII,
+	CVMX_HELPER_INTERFACE_MODE_GMII,
+	CVMX_HELPER_INTERFACE_MODE_SPI,
+	CVMX_HELPER_INTERFACE_MODE_PCIE,
+	CVMX_HELPER_INTERFACE_MODE_XAUI,
+	CVMX_HELPER_INTERFACE_MODE_SGMII,
+	CVMX_HELPER_INTERFACE_MODE_PICMG,
+	CVMX_HELPER_INTERFACE_MODE_NPI,
+	CVMX_HELPER_INTERFACE_MODE_LOOP,
+	CVMX_HELPER_INTERFACE_MODE_SRIO,
+	CVMX_HELPER_INTERFACE_MODE_ILK,
+	CVMX_HELPER_INTERFACE_MODE_RXAUI,
+	CVMX_HELPER_INTERFACE_MODE_QSGMII,
+	CVMX_HELPER_INTERFACE_MODE_AGL,
+	CVMX_HELPER_INTERFACE_MODE_XLAUI,
+	CVMX_HELPER_INTERFACE_MODE_XFI,
+	CVMX_HELPER_INTERFACE_MODE_10G_KR,
+	CVMX_HELPER_INTERFACE_MODE_40G_KR4,
+	CVMX_HELPER_INTERFACE_MODE_MIXED,
+} cvmx_helper_interface_mode_t;
+
+typedef union cvmx_helper_link_info {
+	u64 u64;
+	struct {
+		u64 reserved_20_63 : 43;
+		u64 init_success : 1;
+		u64 link_up : 1;
+		u64 full_duplex : 1;
+		u64 speed : 18;
+	} s;
+} cvmx_helper_link_info_t;
+
+/**
+ * Sets the back pressure configuration in internal data structure.
+ * @param backpressure_dis disable/enable backpressure
+ */
+void cvmx_rgmii_set_back_pressure(u64 backpressure_dis);
+
+#include "cvmx-helper-fpa.h"
+
+#include "cvmx-helper-agl.h"
+#include "cvmx-helper-errata.h"
+#include "cvmx-helper-ilk.h"
+#include "cvmx-helper-loop.h"
+#include "cvmx-helper-npi.h"
+#include "cvmx-helper-rgmii.h"
+#include "cvmx-helper-sgmii.h"
+#include "cvmx-helper-spi.h"
+#include "cvmx-helper-srio.h"
+#include "cvmx-helper-util.h"
+#include "cvmx-helper-xaui.h"
+
+#include "cvmx-fpa3.h"
+
+enum cvmx_pko_padding {
+	CVMX_PKO_PADDING_NONE = 0,
+	CVMX_PKO_PADDING_60 = 1,
+};
+
+/**
+ * This function enables the IPD and also enables the packet interfaces.
+ * The packet interfaces (RGMII and SPI) must be enabled after the
+ * IPD.  This should be called by the user program after any additional
+ * IPD configuration changes are made if CVMX_HELPER_ENABLE_IPD
+ * is not set in the executive-config.h file.
+ *
+ * @return 0 on success
+ *         -1 on failure
+ */
+int cvmx_helper_ipd_and_packet_input_enable_node(int node);
+int cvmx_helper_ipd_and_packet_input_enable(void);
+
+/**
+ * Initialize and allocate memory for the SSO.
+ *
+ * @param wqe_entries The maximum number of work queue entries to be
+ * supported.
+ *
+ * @return Zero on success, non-zero on failure.
+ */
+int cvmx_helper_initialize_sso(int wqe_entries);
+
+/**
+ * Initialize and allocate memory for the SSO on a specific node.
+ *
+ * @param node Node SSO to initialize
+ * @param wqe_entries The maximum number of work queue entries to be
+ * supported.
+ *
+ * @return Zero on success, non-zero on failure.
+ */
+int cvmx_helper_initialize_sso_node(unsigned int node, int wqe_entries);
+
+/**
+ * Undo the effect of cvmx_helper_initialize_sso().
+ *
+ * @return Zero on success, non-zero on failure.
+ */
+int cvmx_helper_uninitialize_sso(void);
+
+/**
+ * Undo the effect of cvmx_helper_initialize_sso_node().
+ *
+ * @param node Node SSO to initialize
+ *
+ * @return Zero on success, non-zero on failure.
+ */
+int cvmx_helper_uninitialize_sso_node(unsigned int node);
+
+/**
+ * Initialize the PIP, IPD, and PKO hardware to support
+ * simple priority based queues for the ethernet ports. Each
+ * port is configured with a number of priority queues based
+ * on CVMX_PKO_QUEUES_PER_PORT_* where each queue is lower
+ * priority than the previous.
+ *
+ * @return Zero on success, non-zero on failure
+ */
+int cvmx_helper_initialize_packet_io_global(void);
+/**
+ * Initialize the PIP, IPD, and PKO hardware to support
+ * simple priority based queues for the ethernet ports. Each
+ * port is configured with a number of priority queues based
+ * on CVMX_PKO_QUEUES_PER_PORT_* where each queue is lower
+ * priority than the previous.
+ *
+ * @param node Node on which to initialize packet io hardware
+ *
+ * @return Zero on success, non-zero on failure
+ */
+int cvmx_helper_initialize_packet_io_node(unsigned int node);
+
+/**
+ * Does core local initialization for packet io
+ *
+ * @return Zero on success, non-zero on failure
+ */
+int cvmx_helper_initialize_packet_io_local(void);
+
+/**
+ * Undo the initialization performed in
+ * cvmx_helper_initialize_packet_io_global(). After calling this routine and the
+ * local version on each core, packet IO for Octeon will be disabled and placed
+ * in the initial reset state. It will then be safe to call the initialize
+ * later on. Note that this routine does not empty the FPA pools. It frees all
+ * buffers used by the packet IO hardware to the FPA so a function emptying the
+ * FPA after shutdown should find all packet buffers in the FPA.
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_helper_shutdown_packet_io_global(void);
+
+/**
+ * Helper function for 78xx global packet IO shutdown
+ */
+int cvmx_helper_shutdown_packet_io_global_cn78xx(int node);
+
+/**
+ * Does core local shutdown of packet io
+ *
+ * @return Zero on success, non-zero on failure
+ */
+int cvmx_helper_shutdown_packet_io_local(void);
+
+/**
+ * Returns the number of ports on the given interface.
+ * The interface must be initialized before the port count
+ * can be returned.
+ *
+ * @param interface Which interface to return port count for.
+ *
+ * @return Port count for interface
+ *         -1 for uninitialized interface
+ */
+int cvmx_helper_ports_on_interface(int interface);
+
+/**
+ * Return the number of interfaces the chip has. Each interface
+ * may have multiple ports. Most chips support two interfaces,
+ * but the CNX0XX and CNX1XX are exceptions. These only support
+ * one interface.
+ *
+ * @return Number of interfaces on chip
+ */
+int cvmx_helper_get_number_of_interfaces(void);
+
+/**
+ * Get the operating mode of an interface. Depending on the Octeon
+ * chip and configuration, this function returns an enumeration
+ * of the type of packet I/O supported by an interface.
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Mode of the interface. Unknown or unsupported interfaces return
+ *         DISABLED.
+ */
+cvmx_helper_interface_mode_t cvmx_helper_interface_get_mode(int xiface);
+
+/**
+ * Auto configure an IPD/PKO port link state and speed. This
+ * function basically does the equivalent of:
+ * cvmx_helper_link_set(ipd_port, cvmx_helper_link_get(ipd_port));
+ *
+ * @param ipd_port IPD/PKO port to auto configure
+ *
+ * @return Link state after configure
+ */
+cvmx_helper_link_info_t cvmx_helper_link_autoconf(int ipd_port);
+
+/**
+ * Return the link state of an IPD/PKO port as returned by
+ * auto negotiation. The result of this function may not match
+ * Octeon's link config if auto negotiation has changed since
+ * the last call to cvmx_helper_link_set().
+ *
+ * @param ipd_port IPD/PKO port to query
+ *
+ * @return Link state
+ */
+cvmx_helper_link_info_t cvmx_helper_link_get(int ipd_port);
+
+/**
+ * Configure an IPD/PKO port for the specified link state. This
+ * function does not influence auto negotiation at the PHY level.
+ * The passed link state must always match the link state returned
+ * by cvmx_helper_link_get(). It is normally best to use
+ * cvmx_helper_link_autoconf() instead.
+ *
+ * @param ipd_port  IPD/PKO port to configure
+ * @param link_info The new link state
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_helper_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
+
+/**
+ * This function probes an interface to determine the actual number of
+ * hardware ports connected to it. It does some setup the ports but
+ * doesn't enable them. The main goal here is to set the global
+ * interface_port_count[interface] correctly. Final hardware setup of
+ * the ports will be performed later.
+ *
+ * @param xiface Interface to probe
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_helper_interface_probe(int xiface);
+
+/**
+ * Determine the actual number of hardware ports connected to an
+ * interface. It doesn't setup the ports or enable them.
+ *
+ * @param xiface Interface to enumerate
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_helper_interface_enumerate(int xiface);
+
+/**
+ * Configure a port for internal and/or external loopback. Internal loopback
+ * causes packets sent by the port to be received by Octeon. External loopback
+ * causes packets received from the wire to sent out again.
+ *
+ * @param ipd_port IPD/PKO port to loopback.
+ * @param enable_internal
+ *                 Non zero if you want internal loopback
+ * @param enable_external
+ *                 Non zero if you want external loopback
+ *
+ * @return Zero on success, negative on failure.
+ */
+int cvmx_helper_configure_loopback(int ipd_port, int enable_internal, int enable_external);
+
+/**
+ * Returns the number of ports on the given interface.
+ *
+ * @param interface Which interface to return port count for.
+ *
+ * @return Port count for interface
+ *         -1 for uninitialized interface
+ */
+int __cvmx_helper_early_ports_on_interface(int interface);
+
+void cvmx_helper_setup_simulator_io_buffer_counts(int node, int num_packet_buffers,
+						  int pko_buffers);
+
+void cvmx_helper_set_wqe_no_ptr_mode(bool mode);
+void cvmx_helper_set_pkt_wqe_le_mode(bool mode);
+int cvmx_helper_shutdown_fpa_pools(int node);
+
+/**
+ * Convert Ethernet QoS/PCP value to system-level priority
+ *
+ * In OCTEON, highest priority is 0, in Ethernet 802.1p PCP field
+ * the highest priority is 7, lowest is 1. Here is the full conversion
+ * table between QoS (PCP) and OCTEON priority values, per IEEE 802.1Q-2005:
+ *
+ * PCP	Priority	Acronym	Traffic Types
+ * 1	7 (lowest)	BK	Background
+ * 0	6	BE	Best Effort
+ * 2	5	EE	Excellent Effort
+ * 3	4	CA	Critical Applications
+ * 4	3	VI	Video, < 100 ms latency and jitter
+ * 5	2	VO	Voice, < 10 ms latency and jitter
+ * 6	1	IC	Internetwork Control
+ * 7	0 (highest)	NC	Network Control
+ */
+static inline u8 cvmx_helper_qos2prio(u8 qos)
+{
+	static const unsigned int pcp_map = 6 << (4 * 0) | 7 << (4 * 1) | 5 << (4 * 2) |
+					    4 << (4 * 3) | 3 << (4 * 4) | 2 << (4 * 5) |
+					    1 << (4 * 6) | 0 << (4 * 7);
+
+	return (pcp_map >> ((qos & 0x7) << 2)) & 0x7;
+}
+
+/**
+ * Convert system-level priority to Ethernet QoS/PCP value
+ *
+ * Calculate the reverse of cvmx_helper_qos2prio() per IEEE 802.1Q-2005.
+ */
+static inline u8 cvmx_helper_prio2qos(u8 prio)
+{
+	static const unsigned int prio_map = 7 << (4 * 0) | 6 << (4 * 1) | 5 << (4 * 2) |
+					     4 << (4 * 3) | 3 << (4 * 4) | 2 << (4 * 5) |
+					     0 << (4 * 6) | 1 << (4 * 7);
+
+	return (prio_map >> ((prio & 0x7) << 2)) & 0x7;
+}
+
+/**
+ * @INTERNAL
+ * Get the number of ipd_ports on an interface.
+ *
+ * @param xiface
+ *
+ * @return the number of ipd_ports on the interface and -1 for error.
+ */
+int __cvmx_helper_get_num_ipd_ports(int xiface);
+
+enum cvmx_pko_padding __cvmx_helper_get_pko_padding(int xiface);
+
+/**
+ * @INTERNAL
+ *
+ * @param xiface
+ * @param num_ipd_ports is the number of ipd_ports on the interface
+ * @param has_fcs indicates if PKO does FCS for the ports on this
+ * @param pad The padding that PKO should apply.
+ * interface.
+ *
+ * @return 0 for success and -1 for failure
+ */
+int __cvmx_helper_init_interface(int xiface, int num_ipd_ports, int has_fcs,
+				 enum cvmx_pko_padding pad);
+
+void __cvmx_helper_shutdown_interfaces(void);
+
+/*
+ * @INTERNAL
+ * Enable packet input/output from the hardware. This function is
+ * called after all internal setup is complete and IPD is enabled.
+ * After this function completes, packets will be accepted from the
+ * hardware ports. PKO should still be disabled to make sure packets
+ * aren't sent out partially setup hardware.
+ *
+ * @return Zero on success, negative on failure
+ */
+int __cvmx_helper_packet_hardware_enable(int xiface);
+
+/*
+ * @INTERNAL
+ *
+ * @return 0 for success and -1 for failure
+ */
+int __cvmx_helper_set_link_info(int xiface, int index, cvmx_helper_link_info_t link_info);
+
+/**
+ * @INTERNAL
+ *
+ * @param xiface
+ * @param port
+ *
+ * @return valid link_info on success or -1 on failure
+ */
+cvmx_helper_link_info_t __cvmx_helper_get_link_info(int xiface, int port);
+
+/**
+ * @INTERNAL
+ *
+ * @param xiface
+ *
+ * @return 0 if PKO does not do FCS and 1 otherwise.
+ */
+int __cvmx_helper_get_has_fcs(int xiface);
+
+void *cvmx_helper_mem_alloc(int node, u64 alloc_size, u64 align);
+void cvmx_helper_mem_free(void *buffer, u64 size);
+
+#define CVMX_QOS_NUM 8 /* Number of QoS priority classes */
+
+typedef enum {
+	CVMX_QOS_PROTO_NONE,  /* Disable QOS */
+	CVMX_QOS_PROTO_PAUSE, /* IEEE 802.3 PAUSE */
+	CVMX_QOS_PROTO_PFC    /* IEEE 802.1Qbb-2011 PFC/CBFC */
+} cvmx_qos_proto_t;
+
+typedef enum {
+	CVMX_QOS_PKT_MODE_HWONLY, /* PAUSE packets processed in Hardware only. */
+	CVMX_QOS_PKT_MODE_SWONLY, /* PAUSE packets processed in Software only. */
+	CVMX_QOS_PKT_MODE_HWSW,	  /* PAUSE packets processed in both HW and SW. */
+	CVMX_QOS_PKT_MODE_DROP	  /* Ignore PAUSE packets. */
+} cvmx_qos_pkt_mode_t;
+
+typedef enum {
+	CVMX_QOS_POOL_PER_PORT, /* Pool per Physical Port */
+	CVMX_QOS_POOL_PER_CLASS /* Pool per Priority Class */
+} cvmx_qos_pool_mode_t;
+
+typedef struct cvmx_qos_config {
+	cvmx_qos_proto_t qos_proto;	/* QoS protocol.*/
+	cvmx_qos_pkt_mode_t pkt_mode;	/* PAUSE processing mode.*/
+	cvmx_qos_pool_mode_t pool_mode; /* FPA Pool mode.*/
+	int pktbuf_size;		/* Packet buffer size */
+	int aura_size;			/* Number of buffers */
+	int drop_thresh[CVMX_QOS_NUM];	/* DROP threashold in % */
+	int red_thresh[CVMX_QOS_NUM];	/* RED threashold in % */
+	int bp_thresh[CVMX_QOS_NUM];	/* BP threashold in % */
+	int groups[CVMX_QOS_NUM];	/* Base SSO group for QOS group set. */
+	int group_prio[CVMX_QOS_NUM];	/* SSO group priorities.*/
+	int pko_pfc_en;			/* Enable PKO PFC layout. */
+	int vlan_num;			/* VLAN number: 0 = 1st or 1 = 2nd. */
+	int p_time;			/* PAUSE packets send time (in number of 512 bit-times).*/
+	int p_interval; /* PAUSE packet send interval (in number of 512 bit-times).*/
+	/* Internal parameters (should not be used by application developer): */
+	cvmx_fpa3_pool_t gpools[CVMX_QOS_NUM];	/* Pool to use.*/
+	cvmx_fpa3_gaura_t gauras[CVMX_QOS_NUM]; /* Global auras -- one per priority class. */
+	int bpids[CVMX_QOS_NUM];		/* PKI BPID.*/
+	int qpg_base;				/* QPG Table base index.*/
+} cvmx_qos_config_t;
+
+/**
+ * Initialize QoS configuraiton with the SDK defaults.
+ *
+ * @param qos_cfg   User QOS configuration parameters.
+ * @return Zero on success, negative number otherwise.
+ */
+int cvmx_helper_qos_config_init(cvmx_qos_proto_t qos_proto, cvmx_qos_config_t *qos_cfg);
+
+/**
+ * Update the user static processor configuration.
+ * It should be done before any initialization of the DP units is performed.
+ *
+ * @param xipdport  Global IPD port
+ * @param qos_cfg   User QOS configuration parameters.
+ * @return Zero on success, negative number otherwise.
+ */
+int cvmx_helper_qos_port_config_update(int xipdport, cvmx_qos_config_t *qos_cfg);
+
+/**
+ * Configure the Data Path components for QOS function.
+ * This function is called after the global processor initialization is
+ * performed.
+ *
+ * @param xipdport  Global IPD port
+ * @param qos_cfg   User QOS configuration parameters.
+ * @return Zero on success, negative number otherwise.
+ */
+int cvmx_helper_qos_port_setup(int xipdport, cvmx_qos_config_t *qos_cfg);
+
+/**
+ * Configure the SSO for QOS function.
+ * This function is called after the global processor initialization is
+ * performed.
+ *
+ * @param node      OCTEON3 node number.
+ * @param qos_cfg   User QOS configuration parameters.
+ * @return Zero on success, negative number otherwise.
+ */
+int cvmx_helper_qos_sso_setup(int node, cvmx_qos_config_t *qos_cfg);
+
+/**
+ * Return PKI_CHAN_E channel name based on the provided index.
+ * @param chan     Channel index.
+ * @param namebuf  Name buffer (output).
+ * @param buflen   Name maximum length.
+ * @return Length of name (in bytes) on success, negative number otherwise.
+ */
+int cvmx_helper_get_chan_e_name(int chan, char *namebuf, int buflen);
+
+#ifdef CVMX_DUMP_DIAGNOSTICS
+void cvmx_helper_dump_for_diagnostics(int node);
+#endif
+
+#endif /* __CVMX_HELPER_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-hwfau.h b/arch/mips/mach-octeon/include/mach/cvmx-hwfau.h
new file mode 100644
index 0000000..5977219
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-hwfau.h
@@ -0,0 +1,606 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the hardware Fetch and Add Unit.
+ */
+
+/**
+ * @file
+ *
+ * Interface to the hardware Fetch and Add Unit.
+ *
+ */
+
+#ifndef __CVMX_HWFAU_H__
+#define __CVMX_HWFAU_H__
+
+typedef int cvmx_fau_reg64_t;
+typedef int cvmx_fau_reg32_t;
+typedef int cvmx_fau_reg16_t;
+typedef int cvmx_fau_reg8_t;
+
+#define CVMX_FAU_REG_ANY -1
+
+/*
+ * Octeon Fetch and Add Unit (FAU)
+ */
+
+#define CVMX_FAU_LOAD_IO_ADDRESS cvmx_build_io_address(0x1e, 0)
+#define CVMX_FAU_BITS_SCRADDR	 63, 56
+#define CVMX_FAU_BITS_LEN	 55, 48
+#define CVMX_FAU_BITS_INEVAL	 35, 14
+#define CVMX_FAU_BITS_TAGWAIT	 13, 13
+#define CVMX_FAU_BITS_NOADD	 13, 13
+#define CVMX_FAU_BITS_SIZE	 12, 11
+#define CVMX_FAU_BITS_REGISTER	 10, 0
+
+#define CVMX_FAU_MAX_REGISTERS_8 (2048)
+
+typedef enum {
+	CVMX_FAU_OP_SIZE_8 = 0,
+	CVMX_FAU_OP_SIZE_16 = 1,
+	CVMX_FAU_OP_SIZE_32 = 2,
+	CVMX_FAU_OP_SIZE_64 = 3
+} cvmx_fau_op_size_t;
+
+/**
+ * Tagwait return definition. If a timeout occurs, the error
+ * bit will be set. Otherwise the value of the register before
+ * the update will be returned.
+ */
+typedef struct {
+	u64 error : 1;
+	s64 value : 63;
+} cvmx_fau_tagwait64_t;
+
+/**
+ * Tagwait return definition. If a timeout occurs, the error
+ * bit will be set. Otherwise the value of the register before
+ * the update will be returned.
+ */
+typedef struct {
+	u64 error : 1;
+	s32 value : 31;
+} cvmx_fau_tagwait32_t;
+
+/**
+ * Tagwait return definition. If a timeout occurs, the error
+ * bit will be set. Otherwise the value of the register before
+ * the update will be returned.
+ */
+typedef struct {
+	u64 error : 1;
+	s16 value : 15;
+} cvmx_fau_tagwait16_t;
+
+/**
+ * Tagwait return definition. If a timeout occurs, the error
+ * bit will be set. Otherwise the value of the register before
+ * the update will be returned.
+ */
+typedef struct {
+	u64 error : 1;
+	int8_t value : 7;
+} cvmx_fau_tagwait8_t;
+
+/**
+ * Asynchronous tagwait return definition. If a timeout occurs,
+ * the error bit will be set. Otherwise the value of the
+ * register before the update will be returned.
+ */
+typedef union {
+	u64 u64;
+	struct {
+		u64 invalid : 1;
+		u64 data : 63; /* unpredictable if invalid is set */
+	} s;
+} cvmx_fau_async_tagwait_result_t;
+
+#define SWIZZLE_8  0
+#define SWIZZLE_16 0
+#define SWIZZLE_32 0
+
+/**
+ * @INTERNAL
+ * Builds a store I/O address for writing to the FAU
+ *
+ * @param noadd  0 = Store value is atomically added to the current value
+ *               1 = Store value is atomically written over the current value
+ * @param reg    FAU atomic register to access. 0 <= reg < 2048.
+ *               - Step by 2 for 16 bit access.
+ *               - Step by 4 for 32 bit access.
+ *               - Step by 8 for 64 bit access.
+ * @return Address to store for atomic update
+ */
+static inline u64 __cvmx_hwfau_store_address(u64 noadd, u64 reg)
+{
+	return (CVMX_ADD_IO_SEG(CVMX_FAU_LOAD_IO_ADDRESS) |
+		cvmx_build_bits(CVMX_FAU_BITS_NOADD, noadd) |
+		cvmx_build_bits(CVMX_FAU_BITS_REGISTER, reg));
+}
+
+/**
+ * @INTERNAL
+ * Builds a I/O address for accessing the FAU
+ *
+ * @param tagwait Should the atomic add wait for the current tag switch
+ *                operation to complete.
+ *                - 0 = Don't wait
+ *                - 1 = Wait for tag switch to complete
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 2 for 16 bit access.
+ *                - Step by 4 for 32 bit access.
+ *                - Step by 8 for 64 bit access.
+ * @param value   Signed value to add.
+ *                Note: When performing 32 and 64 bit access, only the low
+ *                22 bits are available.
+ * @return Address to read from for atomic update
+ */
+static inline u64 __cvmx_hwfau_atomic_address(u64 tagwait, u64 reg, s64 value)
+{
+	return (CVMX_ADD_IO_SEG(CVMX_FAU_LOAD_IO_ADDRESS) |
+		cvmx_build_bits(CVMX_FAU_BITS_INEVAL, value) |
+		cvmx_build_bits(CVMX_FAU_BITS_TAGWAIT, tagwait) |
+		cvmx_build_bits(CVMX_FAU_BITS_REGISTER, reg));
+}
+
+/**
+ * Perform an atomic 64 bit add
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 8 for 64 bit access.
+ * @param value   Signed value to add.
+ *                Note: Only the low 22 bits are available.
+ * @return Value of the register before the update
+ */
+static inline s64 cvmx_hwfau_fetch_and_add64(cvmx_fau_reg64_t reg, s64 value)
+{
+	return cvmx_read64_int64(__cvmx_hwfau_atomic_address(0, reg, value));
+}
+
+/**
+ * Perform an atomic 32 bit add
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 4 for 32 bit access.
+ * @param value   Signed value to add.
+ *                Note: Only the low 22 bits are available.
+ * @return Value of the register before the update
+ */
+static inline s32 cvmx_hwfau_fetch_and_add32(cvmx_fau_reg32_t reg, s32 value)
+{
+	reg ^= SWIZZLE_32;
+	return cvmx_read64_int32(__cvmx_hwfau_atomic_address(0, reg, value));
+}
+
+/**
+ * Perform an atomic 16 bit add
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 2 for 16 bit access.
+ * @param value   Signed value to add.
+ * @return Value of the register before the update
+ */
+static inline s16 cvmx_hwfau_fetch_and_add16(cvmx_fau_reg16_t reg, s16 value)
+{
+	reg ^= SWIZZLE_16;
+	return cvmx_read64_int16(__cvmx_hwfau_atomic_address(0, reg, value));
+}
+
+/**
+ * Perform an atomic 8 bit add
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ * @param value   Signed value to add.
+ * @return Value of the register before the update
+ */
+static inline int8_t cvmx_hwfau_fetch_and_add8(cvmx_fau_reg8_t reg, int8_t value)
+{
+	reg ^= SWIZZLE_8;
+	return cvmx_read64_int8(__cvmx_hwfau_atomic_address(0, reg, value));
+}
+
+/**
+ * Perform an atomic 64 bit add after the current tag switch
+ * completes
+ *
+ * @param reg    FAU atomic register to access. 0 <= reg < 2048.
+ *               - Step by 8 for 64 bit access.
+ * @param value  Signed value to add.
+ *               Note: Only the low 22 bits are available.
+ * @return If a timeout occurs, the error bit will be set. Otherwise
+ *         the value of the register before the update will be
+ *         returned
+ */
+static inline cvmx_fau_tagwait64_t cvmx_hwfau_tagwait_fetch_and_add64(cvmx_fau_reg64_t reg,
+								      s64 value)
+{
+	union {
+		u64 i64;
+		cvmx_fau_tagwait64_t t;
+	} result;
+	result.i64 = cvmx_read64_int64(__cvmx_hwfau_atomic_address(1, reg, value));
+	return result.t;
+}
+
+/**
+ * Perform an atomic 32 bit add after the current tag switch
+ * completes
+ *
+ * @param reg    FAU atomic register to access. 0 <= reg < 2048.
+ *               - Step by 4 for 32 bit access.
+ * @param value  Signed value to add.
+ *               Note: Only the low 22 bits are available.
+ * @return If a timeout occurs, the error bit will be set. Otherwise
+ *         the value of the register before the update will be
+ *         returned
+ */
+static inline cvmx_fau_tagwait32_t cvmx_hwfau_tagwait_fetch_and_add32(cvmx_fau_reg32_t reg,
+								      s32 value)
+{
+	union {
+		u64 i32;
+		cvmx_fau_tagwait32_t t;
+	} result;
+	reg ^= SWIZZLE_32;
+	result.i32 = cvmx_read64_int32(__cvmx_hwfau_atomic_address(1, reg, value));
+	return result.t;
+}
+
+/**
+ * Perform an atomic 16 bit add after the current tag switch
+ * completes
+ *
+ * @param reg    FAU atomic register to access. 0 <= reg < 2048.
+ *               - Step by 2 for 16 bit access.
+ * @param value  Signed value to add.
+ * @return If a timeout occurs, the error bit will be set. Otherwise
+ *         the value of the register before the update will be
+ *         returned
+ */
+static inline cvmx_fau_tagwait16_t cvmx_hwfau_tagwait_fetch_and_add16(cvmx_fau_reg16_t reg,
+								      s16 value)
+{
+	union {
+		u64 i16;
+		cvmx_fau_tagwait16_t t;
+	} result;
+	reg ^= SWIZZLE_16;
+	result.i16 = cvmx_read64_int16(__cvmx_hwfau_atomic_address(1, reg, value));
+	return result.t;
+}
+
+/**
+ * Perform an atomic 8 bit add after the current tag switch
+ * completes
+ *
+ * @param reg    FAU atomic register to access. 0 <= reg < 2048.
+ * @param value  Signed value to add.
+ * @return If a timeout occurs, the error bit will be set. Otherwise
+ *         the value of the register before the update will be
+ *         returned
+ */
+static inline cvmx_fau_tagwait8_t cvmx_hwfau_tagwait_fetch_and_add8(cvmx_fau_reg8_t reg,
+								    int8_t value)
+{
+	union {
+		u64 i8;
+		cvmx_fau_tagwait8_t t;
+	} result;
+	reg ^= SWIZZLE_8;
+	result.i8 = cvmx_read64_int8(__cvmx_hwfau_atomic_address(1, reg, value));
+	return result.t;
+}
+
+/**
+ * @INTERNAL
+ * Builds I/O data for async operations
+ *
+ * @param scraddr Scratch pad byte address to write to.  Must be 8 byte aligned
+ * @param value   Signed value to add.
+ *                Note: When performing 32 and 64 bit access, only the low
+ *                22 bits are available.
+ * @param tagwait Should the atomic add wait for the current tag switch
+ *                operation to complete.
+ *                - 0 = Don't wait
+ *                - 1 = Wait for tag switch to complete
+ * @param size    The size of the operation:
+ *                - CVMX_FAU_OP_SIZE_8  (0) = 8 bits
+ *                - CVMX_FAU_OP_SIZE_16 (1) = 16 bits
+ *                - CVMX_FAU_OP_SIZE_32 (2) = 32 bits
+ *                - CVMX_FAU_OP_SIZE_64 (3) = 64 bits
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 2 for 16 bit access.
+ *                - Step by 4 for 32 bit access.
+ *                - Step by 8 for 64 bit access.
+ * @return Data to write using cvmx_send_single
+ */
+static inline u64 __cvmx_fau_iobdma_data(u64 scraddr, s64 value, u64 tagwait,
+					 cvmx_fau_op_size_t size, u64 reg)
+{
+	return (CVMX_FAU_LOAD_IO_ADDRESS | cvmx_build_bits(CVMX_FAU_BITS_SCRADDR, scraddr >> 3) |
+		cvmx_build_bits(CVMX_FAU_BITS_LEN, 1) |
+		cvmx_build_bits(CVMX_FAU_BITS_INEVAL, value) |
+		cvmx_build_bits(CVMX_FAU_BITS_TAGWAIT, tagwait) |
+		cvmx_build_bits(CVMX_FAU_BITS_SIZE, size) |
+		cvmx_build_bits(CVMX_FAU_BITS_REGISTER, reg));
+}
+
+/**
+ * Perform an async atomic 64 bit add. The old value is
+ * placed in the scratch memory at byte address scraddr.
+ *
+ * @param scraddr Scratch memory byte address to put response in.
+ *                Must be 8 byte aligned.
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 8 for 64 bit access.
+ * @param value   Signed value to add.
+ *                Note: Only the low 22 bits are available.
+ * @return Placed in the scratch pad register
+ */
+static inline void cvmx_hwfau_async_fetch_and_add64(u64 scraddr, cvmx_fau_reg64_t reg, s64 value)
+{
+	cvmx_send_single(__cvmx_fau_iobdma_data(scraddr, value, 0, CVMX_FAU_OP_SIZE_64, reg));
+}
+
+/**
+ * Perform an async atomic 32 bit add. The old value is
+ * placed in the scratch memory at byte address scraddr.
+ *
+ * @param scraddr Scratch memory byte address to put response in.
+ *                Must be 8 byte aligned.
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 4 for 32 bit access.
+ * @param value   Signed value to add.
+ *                Note: Only the low 22 bits are available.
+ * @return Placed in the scratch pad register
+ */
+static inline void cvmx_hwfau_async_fetch_and_add32(u64 scraddr, cvmx_fau_reg32_t reg, s32 value)
+{
+	cvmx_send_single(__cvmx_fau_iobdma_data(scraddr, value, 0, CVMX_FAU_OP_SIZE_32, reg));
+}
+
+/**
+ * Perform an async atomic 16 bit add. The old value is
+ * placed in the scratch memory at byte address scraddr.
+ *
+ * @param scraddr Scratch memory byte address to put response in.
+ *                Must be 8 byte aligned.
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 2 for 16 bit access.
+ * @param value   Signed value to add.
+ * @return Placed in the scratch pad register
+ */
+static inline void cvmx_hwfau_async_fetch_and_add16(u64 scraddr, cvmx_fau_reg16_t reg, s16 value)
+{
+	cvmx_send_single(__cvmx_fau_iobdma_data(scraddr, value, 0, CVMX_FAU_OP_SIZE_16, reg));
+}
+
+/**
+ * Perform an async atomic 8 bit add. The old value is
+ * placed in the scratch memory at byte address scraddr.
+ *
+ * @param scraddr Scratch memory byte address to put response in.
+ *                Must be 8 byte aligned.
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ * @param value   Signed value to add.
+ * @return Placed in the scratch pad register
+ */
+static inline void cvmx_hwfau_async_fetch_and_add8(u64 scraddr, cvmx_fau_reg8_t reg, int8_t value)
+{
+	cvmx_send_single(__cvmx_fau_iobdma_data(scraddr, value, 0, CVMX_FAU_OP_SIZE_8, reg));
+}
+
+/**
+ * Perform an async atomic 64 bit add after the current tag
+ * switch completes.
+ *
+ * @param scraddr Scratch memory byte address to put response in.
+ *                Must be 8 byte aligned.
+ *                If a timeout occurs, the error bit (63) will be set. Otherwise
+ *                the value of the register before the update will be
+ *                returned
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 8 for 64 bit access.
+ * @param value   Signed value to add.
+ *                Note: Only the low 22 bits are available.
+ * @return Placed in the scratch pad register
+ */
+static inline void cvmx_hwfau_async_tagwait_fetch_and_add64(u64 scraddr, cvmx_fau_reg64_t reg,
+							    s64 value)
+{
+	cvmx_send_single(__cvmx_fau_iobdma_data(scraddr, value, 1, CVMX_FAU_OP_SIZE_64, reg));
+}
+
+/**
+ * Perform an async atomic 32 bit add after the current tag
+ * switch completes.
+ *
+ * @param scraddr Scratch memory byte address to put response in.
+ *                Must be 8 byte aligned.
+ *                If a timeout occurs, the error bit (63) will be set. Otherwise
+ *                the value of the register before the update will be
+ *                returned
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 4 for 32 bit access.
+ * @param value   Signed value to add.
+ *                Note: Only the low 22 bits are available.
+ * @return Placed in the scratch pad register
+ */
+static inline void cvmx_hwfau_async_tagwait_fetch_and_add32(u64 scraddr, cvmx_fau_reg32_t reg,
+							    s32 value)
+{
+	cvmx_send_single(__cvmx_fau_iobdma_data(scraddr, value, 1, CVMX_FAU_OP_SIZE_32, reg));
+}
+
+/**
+ * Perform an async atomic 16 bit add after the current tag
+ * switch completes.
+ *
+ * @param scraddr Scratch memory byte address to put response in.
+ *                Must be 8 byte aligned.
+ *                If a timeout occurs, the error bit (63) will be set. Otherwise
+ *                the value of the register before the update will be
+ *                returned
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 2 for 16 bit access.
+ * @param value   Signed value to add.
+ * @return Placed in the scratch pad register
+ */
+static inline void cvmx_hwfau_async_tagwait_fetch_and_add16(u64 scraddr, cvmx_fau_reg16_t reg,
+							    s16 value)
+{
+	cvmx_send_single(__cvmx_fau_iobdma_data(scraddr, value, 1, CVMX_FAU_OP_SIZE_16, reg));
+}
+
+/**
+ * Perform an async atomic 8 bit add after the current tag
+ * switch completes.
+ *
+ * @param scraddr Scratch memory byte address to put response in.
+ *                Must be 8 byte aligned.
+ *                If a timeout occurs, the error bit (63) will be set. Otherwise
+ *                the value of the register before the update will be
+ *                returned
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ * @param value   Signed value to add.
+ * @return Placed in the scratch pad register
+ */
+static inline void cvmx_hwfau_async_tagwait_fetch_and_add8(u64 scraddr, cvmx_fau_reg8_t reg,
+							   int8_t value)
+{
+	cvmx_send_single(__cvmx_fau_iobdma_data(scraddr, value, 1, CVMX_FAU_OP_SIZE_8, reg));
+}
+
+/**
+ * Perform an atomic 64 bit add
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 8 for 64 bit access.
+ * @param value   Signed value to add.
+ */
+static inline void cvmx_hwfau_atomic_add64(cvmx_fau_reg64_t reg, s64 value)
+{
+	cvmx_write64_int64(__cvmx_hwfau_store_address(0, reg), value);
+}
+
+/**
+ * Perform an atomic 32 bit add
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 4 for 32 bit access.
+ * @param value   Signed value to add.
+ */
+static inline void cvmx_hwfau_atomic_add32(cvmx_fau_reg32_t reg, s32 value)
+{
+	reg ^= SWIZZLE_32;
+	cvmx_write64_int32(__cvmx_hwfau_store_address(0, reg), value);
+}
+
+/**
+ * Perform an atomic 16 bit add
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 2 for 16 bit access.
+ * @param value   Signed value to add.
+ */
+static inline void cvmx_hwfau_atomic_add16(cvmx_fau_reg16_t reg, s16 value)
+{
+	reg ^= SWIZZLE_16;
+	cvmx_write64_int16(__cvmx_hwfau_store_address(0, reg), value);
+}
+
+/**
+ * Perform an atomic 8 bit add
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ * @param value   Signed value to add.
+ */
+static inline void cvmx_hwfau_atomic_add8(cvmx_fau_reg8_t reg, int8_t value)
+{
+	reg ^= SWIZZLE_8;
+	cvmx_write64_int8(__cvmx_hwfau_store_address(0, reg), value);
+}
+
+/**
+ * Perform an atomic 64 bit write
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 8 for 64 bit access.
+ * @param value   Signed value to write.
+ */
+static inline void cvmx_hwfau_atomic_write64(cvmx_fau_reg64_t reg, s64 value)
+{
+	cvmx_write64_int64(__cvmx_hwfau_store_address(1, reg), value);
+}
+
+/**
+ * Perform an atomic 32 bit write
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 4 for 32 bit access.
+ * @param value   Signed value to write.
+ */
+static inline void cvmx_hwfau_atomic_write32(cvmx_fau_reg32_t reg, s32 value)
+{
+	reg ^= SWIZZLE_32;
+	cvmx_write64_int32(__cvmx_hwfau_store_address(1, reg), value);
+}
+
+/**
+ * Perform an atomic 16 bit write
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ *                - Step by 2 for 16 bit access.
+ * @param value   Signed value to write.
+ */
+static inline void cvmx_hwfau_atomic_write16(cvmx_fau_reg16_t reg, s16 value)
+{
+	reg ^= SWIZZLE_16;
+	cvmx_write64_int16(__cvmx_hwfau_store_address(1, reg), value);
+}
+
+/**
+ * Perform an atomic 8 bit write
+ *
+ * @param reg     FAU atomic register to access. 0 <= reg < 2048.
+ * @param value   Signed value to write.
+ */
+static inline void cvmx_hwfau_atomic_write8(cvmx_fau_reg8_t reg, int8_t value)
+{
+	reg ^= SWIZZLE_8;
+	cvmx_write64_int8(__cvmx_hwfau_store_address(1, reg), value);
+}
+
+/** Allocates 64bit FAU register.
+ *  @return value is the base address of allocated FAU register
+ */
+int cvmx_fau64_alloc(int reserve);
+
+/** Allocates 32bit FAU register.
+ *  @return value is the base address of allocated FAU register
+ */
+int cvmx_fau32_alloc(int reserve);
+
+/** Allocates 16bit FAU register.
+ *  @return value is the base address of allocated FAU register
+ */
+int cvmx_fau16_alloc(int reserve);
+
+/** Allocates 8bit FAU register.
+ *  @return value is the base address of allocated FAU register
+ */
+int cvmx_fau8_alloc(int reserve);
+
+/** Frees the specified FAU register.
+ *  @param address Base address of register to release.
+ *  @return 0 on success; -1 on failure
+ */
+int cvmx_fau_free(int address);
+
+/** Display the fau registers array
+ */
+void cvmx_fau_show(void);
+
+#endif /* __CVMX_HWFAU_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-hwpko.h b/arch/mips/mach-octeon/include/mach/cvmx-hwpko.h
new file mode 100644
index 0000000..459c19b
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-hwpko.h
@@ -0,0 +1,570 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the hardware Packet Output unit.
+ *
+ * Starting with SDK 1.7.0, the PKO output functions now support
+ * two types of locking. CVMX_PKO_LOCK_ATOMIC_TAG continues to
+ * function similarly to previous SDKs by using POW atomic tags
+ * to preserve ordering and exclusivity. As a new option, you
+ * can now pass CVMX_PKO_LOCK_CMD_QUEUE which uses a ll/sc
+ * memory based locking instead. This locking has the advantage
+ * of not affecting the tag state but doesn't preserve packet
+ * ordering. CVMX_PKO_LOCK_CMD_QUEUE is appropriate in most
+ * generic code while CVMX_PKO_LOCK_CMD_QUEUE should be used
+ * with hand tuned fast path code.
+ *
+ * Some of other SDK differences visible to the command command
+ * queuing:
+ * - PKO indexes are no longer stored in the FAU. A large
+ *   percentage of the FAU register block used to be tied up
+ *   maintaining PKO queue pointers. These are now stored in a
+ *   global named block.
+ * - The PKO <b>use_locking</b> parameter can now have a global
+ *   effect. Since all application use the same named block,
+ *   queue locking correctly applies across all operating
+ *   systems when using CVMX_PKO_LOCK_CMD_QUEUE.
+ * - PKO 3 word commands are now supported. Use
+ *   cvmx_pko_send_packet_finish3().
+ */
+
+#ifndef __CVMX_HWPKO_H__
+#define __CVMX_HWPKO_H__
+
+#include "cvmx-hwfau.h"
+#include "cvmx-fpa.h"
+#include "cvmx-pow.h"
+#include "cvmx-cmd-queue.h"
+#include "cvmx-helper.h"
+#include "cvmx-helper-util.h"
+#include "cvmx-helper-cfg.h"
+
+/* Adjust the command buffer size by 1 word so that in the case of using only
+** two word PKO commands no command words stradle buffers.  The useful values
+** for this are 0 and 1. */
+#define CVMX_PKO_COMMAND_BUFFER_SIZE_ADJUST (1)
+
+#define CVMX_PKO_MAX_OUTPUT_QUEUES_STATIC 256
+#define CVMX_PKO_MAX_OUTPUT_QUEUES                                                                 \
+	((OCTEON_IS_OCTEON2() || OCTEON_IS_MODEL(OCTEON_CN70XX)) ? 256 : 128)
+#define CVMX_PKO_NUM_OUTPUT_PORTS                                                                  \
+	((OCTEON_IS_MODEL(OCTEON_CN63XX)) ? 44 : (OCTEON_IS_MODEL(OCTEON_CN66XX) ? 48 : 40))
+#define CVMX_PKO_MEM_QUEUE_PTRS_ILLEGAL_PID 63
+#define CVMX_PKO_QUEUE_STATIC_PRIORITY	    9
+#define CVMX_PKO_ILLEGAL_QUEUE		    0xFFFF
+#define CVMX_PKO_MAX_QUEUE_DEPTH	    0
+
+typedef enum {
+	CVMX_PKO_SUCCESS,
+	CVMX_PKO_INVALID_PORT,
+	CVMX_PKO_INVALID_QUEUE,
+	CVMX_PKO_INVALID_PRIORITY,
+	CVMX_PKO_NO_MEMORY,
+	CVMX_PKO_PORT_ALREADY_SETUP,
+	CVMX_PKO_CMD_QUEUE_INIT_ERROR
+} cvmx_pko_return_value_t;
+
+/**
+ * This enumeration represents the differnet locking modes supported by PKO.
+ */
+typedef enum {
+	CVMX_PKO_LOCK_NONE = 0,
+	CVMX_PKO_LOCK_ATOMIC_TAG = 1,
+	CVMX_PKO_LOCK_CMD_QUEUE = 2,
+} cvmx_pko_lock_t;
+
+typedef struct cvmx_pko_port_status {
+	u32 packets;
+	u64 octets;
+	u64 doorbell;
+} cvmx_pko_port_status_t;
+
+/**
+ * This structure defines the address to use on a packet enqueue
+ */
+typedef union {
+	u64 u64;
+	struct {
+		cvmx_mips_space_t mem_space : 2;
+		u64 reserved : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 reserved2 : 4;
+		u64 reserved3 : 15;
+		u64 port : 9;
+		u64 queue : 9;
+		u64 reserved4 : 3;
+	} s;
+} cvmx_pko_doorbell_address_t;
+
+/**
+ * Structure of the first packet output command word.
+ */
+typedef union {
+	u64 u64;
+	struct {
+		cvmx_fau_op_size_t size1 : 2;
+		cvmx_fau_op_size_t size0 : 2;
+		u64 subone1 : 1;
+		u64 reg1 : 11;
+		u64 subone0 : 1;
+		u64 reg0 : 11;
+		u64 le : 1;
+		u64 n2 : 1;
+		u64 wqp : 1;
+		u64 rsp : 1;
+		u64 gather : 1;
+		u64 ipoffp1 : 7;
+		u64 ignore_i : 1;
+		u64 dontfree : 1;
+		u64 segs : 6;
+		u64 total_bytes : 16;
+	} s;
+} cvmx_pko_command_word0_t;
+
+/**
+ * Call before any other calls to initialize the packet
+ * output system.
+ */
+
+void cvmx_pko_hw_init(u8 pool, unsigned int bufsize);
+
+/**
+ * Enables the packet output hardware. It must already be
+ * configured.
+ */
+void cvmx_pko_enable(void);
+
+/**
+ * Disables the packet output. Does not affect any configuration.
+ */
+void cvmx_pko_disable(void);
+
+/**
+ * Shutdown and free resources required by packet output.
+ */
+
+void cvmx_pko_shutdown(void);
+
+/**
+ * Configure a output port and the associated queues for use.
+ *
+ * @param port       Port to configure.
+ * @param base_queue First queue number to associate with this port.
+ * @param num_queues Number of queues t oassociate with this port
+ * @param priority   Array of priority levels for each queue. Values are
+ *                   allowed to be 1-8. A value of 8 get 8 times the traffic
+ *                   of a value of 1. There must be num_queues elements in the
+ *                   array.
+ */
+cvmx_pko_return_value_t cvmx_pko_config_port(int port, int base_queue, int num_queues,
+					     const u8 priority[]);
+
+/**
+ * Ring the packet output doorbell. This tells the packet
+ * output hardware that "len" command words have been added
+ * to its pending list.  This command includes the required
+ * CVMX_SYNCWS before the doorbell ring.
+ *
+ * WARNING: This function may have to look up the proper PKO port in
+ * the IPD port to PKO port map, and is thus slower than calling
+ * cvmx_pko_doorbell_pkoid() directly if the PKO port identifier is
+ * known.
+ *
+ * @param ipd_port   The IPD port corresponding the to pko port the packet is for
+ * @param queue  Queue the packet is for
+ * @param len    Length of the command in 64 bit words
+ */
+static inline void cvmx_pko_doorbell(u64 ipd_port, u64 queue, u64 len)
+{
+	cvmx_pko_doorbell_address_t ptr;
+	u64 pko_port;
+
+	pko_port = ipd_port;
+	if (octeon_has_feature(OCTEON_FEATURE_PKND))
+		pko_port = cvmx_helper_cfg_ipd2pko_port_base(ipd_port);
+
+	ptr.u64 = 0;
+	ptr.s.mem_space = CVMX_IO_SEG;
+	ptr.s.did = CVMX_OCT_DID_PKT_SEND;
+	ptr.s.is_io = 1;
+	ptr.s.port = pko_port;
+	ptr.s.queue = queue;
+	/* Need to make sure output queue data is in DRAM before doorbell write */
+	CVMX_SYNCWS;
+	cvmx_write_io(ptr.u64, len);
+}
+
+/**
+ * Prepare to send a packet.  This may initiate a tag switch to
+ * get exclusive access to the output queue structure, and
+ * performs other prep work for the packet send operation.
+ *
+ * cvmx_pko_send_packet_finish() MUST be called after this function is called,
+ * and must be called with the same port/queue/use_locking arguments.
+ *
+ * The use_locking parameter allows the caller to use three
+ * possible locking modes.
+ * - CVMX_PKO_LOCK_NONE
+ *      - PKO doesn't do any locking. It is the responsibility
+ *          of the application to make sure that no other core
+ *          is accessing the same queue at the same time.
+ * - CVMX_PKO_LOCK_ATOMIC_TAG
+ *      - PKO performs an atomic tagswitch to insure exclusive
+ *          access to the output queue. This will maintain
+ *          packet ordering on output.
+ * - CVMX_PKO_LOCK_CMD_QUEUE
+ *      - PKO uses the common command queue locks to insure
+ *          exclusive access to the output queue. This is a
+ *          memory based ll/sc. This is the most portable
+ *          locking mechanism.
+ *
+ * NOTE: If atomic locking is used, the POW entry CANNOT be
+ * descheduled, as it does not contain a valid WQE pointer.
+ *
+ * @param port   Port to send it on, this can be either IPD port or PKO
+ *		 port.
+ * @param queue  Queue to use
+ * @param use_locking
+ *               CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or CVMX_PKO_LOCK_CMD_QUEUE
+ */
+static inline void cvmx_pko_send_packet_prepare(u64 port __attribute__((unused)), u64 queue,
+						cvmx_pko_lock_t use_locking)
+{
+	if (use_locking == CVMX_PKO_LOCK_ATOMIC_TAG) {
+		/*
+		 * Must do a full switch here to handle all cases.  We use a
+		 * fake WQE pointer, as the POW does not access this memory.
+		 * The WQE pointer and group are only used if this work is
+		 * descheduled, which is not supported by the
+		 * cvmx_pko_send_packet_prepare/cvmx_pko_send_packet_finish
+		 * combination. Note that this is a special case in which these
+		 * fake values can be used - this is not a general technique.
+		 */
+		u32 tag = CVMX_TAG_SW_BITS_INTERNAL << CVMX_TAG_SW_SHIFT |
+			  CVMX_TAG_SUBGROUP_PKO << CVMX_TAG_SUBGROUP_SHIFT |
+			  (CVMX_TAG_SUBGROUP_MASK & queue);
+		cvmx_pow_tag_sw_full((cvmx_wqe_t *)cvmx_phys_to_ptr(0x80), tag,
+				     CVMX_POW_TAG_TYPE_ATOMIC, 0);
+	}
+}
+
+#define cvmx_pko_send_packet_prepare_pkoid cvmx_pko_send_packet_prepare
+
+/**
+ * Complete packet output. cvmx_pko_send_packet_prepare() must be called exactly once before this,
+ * and the same parameters must be passed to both cvmx_pko_send_packet_prepare() and
+ * cvmx_pko_send_packet_finish().
+ *
+ * WARNING: This function may have to look up the proper PKO port in
+ * the IPD port to PKO port map, and is thus slower than calling
+ * cvmx_pko_send_packet_finish_pkoid() directly if the PKO port
+ * identifier is known.
+ *
+ * @param ipd_port   The IPD port corresponding the to pko port the packet is for
+ * @param queue  Queue to use
+ * @param pko_command
+ *               PKO HW command word
+ * @param packet Packet to send
+ * @param use_locking
+ *               CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or CVMX_PKO_LOCK_CMD_QUEUE
+ *
+ * @return returns CVMX_PKO_SUCCESS on success, or error code on failure of output
+ */
+static inline cvmx_pko_return_value_t
+cvmx_hwpko_send_packet_finish(u64 ipd_port, u64 queue, cvmx_pko_command_word0_t pko_command,
+			      cvmx_buf_ptr_t packet, cvmx_pko_lock_t use_locking)
+{
+	cvmx_cmd_queue_result_t result;
+
+	if (use_locking == CVMX_PKO_LOCK_ATOMIC_TAG)
+		cvmx_pow_tag_sw_wait();
+
+	result = cvmx_cmd_queue_write2(CVMX_CMD_QUEUE_PKO(queue),
+				       (use_locking == CVMX_PKO_LOCK_CMD_QUEUE), pko_command.u64,
+				       packet.u64);
+	if (cvmx_likely(result == CVMX_CMD_QUEUE_SUCCESS)) {
+		cvmx_pko_doorbell(ipd_port, queue, 2);
+		return CVMX_PKO_SUCCESS;
+	} else if ((result == CVMX_CMD_QUEUE_NO_MEMORY) || (result == CVMX_CMD_QUEUE_FULL)) {
+		return CVMX_PKO_NO_MEMORY;
+	} else {
+		return CVMX_PKO_INVALID_QUEUE;
+	}
+}
+
+/**
+ * Complete packet output. cvmx_pko_send_packet_prepare() must be called exactly once before this,
+ * and the same parameters must be passed to both cvmx_pko_send_packet_prepare() and
+ * cvmx_pko_send_packet_finish().
+ *
+ * WARNING: This function may have to look up the proper PKO port in
+ * the IPD port to PKO port map, and is thus slower than calling
+ * cvmx_pko_send_packet_finish3_pkoid() directly if the PKO port
+ * identifier is known.
+ *
+ * @param ipd_port   The IPD port corresponding the to pko port the packet is for
+ * @param queue  Queue to use
+ * @param pko_command
+ *               PKO HW command word
+ * @param packet Packet to send
+ * @param addr   Plysical address of a work queue entry or physical address to zero on complete.
+ * @param use_locking
+ *               CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or CVMX_PKO_LOCK_CMD_QUEUE
+ *
+ * @return returns CVMX_PKO_SUCCESS on success, or error code on failure of output
+ */
+static inline cvmx_pko_return_value_t
+cvmx_hwpko_send_packet_finish3(u64 ipd_port, u64 queue, cvmx_pko_command_word0_t pko_command,
+			       cvmx_buf_ptr_t packet, u64 addr, cvmx_pko_lock_t use_locking)
+{
+	cvmx_cmd_queue_result_t result;
+
+	if (use_locking == CVMX_PKO_LOCK_ATOMIC_TAG)
+		cvmx_pow_tag_sw_wait();
+
+	result = cvmx_cmd_queue_write3(CVMX_CMD_QUEUE_PKO(queue),
+				       (use_locking == CVMX_PKO_LOCK_CMD_QUEUE), pko_command.u64,
+				       packet.u64, addr);
+	if (cvmx_likely(result == CVMX_CMD_QUEUE_SUCCESS)) {
+		cvmx_pko_doorbell(ipd_port, queue, 3);
+		return CVMX_PKO_SUCCESS;
+	} else if ((result == CVMX_CMD_QUEUE_NO_MEMORY) || (result == CVMX_CMD_QUEUE_FULL)) {
+		return CVMX_PKO_NO_MEMORY;
+	} else {
+		return CVMX_PKO_INVALID_QUEUE;
+	}
+}
+
+/**
+ * Get the first pko_port for the (interface, index)
+ *
+ * @param interface
+ * @param index
+ */
+int cvmx_pko_get_base_pko_port(int interface, int index);
+
+/**
+ * Get the number of pko_ports for the (interface, index)
+ *
+ * @param interface
+ * @param index
+ */
+int cvmx_pko_get_num_pko_ports(int interface, int index);
+
+/**
+ * For a given port number, return the base pko output queue
+ * for the port.
+ *
+ * @param port   IPD port number
+ * @return Base output queue
+ */
+int cvmx_pko_get_base_queue(int port);
+
+/**
+ * For a given port number, return the number of pko output queues.
+ *
+ * @param port   IPD port number
+ * @return Number of output queues
+ */
+int cvmx_pko_get_num_queues(int port);
+
+/**
+ * Sets the internal FPA pool data structure for PKO comamnd queue.
+ * @param pool	fpa pool number yo use
+ * @param buffer_size	buffer size of pool
+ * @param buffer_count	number of buufers to allocate to pool
+ *
+ * @note the caller is responsable for setting up the pool with
+ * an appropriate buffer size and sufficient buffer count.
+ */
+void cvmx_pko_set_cmd_que_pool_config(s64 pool, u64 buffer_size, u64 buffer_count);
+
+/**
+ * Get the status counters for a port.
+ *
+ * @param ipd_port Port number (ipd_port) to get statistics for.
+ * @param clear    Set to 1 to clear the counters after they are read
+ * @param status   Where to put the results.
+ *
+ * Note:
+ *     - Only the doorbell for the base queue of the ipd_port is
+ *       collected.
+ *     - Retrieving the stats involves writing the index through
+ *       CVMX_PKO_REG_READ_IDX and reading the stat CSRs, in that
+ *       order. It is not MP-safe and caller should guarantee
+ *       atomicity.
+ */
+void cvmx_pko_get_port_status(u64 ipd_port, u64 clear, cvmx_pko_port_status_t *status);
+
+/**
+ * Rate limit a PKO port to a max packets/sec. This function is only
+ * supported on CN57XX, CN56XX, CN55XX, and CN54XX.
+ *
+ * @param port      Port to rate limit
+ * @param packets_s Maximum packet/sec
+ * @param burst     Maximum number of packets to burst in a row before rate
+ *                  limiting cuts in.
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_pko_rate_limit_packets(int port, int packets_s, int burst);
+
+/**
+ * Rate limit a PKO port to a max bits/sec. This function is only
+ * supported on CN57XX, CN56XX, CN55XX, and CN54XX.
+ *
+ * @param port   Port to rate limit
+ * @param bits_s PKO rate limit in bits/sec
+ * @param burst  Maximum number of bits to burst before rate
+ *               limiting cuts in.
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_pko_rate_limit_bits(int port, u64 bits_s, int burst);
+
+/**
+ * @INTERNAL
+ *
+ * Retrieve the PKO pipe number for a port
+ *
+ * @param interface
+ * @param index
+ *
+ * @return negative on error.
+ *
+ * This applies only to the non-loopback interfaces.
+ *
+ */
+int __cvmx_pko_get_pipe(int interface, int index);
+
+/**
+ * For a given PKO port number, return the base output queue
+ * for the port.
+ *
+ * @param pko_port   PKO port number
+ * @return           Base output queue
+ */
+int cvmx_pko_get_base_queue_pkoid(int pko_port);
+
+/**
+ * For a given PKO port number, return the number of output queues
+ * for the port.
+ *
+ * @param pko_port	PKO port number
+ * @return		the number of output queues
+ */
+int cvmx_pko_get_num_queues_pkoid(int pko_port);
+
+/**
+ * Ring the packet output doorbell. This tells the packet
+ * output hardware that "len" command words have been added
+ * to its pending list.  This command includes the required
+ * CVMX_SYNCWS before the doorbell ring.
+ *
+ * @param pko_port   Port the packet is for
+ * @param queue  Queue the packet is for
+ * @param len    Length of the command in 64 bit words
+ */
+static inline void cvmx_pko_doorbell_pkoid(u64 pko_port, u64 queue, u64 len)
+{
+	cvmx_pko_doorbell_address_t ptr;
+
+	ptr.u64 = 0;
+	ptr.s.mem_space = CVMX_IO_SEG;
+	ptr.s.did = CVMX_OCT_DID_PKT_SEND;
+	ptr.s.is_io = 1;
+	ptr.s.port = pko_port;
+	ptr.s.queue = queue;
+	/* Need to make sure output queue data is in DRAM before doorbell write */
+	CVMX_SYNCWS;
+	cvmx_write_io(ptr.u64, len);
+}
+
+/**
+ * Complete packet output. cvmx_pko_send_packet_prepare() must be called exactly once before this,
+ * and the same parameters must be passed to both cvmx_pko_send_packet_prepare() and
+ * cvmx_pko_send_packet_finish_pkoid().
+ *
+ * @param pko_port   Port to send it on
+ * @param queue  Queue to use
+ * @param pko_command
+ *               PKO HW command word
+ * @param packet Packet to send
+ * @param use_locking
+ *               CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or CVMX_PKO_LOCK_CMD_QUEUE
+ *
+ * @return returns CVMX_PKO_SUCCESS on success, or error code on failure of output
+ */
+static inline cvmx_pko_return_value_t
+cvmx_hwpko_send_packet_finish_pkoid(int pko_port, u64 queue, cvmx_pko_command_word0_t pko_command,
+				    cvmx_buf_ptr_t packet, cvmx_pko_lock_t use_locking)
+{
+	cvmx_cmd_queue_result_t result;
+
+	if (use_locking == CVMX_PKO_LOCK_ATOMIC_TAG)
+		cvmx_pow_tag_sw_wait();
+
+	result = cvmx_cmd_queue_write2(CVMX_CMD_QUEUE_PKO(queue),
+				       (use_locking == CVMX_PKO_LOCK_CMD_QUEUE), pko_command.u64,
+				       packet.u64);
+	if (cvmx_likely(result == CVMX_CMD_QUEUE_SUCCESS)) {
+		cvmx_pko_doorbell_pkoid(pko_port, queue, 2);
+		return CVMX_PKO_SUCCESS;
+	} else if ((result == CVMX_CMD_QUEUE_NO_MEMORY) || (result == CVMX_CMD_QUEUE_FULL)) {
+		return CVMX_PKO_NO_MEMORY;
+	} else {
+		return CVMX_PKO_INVALID_QUEUE;
+	}
+}
+
+/**
+ * Complete packet output. cvmx_pko_send_packet_prepare() must be called exactly once before this,
+ * and the same parameters must be passed to both cvmx_pko_send_packet_prepare() and
+ * cvmx_pko_send_packet_finish_pkoid().
+ *
+ * @param pko_port   The PKO port the packet is for
+ * @param queue  Queue to use
+ * @param pko_command
+ *               PKO HW command word
+ * @param packet Packet to send
+ * @param addr   Plysical address of a work queue entry or physical address to zero on complete.
+ * @param use_locking
+ *               CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or CVMX_PKO_LOCK_CMD_QUEUE
+ *
+ * @return returns CVMX_PKO_SUCCESS on success, or error code on failure of output
+ */
+static inline cvmx_pko_return_value_t
+cvmx_hwpko_send_packet_finish3_pkoid(u64 pko_port, u64 queue, cvmx_pko_command_word0_t pko_command,
+				     cvmx_buf_ptr_t packet, u64 addr, cvmx_pko_lock_t use_locking)
+{
+	cvmx_cmd_queue_result_t result;
+
+	if (use_locking == CVMX_PKO_LOCK_ATOMIC_TAG)
+		cvmx_pow_tag_sw_wait();
+
+	result = cvmx_cmd_queue_write3(CVMX_CMD_QUEUE_PKO(queue),
+				       (use_locking == CVMX_PKO_LOCK_CMD_QUEUE), pko_command.u64,
+				       packet.u64, addr);
+	if (cvmx_likely(result == CVMX_CMD_QUEUE_SUCCESS)) {
+		cvmx_pko_doorbell_pkoid(pko_port, queue, 3);
+		return CVMX_PKO_SUCCESS;
+	} else if ((result == CVMX_CMD_QUEUE_NO_MEMORY) || (result == CVMX_CMD_QUEUE_FULL)) {
+		return CVMX_PKO_NO_MEMORY;
+	} else {
+		return CVMX_PKO_INVALID_QUEUE;
+	}
+}
+
+/*
+ * Obtain the number of PKO commands pending in a queue
+ *
+ * @param queue is the queue identifier to be queried
+ * @return the number of commands pending transmission or -1 on error
+ */
+int cvmx_pko_queue_pend_count(cvmx_cmd_queue_id_t queue);
+
+void cvmx_pko_set_cmd_queue_pool_buffer_count(u64 buffer_count);
+
+#endif /* __CVMX_HWPKO_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-ilk.h b/arch/mips/mach-octeon/include/mach/cvmx-ilk.h
new file mode 100644
index 0000000..7272983
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-ilk.h
@@ -0,0 +1,154 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * This file contains defines for the ILK interface
+ */
+
+#ifndef __CVMX_ILK_H__
+#define __CVMX_ILK_H__
+
+/* CSR typedefs have been moved to cvmx-ilk-defs.h */
+
+/*
+ * Note: this macro must match the first ilk port in the ipd_port_map_68xx[]
+ * and ipd_port_map_78xx[] arrays.
+ */
+static inline int CVMX_ILK_GBL_BASE(void)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+		return 5;
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return 6;
+	return -1;
+}
+
+static inline int CVMX_ILK_QLM_BASE(void)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+		return 1;
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return 4;
+	return -1;
+}
+
+typedef struct {
+	int intf_en : 1;
+	int la_mode : 1;
+	int reserved : 14; /* unused */
+	int lane_speed : 16;
+	/* add more here */
+} cvmx_ilk_intf_t;
+
+#define CVMX_NUM_ILK_INTF 2
+static inline int CVMX_ILK_MAX_LANES(void)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+		return 8;
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return 16;
+	return -1;
+}
+
+extern unsigned short cvmx_ilk_lane_mask[CVMX_MAX_NODES][CVMX_NUM_ILK_INTF];
+
+typedef struct {
+	unsigned int pipe;
+	unsigned int chan;
+} cvmx_ilk_pipe_chan_t;
+
+#define CVMX_ILK_MAX_PIPES 45
+/* Max number of channels allowed */
+#define CVMX_ILK_MAX_CHANS 256
+
+extern int cvmx_ilk_chans[CVMX_MAX_NODES][CVMX_NUM_ILK_INTF];
+
+typedef struct {
+	unsigned int chan;
+	unsigned int pknd;
+} cvmx_ilk_chan_pknd_t;
+
+#define CVMX_ILK_MAX_PKNDS 16 /* must be <45 */
+
+typedef struct {
+	int *chan_list; /* for discrete channels. or, must be null */
+	unsigned int num_chans;
+
+	unsigned int chan_start; /* for continuous channels */
+	unsigned int chan_end;
+	unsigned int chan_step;
+
+	unsigned int clr_on_rd;
+} cvmx_ilk_stats_ctrl_t;
+
+#define CVMX_ILK_MAX_CAL      288
+#define CVMX_ILK_MAX_CAL_IDX  (CVMX_ILK_MAX_CAL / 8)
+#define CVMX_ILK_TX_MIN_CAL   1
+#define CVMX_ILK_RX_MIN_CAL   1
+#define CVMX_ILK_CAL_GRP_SZ   8
+#define CVMX_ILK_PIPE_BPID_SZ 7
+#define CVMX_ILK_ENT_CTRL_SZ  2
+#define CVMX_ILK_RX_FIFO_WM   0x200
+
+typedef enum { PIPE_BPID = 0, LINK, XOFF, XON } cvmx_ilk_cal_ent_ctrl_t;
+
+typedef struct {
+	unsigned char pipe_bpid;
+	cvmx_ilk_cal_ent_ctrl_t ent_ctrl;
+} cvmx_ilk_cal_entry_t;
+
+typedef enum { CVMX_ILK_LPBK_DISA = 0, CVMX_ILK_LPBK_ENA } cvmx_ilk_lpbk_ena_t;
+
+typedef enum { CVMX_ILK_LPBK_INT = 0, CVMX_ILK_LPBK_EXT } cvmx_ilk_lpbk_mode_t;
+
+/**
+ * This header is placed in front of all received ILK look-aside mode packets
+ */
+typedef union {
+	u64 u64;
+
+	struct {
+		u32 reserved_63_57 : 7;	  /* bits 63...57 */
+		u32 nsp_cmd : 5;	  /* bits 56...52 */
+		u32 nsp_flags : 4;	  /* bits 51...48 */
+		u32 nsp_grp_id_upper : 6; /* bits 47...42 */
+		u32 reserved_41_40 : 2;	  /* bits 41...40 */
+		/* Protocol type, 1 for LA mode packet */
+		u32 la_mode : 1;	  /* bit  39      */
+		u32 nsp_grp_id_lower : 2; /* bits 38...37 */
+		u32 nsp_xid_upper : 4;	  /* bits 36...33 */
+		/* ILK channel number, 0 or 1 */
+		u32 ilk_channel : 1;   /* bit  32      */
+		u32 nsp_xid_lower : 8; /* bits 31...24 */
+		/* Unpredictable, may be any value */
+		u32 reserved_23_0 : 24; /* bits 23...0  */
+	} s;
+} cvmx_ilk_la_nsp_compact_hdr_t;
+
+typedef struct cvmx_ilk_LA_mode_struct {
+	int ilk_LA_mode;
+	int ilk_LA_mode_cal_ena;
+} cvmx_ilk_LA_mode_t;
+
+extern cvmx_ilk_LA_mode_t cvmx_ilk_LA_mode[CVMX_NUM_ILK_INTF];
+
+int cvmx_ilk_use_la_mode(int interface, int channel);
+int cvmx_ilk_start_interface(int interface, unsigned short num_lanes);
+int cvmx_ilk_start_interface_la(int interface, unsigned char num_lanes);
+int cvmx_ilk_set_pipe(int interface, int pipe_base, unsigned int pipe_len);
+int cvmx_ilk_tx_set_channel(int interface, cvmx_ilk_pipe_chan_t *pch, unsigned int num_chs);
+int cvmx_ilk_rx_set_pknd(int interface, cvmx_ilk_chan_pknd_t *chpknd, unsigned int num_pknd);
+int cvmx_ilk_enable(int interface);
+int cvmx_ilk_disable(int interface);
+int cvmx_ilk_get_intf_ena(int interface);
+int cvmx_ilk_get_chan_info(int interface, unsigned char **chans, unsigned char *num_chan);
+cvmx_ilk_la_nsp_compact_hdr_t cvmx_ilk_enable_la_header(int ipd_port, int mode);
+void cvmx_ilk_show_stats(int interface, cvmx_ilk_stats_ctrl_t *pstats);
+int cvmx_ilk_cal_setup_rx(int interface, int cal_depth, cvmx_ilk_cal_entry_t *pent, int hi_wm,
+			  unsigned char cal_ena);
+int cvmx_ilk_cal_setup_tx(int interface, int cal_depth, cvmx_ilk_cal_entry_t *pent,
+			  unsigned char cal_ena);
+int cvmx_ilk_lpbk(int interface, cvmx_ilk_lpbk_ena_t enable, cvmx_ilk_lpbk_mode_t mode);
+int cvmx_ilk_la_mode_enable_rx_calendar(int interface);
+
+#endif /* __CVMX_ILK_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-ipd-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-ipd-defs.h
new file mode 100644
index 0000000..ad860fc
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-ipd-defs.h
@@ -0,0 +1,1925 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon ipd.
+ */
+
+#ifndef __CVMX_IPD_DEFS_H__
+#define __CVMX_IPD_DEFS_H__
+
+#define CVMX_IPD_1ST_MBUFF_SKIP		    (0x00014F0000000000ull)
+#define CVMX_IPD_1st_NEXT_PTR_BACK	    (0x00014F0000000150ull)
+#define CVMX_IPD_2nd_NEXT_PTR_BACK	    (0x00014F0000000158ull)
+#define CVMX_IPD_BIST_STATUS		    (0x00014F00000007F8ull)
+#define CVMX_IPD_BPIDX_MBUF_TH(offset)	    (0x00014F0000002000ull + ((offset) & 63) * 8)
+#define CVMX_IPD_BPID_BP_COUNTERX(offset)   (0x00014F0000003000ull + ((offset) & 63) * 8)
+#define CVMX_IPD_BP_PRT_RED_END		    (0x00014F0000000328ull)
+#define CVMX_IPD_CLK_COUNT		    (0x00014F0000000338ull)
+#define CVMX_IPD_CREDITS		    (0x00014F0000004410ull)
+#define CVMX_IPD_CTL_STATUS		    (0x00014F0000000018ull)
+#define CVMX_IPD_ECC_CTL		    (0x00014F0000004408ull)
+#define CVMX_IPD_FREE_PTR_FIFO_CTL	    (0x00014F0000000780ull)
+#define CVMX_IPD_FREE_PTR_VALUE		    (0x00014F0000000788ull)
+#define CVMX_IPD_HOLD_PTR_FIFO_CTL	    (0x00014F0000000790ull)
+#define CVMX_IPD_INT_ENB		    (0x00014F0000000160ull)
+#define CVMX_IPD_INT_SUM		    (0x00014F0000000168ull)
+#define CVMX_IPD_NEXT_PKT_PTR		    (0x00014F00000007A0ull)
+#define CVMX_IPD_NEXT_WQE_PTR		    (0x00014F00000007A8ull)
+#define CVMX_IPD_NOT_1ST_MBUFF_SKIP	    (0x00014F0000000008ull)
+#define CVMX_IPD_ON_BP_DROP_PKTX(offset)    (0x00014F0000004100ull)
+#define CVMX_IPD_PACKET_MBUFF_SIZE	    (0x00014F0000000010ull)
+#define CVMX_IPD_PKT_ERR		    (0x00014F00000003F0ull)
+#define CVMX_IPD_PKT_PTR_VALID		    (0x00014F0000000358ull)
+#define CVMX_IPD_PORTX_BP_PAGE_CNT(offset)  (0x00014F0000000028ull + ((offset) & 63) * 8)
+#define CVMX_IPD_PORTX_BP_PAGE_CNT2(offset) (0x00014F0000000368ull + ((offset) & 63) * 8 - 8 * 36)
+#define CVMX_IPD_PORTX_BP_PAGE_CNT3(offset) (0x00014F00000003D0ull + ((offset) & 63) * 8 - 8 * 40)
+#define CVMX_IPD_PORT_BP_COUNTERS2_PAIRX(offset)                                                   \
+	(0x00014F0000000388ull + ((offset) & 63) * 8 - 8 * 36)
+#define CVMX_IPD_PORT_BP_COUNTERS3_PAIRX(offset)                                                   \
+	(0x00014F00000003B0ull + ((offset) & 63) * 8 - 8 * 40)
+#define CVMX_IPD_PORT_BP_COUNTERS4_PAIRX(offset)                                                   \
+	(0x00014F0000000410ull + ((offset) & 63) * 8 - 8 * 44)
+#define CVMX_IPD_PORT_BP_COUNTERS_PAIRX(offset) (0x00014F00000001B8ull + ((offset) & 63) * 8)
+#define CVMX_IPD_PORT_PTR_FIFO_CTL		(0x00014F0000000798ull)
+#define CVMX_IPD_PORT_QOS_INTX(offset)		(0x00014F0000000808ull + ((offset) & 7) * 8)
+#define CVMX_IPD_PORT_QOS_INT_ENBX(offset)	(0x00014F0000000848ull + ((offset) & 7) * 8)
+#define CVMX_IPD_PORT_QOS_X_CNT(offset)		(0x00014F0000000888ull + ((offset) & 511) * 8)
+#define CVMX_IPD_PORT_SOPX(offset)		(0x00014F0000004400ull)
+#define CVMX_IPD_PRC_HOLD_PTR_FIFO_CTL		(0x00014F0000000348ull)
+#define CVMX_IPD_PRC_PORT_PTR_FIFO_CTL		(0x00014F0000000350ull)
+#define CVMX_IPD_PTR_COUNT			(0x00014F0000000320ull)
+#define CVMX_IPD_PWP_PTR_FIFO_CTL		(0x00014F0000000340ull)
+#define CVMX_IPD_QOS0_RED_MARKS			CVMX_IPD_QOSX_RED_MARKS(0)
+#define CVMX_IPD_QOS1_RED_MARKS			CVMX_IPD_QOSX_RED_MARKS(1)
+#define CVMX_IPD_QOS2_RED_MARKS			CVMX_IPD_QOSX_RED_MARKS(2)
+#define CVMX_IPD_QOS3_RED_MARKS			CVMX_IPD_QOSX_RED_MARKS(3)
+#define CVMX_IPD_QOS4_RED_MARKS			CVMX_IPD_QOSX_RED_MARKS(4)
+#define CVMX_IPD_QOS5_RED_MARKS			CVMX_IPD_QOSX_RED_MARKS(5)
+#define CVMX_IPD_QOS6_RED_MARKS			CVMX_IPD_QOSX_RED_MARKS(6)
+#define CVMX_IPD_QOS7_RED_MARKS			CVMX_IPD_QOSX_RED_MARKS(7)
+#define CVMX_IPD_QOSX_RED_MARKS(offset)		(0x00014F0000000178ull + ((offset) & 7) * 8)
+#define CVMX_IPD_QUE0_FREE_PAGE_CNT		(0x00014F0000000330ull)
+#define CVMX_IPD_RED_BPID_ENABLEX(offset)	(0x00014F0000004200ull)
+#define CVMX_IPD_RED_DELAY			(0x00014F0000004300ull)
+#define CVMX_IPD_RED_PORT_ENABLE		(0x00014F00000002D8ull)
+#define CVMX_IPD_RED_PORT_ENABLE2		(0x00014F00000003A8ull)
+#define CVMX_IPD_RED_QUE0_PARAM			CVMX_IPD_RED_QUEX_PARAM(0)
+#define CVMX_IPD_RED_QUE1_PARAM			CVMX_IPD_RED_QUEX_PARAM(1)
+#define CVMX_IPD_RED_QUE2_PARAM			CVMX_IPD_RED_QUEX_PARAM(2)
+#define CVMX_IPD_RED_QUE3_PARAM			CVMX_IPD_RED_QUEX_PARAM(3)
+#define CVMX_IPD_RED_QUE4_PARAM			CVMX_IPD_RED_QUEX_PARAM(4)
+#define CVMX_IPD_RED_QUE5_PARAM			CVMX_IPD_RED_QUEX_PARAM(5)
+#define CVMX_IPD_RED_QUE6_PARAM			CVMX_IPD_RED_QUEX_PARAM(6)
+#define CVMX_IPD_RED_QUE7_PARAM			CVMX_IPD_RED_QUEX_PARAM(7)
+#define CVMX_IPD_RED_QUEX_PARAM(offset)		(0x00014F00000002E0ull + ((offset) & 7) * 8)
+#define CVMX_IPD_REQ_WGT			(0x00014F0000004418ull)
+#define CVMX_IPD_SUB_PORT_BP_PAGE_CNT		(0x00014F0000000148ull)
+#define CVMX_IPD_SUB_PORT_FCS			(0x00014F0000000170ull)
+#define CVMX_IPD_SUB_PORT_QOS_CNT		(0x00014F0000000800ull)
+#define CVMX_IPD_WQE_FPA_QUEUE			(0x00014F0000000020ull)
+#define CVMX_IPD_WQE_PTR_VALID			(0x00014F0000000360ull)
+
+/**
+ * cvmx_ipd_1st_mbuff_skip
+ *
+ * The number of words that the IPD will skip when writing the first MBUFF.
+ *
+ */
+union cvmx_ipd_1st_mbuff_skip {
+	u64 u64;
+	struct cvmx_ipd_1st_mbuff_skip_s {
+		u64 reserved_6_63 : 58;
+		u64 skip_sz : 6;
+	} s;
+	struct cvmx_ipd_1st_mbuff_skip_s cn30xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn31xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn38xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn38xxp2;
+	struct cvmx_ipd_1st_mbuff_skip_s cn50xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn52xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn52xxp1;
+	struct cvmx_ipd_1st_mbuff_skip_s cn56xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn56xxp1;
+	struct cvmx_ipd_1st_mbuff_skip_s cn58xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn58xxp1;
+	struct cvmx_ipd_1st_mbuff_skip_s cn61xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn63xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn63xxp1;
+	struct cvmx_ipd_1st_mbuff_skip_s cn66xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn68xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn68xxp1;
+	struct cvmx_ipd_1st_mbuff_skip_s cn70xx;
+	struct cvmx_ipd_1st_mbuff_skip_s cn70xxp1;
+	struct cvmx_ipd_1st_mbuff_skip_s cnf71xx;
+};
+
+typedef union cvmx_ipd_1st_mbuff_skip cvmx_ipd_1st_mbuff_skip_t;
+
+/**
+ * cvmx_ipd_1st_next_ptr_back
+ *
+ * IPD_1st_NEXT_PTR_BACK = IPD First Next Pointer Back Values
+ * Contains the Back Field for use in creating the Next Pointer Header for the First MBUF
+ */
+union cvmx_ipd_1st_next_ptr_back {
+	u64 u64;
+	struct cvmx_ipd_1st_next_ptr_back_s {
+		u64 reserved_4_63 : 60;
+		u64 back : 4;
+	} s;
+	struct cvmx_ipd_1st_next_ptr_back_s cn30xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn31xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn38xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn38xxp2;
+	struct cvmx_ipd_1st_next_ptr_back_s cn50xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn52xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn52xxp1;
+	struct cvmx_ipd_1st_next_ptr_back_s cn56xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn56xxp1;
+	struct cvmx_ipd_1st_next_ptr_back_s cn58xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn58xxp1;
+	struct cvmx_ipd_1st_next_ptr_back_s cn61xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn63xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn63xxp1;
+	struct cvmx_ipd_1st_next_ptr_back_s cn66xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn68xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn68xxp1;
+	struct cvmx_ipd_1st_next_ptr_back_s cn70xx;
+	struct cvmx_ipd_1st_next_ptr_back_s cn70xxp1;
+	struct cvmx_ipd_1st_next_ptr_back_s cnf71xx;
+};
+
+typedef union cvmx_ipd_1st_next_ptr_back cvmx_ipd_1st_next_ptr_back_t;
+
+/**
+ * cvmx_ipd_2nd_next_ptr_back
+ *
+ * Contains the Back Field for use in creating the Next Pointer Header for the First MBUF
+ *
+ */
+union cvmx_ipd_2nd_next_ptr_back {
+	u64 u64;
+	struct cvmx_ipd_2nd_next_ptr_back_s {
+		u64 reserved_4_63 : 60;
+		u64 back : 4;
+	} s;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn30xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn31xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn38xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn38xxp2;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn50xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn52xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn52xxp1;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn56xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn56xxp1;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn58xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn58xxp1;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn61xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn63xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn63xxp1;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn66xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn68xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn68xxp1;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn70xx;
+	struct cvmx_ipd_2nd_next_ptr_back_s cn70xxp1;
+	struct cvmx_ipd_2nd_next_ptr_back_s cnf71xx;
+};
+
+typedef union cvmx_ipd_2nd_next_ptr_back cvmx_ipd_2nd_next_ptr_back_t;
+
+/**
+ * cvmx_ipd_bist_status
+ *
+ * BIST Status for IPD's Memories.
+ *
+ */
+union cvmx_ipd_bist_status {
+	u64 u64;
+	struct cvmx_ipd_bist_status_s {
+		u64 reserved_23_63 : 41;
+		u64 iiwo1 : 1;
+		u64 iiwo0 : 1;
+		u64 iio1 : 1;
+		u64 iio0 : 1;
+		u64 pbm4 : 1;
+		u64 csr_mem : 1;
+		u64 csr_ncmd : 1;
+		u64 pwq_wqed : 1;
+		u64 pwq_wp1 : 1;
+		u64 pwq_pow : 1;
+		u64 ipq_pbe1 : 1;
+		u64 ipq_pbe0 : 1;
+		u64 pbm3 : 1;
+		u64 pbm2 : 1;
+		u64 pbm1 : 1;
+		u64 pbm0 : 1;
+		u64 pbm_word : 1;
+		u64 pwq1 : 1;
+		u64 pwq0 : 1;
+		u64 prc_off : 1;
+		u64 ipd_old : 1;
+		u64 ipd_new : 1;
+		u64 pwp : 1;
+	} s;
+	struct cvmx_ipd_bist_status_cn30xx {
+		u64 reserved_16_63 : 48;
+		u64 pwq_wqed : 1;
+		u64 pwq_wp1 : 1;
+		u64 pwq_pow : 1;
+		u64 ipq_pbe1 : 1;
+		u64 ipq_pbe0 : 1;
+		u64 pbm3 : 1;
+		u64 pbm2 : 1;
+		u64 pbm1 : 1;
+		u64 pbm0 : 1;
+		u64 pbm_word : 1;
+		u64 pwq1 : 1;
+		u64 pwq0 : 1;
+		u64 prc_off : 1;
+		u64 ipd_old : 1;
+		u64 ipd_new : 1;
+		u64 pwp : 1;
+	} cn30xx;
+	struct cvmx_ipd_bist_status_cn30xx cn31xx;
+	struct cvmx_ipd_bist_status_cn30xx cn38xx;
+	struct cvmx_ipd_bist_status_cn30xx cn38xxp2;
+	struct cvmx_ipd_bist_status_cn30xx cn50xx;
+	struct cvmx_ipd_bist_status_cn52xx {
+		u64 reserved_18_63 : 46;
+		u64 csr_mem : 1;
+		u64 csr_ncmd : 1;
+		u64 pwq_wqed : 1;
+		u64 pwq_wp1 : 1;
+		u64 pwq_pow : 1;
+		u64 ipq_pbe1 : 1;
+		u64 ipq_pbe0 : 1;
+		u64 pbm3 : 1;
+		u64 pbm2 : 1;
+		u64 pbm1 : 1;
+		u64 pbm0 : 1;
+		u64 pbm_word : 1;
+		u64 pwq1 : 1;
+		u64 pwq0 : 1;
+		u64 prc_off : 1;
+		u64 ipd_old : 1;
+		u64 ipd_new : 1;
+		u64 pwp : 1;
+	} cn52xx;
+	struct cvmx_ipd_bist_status_cn52xx cn52xxp1;
+	struct cvmx_ipd_bist_status_cn52xx cn56xx;
+	struct cvmx_ipd_bist_status_cn52xx cn56xxp1;
+	struct cvmx_ipd_bist_status_cn30xx cn58xx;
+	struct cvmx_ipd_bist_status_cn30xx cn58xxp1;
+	struct cvmx_ipd_bist_status_cn52xx cn61xx;
+	struct cvmx_ipd_bist_status_cn52xx cn63xx;
+	struct cvmx_ipd_bist_status_cn52xx cn63xxp1;
+	struct cvmx_ipd_bist_status_cn52xx cn66xx;
+	struct cvmx_ipd_bist_status_s cn68xx;
+	struct cvmx_ipd_bist_status_s cn68xxp1;
+	struct cvmx_ipd_bist_status_cn52xx cn70xx;
+	struct cvmx_ipd_bist_status_cn52xx cn70xxp1;
+	struct cvmx_ipd_bist_status_cn52xx cnf71xx;
+};
+
+typedef union cvmx_ipd_bist_status cvmx_ipd_bist_status_t;
+
+/**
+ * cvmx_ipd_bp_prt_red_end
+ *
+ * When IPD applies backpressure to a PORT and the corresponding bit in this register is set,
+ * the RED Unit will drop packets for that port.
+ */
+union cvmx_ipd_bp_prt_red_end {
+	u64 u64;
+	struct cvmx_ipd_bp_prt_red_end_s {
+		u64 reserved_48_63 : 16;
+		u64 prt_enb : 48;
+	} s;
+	struct cvmx_ipd_bp_prt_red_end_cn30xx {
+		u64 reserved_36_63 : 28;
+		u64 prt_enb : 36;
+	} cn30xx;
+	struct cvmx_ipd_bp_prt_red_end_cn30xx cn31xx;
+	struct cvmx_ipd_bp_prt_red_end_cn30xx cn38xx;
+	struct cvmx_ipd_bp_prt_red_end_cn30xx cn38xxp2;
+	struct cvmx_ipd_bp_prt_red_end_cn30xx cn50xx;
+	struct cvmx_ipd_bp_prt_red_end_cn52xx {
+		u64 reserved_40_63 : 24;
+		u64 prt_enb : 40;
+	} cn52xx;
+	struct cvmx_ipd_bp_prt_red_end_cn52xx cn52xxp1;
+	struct cvmx_ipd_bp_prt_red_end_cn52xx cn56xx;
+	struct cvmx_ipd_bp_prt_red_end_cn52xx cn56xxp1;
+	struct cvmx_ipd_bp_prt_red_end_cn30xx cn58xx;
+	struct cvmx_ipd_bp_prt_red_end_cn30xx cn58xxp1;
+	struct cvmx_ipd_bp_prt_red_end_s cn61xx;
+	struct cvmx_ipd_bp_prt_red_end_cn63xx {
+		u64 reserved_44_63 : 20;
+		u64 prt_enb : 44;
+	} cn63xx;
+	struct cvmx_ipd_bp_prt_red_end_cn63xx cn63xxp1;
+	struct cvmx_ipd_bp_prt_red_end_s cn66xx;
+	struct cvmx_ipd_bp_prt_red_end_s cn70xx;
+	struct cvmx_ipd_bp_prt_red_end_s cn70xxp1;
+	struct cvmx_ipd_bp_prt_red_end_s cnf71xx;
+};
+
+typedef union cvmx_ipd_bp_prt_red_end cvmx_ipd_bp_prt_red_end_t;
+
+/**
+ * cvmx_ipd_bpid#_mbuf_th
+ *
+ * 0x2000 2FFF
+ *
+ *                  IPD_BPIDX_MBUF_TH = IPD BPID  MBUFF Threshold
+ *
+ * The number of MBUFFs in use by the BPID, that when exceeded, backpressure will be applied to the BPID.
+ */
+union cvmx_ipd_bpidx_mbuf_th {
+	u64 u64;
+	struct cvmx_ipd_bpidx_mbuf_th_s {
+		u64 reserved_18_63 : 46;
+		u64 bp_enb : 1;
+		u64 page_cnt : 17;
+	} s;
+	struct cvmx_ipd_bpidx_mbuf_th_s cn68xx;
+	struct cvmx_ipd_bpidx_mbuf_th_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_bpidx_mbuf_th cvmx_ipd_bpidx_mbuf_th_t;
+
+/**
+ * cvmx_ipd_bpid_bp_counter#
+ *
+ * RESERVE SPACE UPTO 0x2FFF
+ *
+ * 0x3000 0x3ffff
+ *
+ * IPD_BPID_BP_COUNTERX = MBUF BPID Counters used to generate Back Pressure Per BPID.
+ */
+union cvmx_ipd_bpid_bp_counterx {
+	u64 u64;
+	struct cvmx_ipd_bpid_bp_counterx_s {
+		u64 reserved_25_63 : 39;
+		u64 cnt_val : 25;
+	} s;
+	struct cvmx_ipd_bpid_bp_counterx_s cn68xx;
+	struct cvmx_ipd_bpid_bp_counterx_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_bpid_bp_counterx cvmx_ipd_bpid_bp_counterx_t;
+
+/**
+ * cvmx_ipd_clk_count
+ *
+ * Counts the number of core clocks periods since the de-asserition of reset.
+ *
+ */
+union cvmx_ipd_clk_count {
+	u64 u64;
+	struct cvmx_ipd_clk_count_s {
+		u64 clk_cnt : 64;
+	} s;
+	struct cvmx_ipd_clk_count_s cn30xx;
+	struct cvmx_ipd_clk_count_s cn31xx;
+	struct cvmx_ipd_clk_count_s cn38xx;
+	struct cvmx_ipd_clk_count_s cn38xxp2;
+	struct cvmx_ipd_clk_count_s cn50xx;
+	struct cvmx_ipd_clk_count_s cn52xx;
+	struct cvmx_ipd_clk_count_s cn52xxp1;
+	struct cvmx_ipd_clk_count_s cn56xx;
+	struct cvmx_ipd_clk_count_s cn56xxp1;
+	struct cvmx_ipd_clk_count_s cn58xx;
+	struct cvmx_ipd_clk_count_s cn58xxp1;
+	struct cvmx_ipd_clk_count_s cn61xx;
+	struct cvmx_ipd_clk_count_s cn63xx;
+	struct cvmx_ipd_clk_count_s cn63xxp1;
+	struct cvmx_ipd_clk_count_s cn66xx;
+	struct cvmx_ipd_clk_count_s cn68xx;
+	struct cvmx_ipd_clk_count_s cn68xxp1;
+	struct cvmx_ipd_clk_count_s cn70xx;
+	struct cvmx_ipd_clk_count_s cn70xxp1;
+	struct cvmx_ipd_clk_count_s cnf71xx;
+};
+
+typedef union cvmx_ipd_clk_count cvmx_ipd_clk_count_t;
+
+/**
+ * cvmx_ipd_credits
+ *
+ * IPD_CREDITS = IPD Credits
+ *
+ * The credits allowed for IPD.
+ */
+union cvmx_ipd_credits {
+	u64 u64;
+	struct cvmx_ipd_credits_s {
+		u64 reserved_16_63 : 48;
+		u64 iob_wrc : 8;
+		u64 iob_wr : 8;
+	} s;
+	struct cvmx_ipd_credits_s cn68xx;
+	struct cvmx_ipd_credits_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_credits cvmx_ipd_credits_t;
+
+/**
+ * cvmx_ipd_ctl_status
+ *
+ * The number of words in a MBUFF used for packet data store.
+ *
+ */
+union cvmx_ipd_ctl_status {
+	u64 u64;
+	struct cvmx_ipd_ctl_status_s {
+		u64 reserved_18_63 : 46;
+		u64 use_sop : 1;
+		u64 rst_done : 1;
+		u64 clken : 1;
+		u64 no_wptr : 1;
+		u64 pq_apkt : 1;
+		u64 pq_nabuf : 1;
+		u64 ipd_full : 1;
+		u64 pkt_off : 1;
+		u64 len_m8 : 1;
+		u64 reset : 1;
+		u64 addpkt : 1;
+		u64 naddbuf : 1;
+		u64 pkt_lend : 1;
+		u64 wqe_lend : 1;
+		u64 pbp_en : 1;
+		cvmx_ipd_mode_t opc_mode : 2;
+		u64 ipd_en : 1;
+	} s;
+	struct cvmx_ipd_ctl_status_cn30xx {
+		u64 reserved_10_63 : 54;
+		u64 len_m8 : 1;
+		u64 reset : 1;
+		u64 addpkt : 1;
+		u64 naddbuf : 1;
+		u64 pkt_lend : 1;
+		u64 wqe_lend : 1;
+		u64 pbp_en : 1;
+		cvmx_ipd_mode_t opc_mode : 2;
+		u64 ipd_en : 1;
+	} cn30xx;
+	struct cvmx_ipd_ctl_status_cn30xx cn31xx;
+	struct cvmx_ipd_ctl_status_cn30xx cn38xx;
+	struct cvmx_ipd_ctl_status_cn38xxp2 {
+		u64 reserved_9_63 : 55;
+		u64 reset : 1;
+		u64 addpkt : 1;
+		u64 naddbuf : 1;
+		u64 pkt_lend : 1;
+		u64 wqe_lend : 1;
+		u64 pbp_en : 1;
+		cvmx_ipd_mode_t opc_mode : 2;
+		u64 ipd_en : 1;
+	} cn38xxp2;
+	struct cvmx_ipd_ctl_status_cn50xx {
+		u64 reserved_15_63 : 49;
+		u64 no_wptr : 1;
+		u64 pq_apkt : 1;
+		u64 pq_nabuf : 1;
+		u64 ipd_full : 1;
+		u64 pkt_off : 1;
+		u64 len_m8 : 1;
+		u64 reset : 1;
+		u64 addpkt : 1;
+		u64 naddbuf : 1;
+		u64 pkt_lend : 1;
+		u64 wqe_lend : 1;
+		u64 pbp_en : 1;
+		cvmx_ipd_mode_t opc_mode : 2;
+		u64 ipd_en : 1;
+	} cn50xx;
+	struct cvmx_ipd_ctl_status_cn50xx cn52xx;
+	struct cvmx_ipd_ctl_status_cn50xx cn52xxp1;
+	struct cvmx_ipd_ctl_status_cn50xx cn56xx;
+	struct cvmx_ipd_ctl_status_cn50xx cn56xxp1;
+	struct cvmx_ipd_ctl_status_cn58xx {
+		u64 reserved_12_63 : 52;
+		u64 ipd_full : 1;
+		u64 pkt_off : 1;
+		u64 len_m8 : 1;
+		u64 reset : 1;
+		u64 addpkt : 1;
+		u64 naddbuf : 1;
+		u64 pkt_lend : 1;
+		u64 wqe_lend : 1;
+		u64 pbp_en : 1;
+		cvmx_ipd_mode_t opc_mode : 2;
+		u64 ipd_en : 1;
+	} cn58xx;
+	struct cvmx_ipd_ctl_status_cn58xx cn58xxp1;
+	struct cvmx_ipd_ctl_status_s cn61xx;
+	struct cvmx_ipd_ctl_status_s cn63xx;
+	struct cvmx_ipd_ctl_status_cn63xxp1 {
+		u64 reserved_16_63 : 48;
+		u64 clken : 1;
+		u64 no_wptr : 1;
+		u64 pq_apkt : 1;
+		u64 pq_nabuf : 1;
+		u64 ipd_full : 1;
+		u64 pkt_off : 1;
+		u64 len_m8 : 1;
+		u64 reset : 1;
+		u64 addpkt : 1;
+		u64 naddbuf : 1;
+		u64 pkt_lend : 1;
+		u64 wqe_lend : 1;
+		u64 pbp_en : 1;
+		cvmx_ipd_mode_t opc_mode : 2;
+		u64 ipd_en : 1;
+	} cn63xxp1;
+	struct cvmx_ipd_ctl_status_s cn66xx;
+	struct cvmx_ipd_ctl_status_s cn68xx;
+	struct cvmx_ipd_ctl_status_s cn68xxp1;
+	struct cvmx_ipd_ctl_status_s cn70xx;
+	struct cvmx_ipd_ctl_status_s cn70xxp1;
+	struct cvmx_ipd_ctl_status_s cnf71xx;
+};
+
+typedef union cvmx_ipd_ctl_status cvmx_ipd_ctl_status_t;
+
+/**
+ * cvmx_ipd_ecc_ctl
+ *
+ * IPD_ECC_CTL = IPD ECC Control
+ *
+ * Allows inserting ECC errors for testing.
+ */
+union cvmx_ipd_ecc_ctl {
+	u64 u64;
+	struct cvmx_ipd_ecc_ctl_s {
+		u64 reserved_8_63 : 56;
+		u64 pm3_syn : 2;
+		u64 pm2_syn : 2;
+		u64 pm1_syn : 2;
+		u64 pm0_syn : 2;
+	} s;
+	struct cvmx_ipd_ecc_ctl_s cn68xx;
+	struct cvmx_ipd_ecc_ctl_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_ecc_ctl cvmx_ipd_ecc_ctl_t;
+
+/**
+ * cvmx_ipd_free_ptr_fifo_ctl
+ *
+ * IPD_FREE_PTR_FIFO_CTL = IPD's FREE Pointer FIFO Control
+ *
+ * Allows reading of the Page-Pointers stored in the IPD's FREE Fifo.
+ * See also the IPD_FREE_PTR_VALUE
+ */
+union cvmx_ipd_free_ptr_fifo_ctl {
+	u64 u64;
+	struct cvmx_ipd_free_ptr_fifo_ctl_s {
+		u64 reserved_32_63 : 32;
+		u64 max_cnts : 7;
+		u64 wraddr : 8;
+		u64 praddr : 8;
+		u64 cena : 1;
+		u64 raddr : 8;
+	} s;
+	struct cvmx_ipd_free_ptr_fifo_ctl_s cn68xx;
+	struct cvmx_ipd_free_ptr_fifo_ctl_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_free_ptr_fifo_ctl cvmx_ipd_free_ptr_fifo_ctl_t;
+
+/**
+ * cvmx_ipd_free_ptr_value
+ *
+ * IPD_FREE_PTR_VALUE = IPD's FREE Pointer Value
+ *
+ * The value of the pointer selected through the IPD_FREE_PTR_FIFO_CTL
+ */
+union cvmx_ipd_free_ptr_value {
+	u64 u64;
+	struct cvmx_ipd_free_ptr_value_s {
+		u64 reserved_33_63 : 31;
+		u64 ptr : 33;
+	} s;
+	struct cvmx_ipd_free_ptr_value_s cn68xx;
+	struct cvmx_ipd_free_ptr_value_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_free_ptr_value cvmx_ipd_free_ptr_value_t;
+
+/**
+ * cvmx_ipd_hold_ptr_fifo_ctl
+ *
+ * IPD_HOLD_PTR_FIFO_CTL = IPD's Holding Pointer FIFO Control
+ *
+ * Allows reading of the Page-Pointers stored in the IPD's Holding Fifo.
+ */
+union cvmx_ipd_hold_ptr_fifo_ctl {
+	u64 u64;
+	struct cvmx_ipd_hold_ptr_fifo_ctl_s {
+		u64 reserved_43_63 : 21;
+		u64 ptr : 33;
+		u64 max_pkt : 3;
+		u64 praddr : 3;
+		u64 cena : 1;
+		u64 raddr : 3;
+	} s;
+	struct cvmx_ipd_hold_ptr_fifo_ctl_s cn68xx;
+	struct cvmx_ipd_hold_ptr_fifo_ctl_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_hold_ptr_fifo_ctl cvmx_ipd_hold_ptr_fifo_ctl_t;
+
+/**
+ * cvmx_ipd_int_enb
+ *
+ * IPD_INTERRUPT_ENB = IPD Interrupt Enable Register
+ * Used to enable the various interrupting conditions of IPD
+ */
+union cvmx_ipd_int_enb {
+	u64 u64;
+	struct cvmx_ipd_int_enb_s {
+		u64 reserved_23_63 : 41;
+		u64 pw3_dbe : 1;
+		u64 pw3_sbe : 1;
+		u64 pw2_dbe : 1;
+		u64 pw2_sbe : 1;
+		u64 pw1_dbe : 1;
+		u64 pw1_sbe : 1;
+		u64 pw0_dbe : 1;
+		u64 pw0_sbe : 1;
+		u64 dat : 1;
+		u64 eop : 1;
+		u64 sop : 1;
+		u64 pq_sub : 1;
+		u64 pq_add : 1;
+		u64 bc_ovr : 1;
+		u64 d_coll : 1;
+		u64 c_coll : 1;
+		u64 cc_ovr : 1;
+		u64 dc_ovr : 1;
+		u64 bp_sub : 1;
+		u64 prc_par3 : 1;
+		u64 prc_par2 : 1;
+		u64 prc_par1 : 1;
+		u64 prc_par0 : 1;
+	} s;
+	struct cvmx_ipd_int_enb_cn30xx {
+		u64 reserved_5_63 : 59;
+		u64 bp_sub : 1;
+		u64 prc_par3 : 1;
+		u64 prc_par2 : 1;
+		u64 prc_par1 : 1;
+		u64 prc_par0 : 1;
+	} cn30xx;
+	struct cvmx_ipd_int_enb_cn30xx cn31xx;
+	struct cvmx_ipd_int_enb_cn38xx {
+		u64 reserved_10_63 : 54;
+		u64 bc_ovr : 1;
+		u64 d_coll : 1;
+		u64 c_coll : 1;
+		u64 cc_ovr : 1;
+		u64 dc_ovr : 1;
+		u64 bp_sub : 1;
+		u64 prc_par3 : 1;
+		u64 prc_par2 : 1;
+		u64 prc_par1 : 1;
+		u64 prc_par0 : 1;
+	} cn38xx;
+	struct cvmx_ipd_int_enb_cn30xx cn38xxp2;
+	struct cvmx_ipd_int_enb_cn38xx cn50xx;
+	struct cvmx_ipd_int_enb_cn52xx {
+		u64 reserved_12_63 : 52;
+		u64 pq_sub : 1;
+		u64 pq_add : 1;
+		u64 bc_ovr : 1;
+		u64 d_coll : 1;
+		u64 c_coll : 1;
+		u64 cc_ovr : 1;
+		u64 dc_ovr : 1;
+		u64 bp_sub : 1;
+		u64 prc_par3 : 1;
+		u64 prc_par2 : 1;
+		u64 prc_par1 : 1;
+		u64 prc_par0 : 1;
+	} cn52xx;
+	struct cvmx_ipd_int_enb_cn52xx cn52xxp1;
+	struct cvmx_ipd_int_enb_cn52xx cn56xx;
+	struct cvmx_ipd_int_enb_cn52xx cn56xxp1;
+	struct cvmx_ipd_int_enb_cn38xx cn58xx;
+	struct cvmx_ipd_int_enb_cn38xx cn58xxp1;
+	struct cvmx_ipd_int_enb_cn52xx cn61xx;
+	struct cvmx_ipd_int_enb_cn52xx cn63xx;
+	struct cvmx_ipd_int_enb_cn52xx cn63xxp1;
+	struct cvmx_ipd_int_enb_cn52xx cn66xx;
+	struct cvmx_ipd_int_enb_s cn68xx;
+	struct cvmx_ipd_int_enb_s cn68xxp1;
+	struct cvmx_ipd_int_enb_cn52xx cn70xx;
+	struct cvmx_ipd_int_enb_cn52xx cn70xxp1;
+	struct cvmx_ipd_int_enb_cn52xx cnf71xx;
+};
+
+typedef union cvmx_ipd_int_enb cvmx_ipd_int_enb_t;
+
+/**
+ * cvmx_ipd_int_sum
+ *
+ * IPD_INTERRUPT_SUM = IPD Interrupt Summary Register
+ * Set when an interrupt condition occurs, write '1' to clear.
+ */
+union cvmx_ipd_int_sum {
+	u64 u64;
+	struct cvmx_ipd_int_sum_s {
+		u64 reserved_23_63 : 41;
+		u64 pw3_dbe : 1;
+		u64 pw3_sbe : 1;
+		u64 pw2_dbe : 1;
+		u64 pw2_sbe : 1;
+		u64 pw1_dbe : 1;
+		u64 pw1_sbe : 1;
+		u64 pw0_dbe : 1;
+		u64 pw0_sbe : 1;
+		u64 dat : 1;
+		u64 eop : 1;
+		u64 sop : 1;
+		u64 pq_sub : 1;
+		u64 pq_add : 1;
+		u64 bc_ovr : 1;
+		u64 d_coll : 1;
+		u64 c_coll : 1;
+		u64 cc_ovr : 1;
+		u64 dc_ovr : 1;
+		u64 bp_sub : 1;
+		u64 prc_par3 : 1;
+		u64 prc_par2 : 1;
+		u64 prc_par1 : 1;
+		u64 prc_par0 : 1;
+	} s;
+	struct cvmx_ipd_int_sum_cn30xx {
+		u64 reserved_5_63 : 59;
+		u64 bp_sub : 1;
+		u64 prc_par3 : 1;
+		u64 prc_par2 : 1;
+		u64 prc_par1 : 1;
+		u64 prc_par0 : 1;
+	} cn30xx;
+	struct cvmx_ipd_int_sum_cn30xx cn31xx;
+	struct cvmx_ipd_int_sum_cn38xx {
+		u64 reserved_10_63 : 54;
+		u64 bc_ovr : 1;
+		u64 d_coll : 1;
+		u64 c_coll : 1;
+		u64 cc_ovr : 1;
+		u64 dc_ovr : 1;
+		u64 bp_sub : 1;
+		u64 prc_par3 : 1;
+		u64 prc_par2 : 1;
+		u64 prc_par1 : 1;
+		u64 prc_par0 : 1;
+	} cn38xx;
+	struct cvmx_ipd_int_sum_cn30xx cn38xxp2;
+	struct cvmx_ipd_int_sum_cn38xx cn50xx;
+	struct cvmx_ipd_int_sum_cn52xx {
+		u64 reserved_12_63 : 52;
+		u64 pq_sub : 1;
+		u64 pq_add : 1;
+		u64 bc_ovr : 1;
+		u64 d_coll : 1;
+		u64 c_coll : 1;
+		u64 cc_ovr : 1;
+		u64 dc_ovr : 1;
+		u64 bp_sub : 1;
+		u64 prc_par3 : 1;
+		u64 prc_par2 : 1;
+		u64 prc_par1 : 1;
+		u64 prc_par0 : 1;
+	} cn52xx;
+	struct cvmx_ipd_int_sum_cn52xx cn52xxp1;
+	struct cvmx_ipd_int_sum_cn52xx cn56xx;
+	struct cvmx_ipd_int_sum_cn52xx cn56xxp1;
+	struct cvmx_ipd_int_sum_cn38xx cn58xx;
+	struct cvmx_ipd_int_sum_cn38xx cn58xxp1;
+	struct cvmx_ipd_int_sum_cn52xx cn61xx;
+	struct cvmx_ipd_int_sum_cn52xx cn63xx;
+	struct cvmx_ipd_int_sum_cn52xx cn63xxp1;
+	struct cvmx_ipd_int_sum_cn52xx cn66xx;
+	struct cvmx_ipd_int_sum_s cn68xx;
+	struct cvmx_ipd_int_sum_s cn68xxp1;
+	struct cvmx_ipd_int_sum_cn52xx cn70xx;
+	struct cvmx_ipd_int_sum_cn52xx cn70xxp1;
+	struct cvmx_ipd_int_sum_cn52xx cnf71xx;
+};
+
+typedef union cvmx_ipd_int_sum cvmx_ipd_int_sum_t;
+
+/**
+ * cvmx_ipd_next_pkt_ptr
+ *
+ * IPD_NEXT_PKT_PTR = IPD's Next Packet Pointer
+ *
+ * The value of the packet-pointer fetched and in the valid register.
+ */
+union cvmx_ipd_next_pkt_ptr {
+	u64 u64;
+	struct cvmx_ipd_next_pkt_ptr_s {
+		u64 reserved_33_63 : 31;
+		u64 ptr : 33;
+	} s;
+	struct cvmx_ipd_next_pkt_ptr_s cn68xx;
+	struct cvmx_ipd_next_pkt_ptr_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_next_pkt_ptr cvmx_ipd_next_pkt_ptr_t;
+
+/**
+ * cvmx_ipd_next_wqe_ptr
+ *
+ * IPD_NEXT_WQE_PTR = IPD's NEXT_WQE Pointer
+ *
+ * The value of the WQE-pointer fetched and in the valid register.
+ */
+union cvmx_ipd_next_wqe_ptr {
+	u64 u64;
+	struct cvmx_ipd_next_wqe_ptr_s {
+		u64 reserved_33_63 : 31;
+		u64 ptr : 33;
+	} s;
+	struct cvmx_ipd_next_wqe_ptr_s cn68xx;
+	struct cvmx_ipd_next_wqe_ptr_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_next_wqe_ptr cvmx_ipd_next_wqe_ptr_t;
+
+/**
+ * cvmx_ipd_not_1st_mbuff_skip
+ *
+ * The number of words that the IPD will skip when writing any MBUFF that is not the first.
+ *
+ */
+union cvmx_ipd_not_1st_mbuff_skip {
+	u64 u64;
+	struct cvmx_ipd_not_1st_mbuff_skip_s {
+		u64 reserved_6_63 : 58;
+		u64 skip_sz : 6;
+	} s;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn30xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn31xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn38xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn38xxp2;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn50xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn52xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn52xxp1;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn56xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn56xxp1;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn58xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn58xxp1;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn61xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn63xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn63xxp1;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn66xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn68xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn68xxp1;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn70xx;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cn70xxp1;
+	struct cvmx_ipd_not_1st_mbuff_skip_s cnf71xx;
+};
+
+typedef union cvmx_ipd_not_1st_mbuff_skip cvmx_ipd_not_1st_mbuff_skip_t;
+
+/**
+ * cvmx_ipd_on_bp_drop_pkt#
+ *
+ * RESERVE SPACE UPTO 0x3FFF
+ *
+ *
+ * RESERVED FOR FORMER IPD_SUB_PKIND_FCS - MOVED TO PIP
+ *
+ * RESERVE 4008 - 40FF
+ *
+ *
+ *                  IPD_ON_BP_DROP_PKT = IPD On Backpressure Drop Packet
+ *
+ * When IPD applies backpressure to a BPID and the corresponding bit in this register is set,
+ * then previously received packets will be dropped when processed.
+ */
+union cvmx_ipd_on_bp_drop_pktx {
+	u64 u64;
+	struct cvmx_ipd_on_bp_drop_pktx_s {
+		u64 prt_enb : 64;
+	} s;
+	struct cvmx_ipd_on_bp_drop_pktx_s cn68xx;
+	struct cvmx_ipd_on_bp_drop_pktx_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_on_bp_drop_pktx cvmx_ipd_on_bp_drop_pktx_t;
+
+/**
+ * cvmx_ipd_packet_mbuff_size
+ *
+ * The number of words in a MBUFF used for packet data store.
+ *
+ */
+union cvmx_ipd_packet_mbuff_size {
+	u64 u64;
+	struct cvmx_ipd_packet_mbuff_size_s {
+		u64 reserved_12_63 : 52;
+		u64 mb_size : 12;
+	} s;
+	struct cvmx_ipd_packet_mbuff_size_s cn30xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn31xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn38xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn38xxp2;
+	struct cvmx_ipd_packet_mbuff_size_s cn50xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn52xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn52xxp1;
+	struct cvmx_ipd_packet_mbuff_size_s cn56xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn56xxp1;
+	struct cvmx_ipd_packet_mbuff_size_s cn58xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn58xxp1;
+	struct cvmx_ipd_packet_mbuff_size_s cn61xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn63xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn63xxp1;
+	struct cvmx_ipd_packet_mbuff_size_s cn66xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn68xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn68xxp1;
+	struct cvmx_ipd_packet_mbuff_size_s cn70xx;
+	struct cvmx_ipd_packet_mbuff_size_s cn70xxp1;
+	struct cvmx_ipd_packet_mbuff_size_s cnf71xx;
+};
+
+typedef union cvmx_ipd_packet_mbuff_size cvmx_ipd_packet_mbuff_size_t;
+
+/**
+ * cvmx_ipd_pkt_err
+ *
+ * IPD_PKT_ERR = IPD Packet Error Register
+ *
+ * Provides status about the failing packet recevie error.
+ */
+union cvmx_ipd_pkt_err {
+	u64 u64;
+	struct cvmx_ipd_pkt_err_s {
+		u64 reserved_6_63 : 58;
+		u64 reasm : 6;
+	} s;
+	struct cvmx_ipd_pkt_err_s cn68xx;
+	struct cvmx_ipd_pkt_err_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_pkt_err cvmx_ipd_pkt_err_t;
+
+/**
+ * cvmx_ipd_pkt_ptr_valid
+ *
+ * The value of the packet-pointer fetched and in the valid register.
+ *
+ */
+union cvmx_ipd_pkt_ptr_valid {
+	u64 u64;
+	struct cvmx_ipd_pkt_ptr_valid_s {
+		u64 reserved_29_63 : 35;
+		u64 ptr : 29;
+	} s;
+	struct cvmx_ipd_pkt_ptr_valid_s cn30xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn31xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn38xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn50xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn52xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn52xxp1;
+	struct cvmx_ipd_pkt_ptr_valid_s cn56xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn56xxp1;
+	struct cvmx_ipd_pkt_ptr_valid_s cn58xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn58xxp1;
+	struct cvmx_ipd_pkt_ptr_valid_s cn61xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn63xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn63xxp1;
+	struct cvmx_ipd_pkt_ptr_valid_s cn66xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn70xx;
+	struct cvmx_ipd_pkt_ptr_valid_s cn70xxp1;
+	struct cvmx_ipd_pkt_ptr_valid_s cnf71xx;
+};
+
+typedef union cvmx_ipd_pkt_ptr_valid cvmx_ipd_pkt_ptr_valid_t;
+
+/**
+ * cvmx_ipd_port#_bp_page_cnt
+ *
+ * IPD_PORTX_BP_PAGE_CNT = IPD Port Backpressure Page Count
+ * The number of pages in use by the port that when exceeded, backpressure will be applied to the
+ * port.
+ * See also IPD_PORTX_BP_PAGE_CNT2
+ * See also IPD_PORTX_BP_PAGE_CNT3
+ */
+union cvmx_ipd_portx_bp_page_cnt {
+	u64 u64;
+	struct cvmx_ipd_portx_bp_page_cnt_s {
+		u64 reserved_18_63 : 46;
+		u64 bp_enb : 1;
+		u64 page_cnt : 17;
+	} s;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn30xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn31xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn38xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn38xxp2;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn50xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn52xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn52xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn56xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn56xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn58xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn58xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn61xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn63xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn63xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn66xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn70xx;
+	struct cvmx_ipd_portx_bp_page_cnt_s cn70xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt_s cnf71xx;
+};
+
+typedef union cvmx_ipd_portx_bp_page_cnt cvmx_ipd_portx_bp_page_cnt_t;
+
+/**
+ * cvmx_ipd_port#_bp_page_cnt2
+ *
+ * IPD_PORTX_BP_PAGE_CNT2 = IPD Port Backpressure Page Count
+ * The number of pages in use by the port that when exceeded, backpressure will be applied to the
+ * port.
+ * See also IPD_PORTX_BP_PAGE_CNT
+ * See also IPD_PORTX_BP_PAGE_CNT3
+ * 0x368-0x380
+ */
+union cvmx_ipd_portx_bp_page_cnt2 {
+	u64 u64;
+	struct cvmx_ipd_portx_bp_page_cnt2_s {
+		u64 reserved_18_63 : 46;
+		u64 bp_enb : 1;
+		u64 page_cnt : 17;
+	} s;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cn52xx;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cn52xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cn56xx;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cn56xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cn61xx;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cn63xx;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cn63xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cn66xx;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cn70xx;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cn70xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt2_s cnf71xx;
+};
+
+typedef union cvmx_ipd_portx_bp_page_cnt2 cvmx_ipd_portx_bp_page_cnt2_t;
+
+/**
+ * cvmx_ipd_port#_bp_page_cnt3
+ *
+ * IPD_PORTX_BP_PAGE_CNT3 = IPD Port Backpressure Page Count
+ * The number of pages in use by the port that when exceeded, backpressure will be applied to the
+ * port.
+ * See also IPD_PORTX_BP_PAGE_CNT
+ * See also IPD_PORTX_BP_PAGE_CNT2
+ * 0x3d0-408
+ */
+union cvmx_ipd_portx_bp_page_cnt3 {
+	u64 u64;
+	struct cvmx_ipd_portx_bp_page_cnt3_s {
+		u64 reserved_18_63 : 46;
+		u64 bp_enb : 1;
+		u64 page_cnt : 17;
+	} s;
+	struct cvmx_ipd_portx_bp_page_cnt3_s cn61xx;
+	struct cvmx_ipd_portx_bp_page_cnt3_s cn63xx;
+	struct cvmx_ipd_portx_bp_page_cnt3_s cn63xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt3_s cn66xx;
+	struct cvmx_ipd_portx_bp_page_cnt3_s cn70xx;
+	struct cvmx_ipd_portx_bp_page_cnt3_s cn70xxp1;
+	struct cvmx_ipd_portx_bp_page_cnt3_s cnf71xx;
+};
+
+typedef union cvmx_ipd_portx_bp_page_cnt3 cvmx_ipd_portx_bp_page_cnt3_t;
+
+/**
+ * cvmx_ipd_port_bp_counters2_pair#
+ *
+ * See also IPD_PORT_BP_COUNTERS_PAIRX
+ * See also IPD_PORT_BP_COUNTERS3_PAIRX
+ * 0x388-0x3a0
+ */
+union cvmx_ipd_port_bp_counters2_pairx {
+	u64 u64;
+	struct cvmx_ipd_port_bp_counters2_pairx_s {
+		u64 reserved_25_63 : 39;
+		u64 cnt_val : 25;
+	} s;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cn52xx;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cn52xxp1;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cn56xx;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cn56xxp1;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cn61xx;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cn63xx;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cn63xxp1;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cn66xx;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cn70xx;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cn70xxp1;
+	struct cvmx_ipd_port_bp_counters2_pairx_s cnf71xx;
+};
+
+typedef union cvmx_ipd_port_bp_counters2_pairx cvmx_ipd_port_bp_counters2_pairx_t;
+
+/**
+ * cvmx_ipd_port_bp_counters3_pair#
+ *
+ * See also IPD_PORT_BP_COUNTERS_PAIRX
+ * See also IPD_PORT_BP_COUNTERS2_PAIRX
+ * 0x3b0-0x3c8
+ */
+union cvmx_ipd_port_bp_counters3_pairx {
+	u64 u64;
+	struct cvmx_ipd_port_bp_counters3_pairx_s {
+		u64 reserved_25_63 : 39;
+		u64 cnt_val : 25;
+	} s;
+	struct cvmx_ipd_port_bp_counters3_pairx_s cn61xx;
+	struct cvmx_ipd_port_bp_counters3_pairx_s cn63xx;
+	struct cvmx_ipd_port_bp_counters3_pairx_s cn63xxp1;
+	struct cvmx_ipd_port_bp_counters3_pairx_s cn66xx;
+	struct cvmx_ipd_port_bp_counters3_pairx_s cn70xx;
+	struct cvmx_ipd_port_bp_counters3_pairx_s cn70xxp1;
+	struct cvmx_ipd_port_bp_counters3_pairx_s cnf71xx;
+};
+
+typedef union cvmx_ipd_port_bp_counters3_pairx cvmx_ipd_port_bp_counters3_pairx_t;
+
+/**
+ * cvmx_ipd_port_bp_counters4_pair#
+ *
+ * See also IPD_PORT_BP_COUNTERS_PAIRX
+ * See also IPD_PORT_BP_COUNTERS2_PAIRX
+ * 0x410-0x3c8
+ */
+union cvmx_ipd_port_bp_counters4_pairx {
+	u64 u64;
+	struct cvmx_ipd_port_bp_counters4_pairx_s {
+		u64 reserved_25_63 : 39;
+		u64 cnt_val : 25;
+	} s;
+	struct cvmx_ipd_port_bp_counters4_pairx_s cn61xx;
+	struct cvmx_ipd_port_bp_counters4_pairx_s cn66xx;
+	struct cvmx_ipd_port_bp_counters4_pairx_s cn70xx;
+	struct cvmx_ipd_port_bp_counters4_pairx_s cn70xxp1;
+	struct cvmx_ipd_port_bp_counters4_pairx_s cnf71xx;
+};
+
+typedef union cvmx_ipd_port_bp_counters4_pairx cvmx_ipd_port_bp_counters4_pairx_t;
+
+/**
+ * cvmx_ipd_port_bp_counters_pair#
+ *
+ * See also IPD_PORT_BP_COUNTERS2_PAIRX
+ * See also IPD_PORT_BP_COUNTERS3_PAIRX
+ * 0x1b8-0x2d0
+ */
+union cvmx_ipd_port_bp_counters_pairx {
+	u64 u64;
+	struct cvmx_ipd_port_bp_counters_pairx_s {
+		u64 reserved_25_63 : 39;
+		u64 cnt_val : 25;
+	} s;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn30xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn31xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn38xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn38xxp2;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn50xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn52xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn52xxp1;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn56xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn56xxp1;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn58xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn58xxp1;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn61xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn63xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn63xxp1;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn66xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn70xx;
+	struct cvmx_ipd_port_bp_counters_pairx_s cn70xxp1;
+	struct cvmx_ipd_port_bp_counters_pairx_s cnf71xx;
+};
+
+typedef union cvmx_ipd_port_bp_counters_pairx cvmx_ipd_port_bp_counters_pairx_t;
+
+/**
+ * cvmx_ipd_port_ptr_fifo_ctl
+ *
+ * IPD_PORT_PTR_FIFO_CTL = IPD's Reasm-Id Pointer FIFO Control
+ *
+ * Allows reading of the Page-Pointers stored in the IPD's Reasm-Id Fifo.
+ */
+union cvmx_ipd_port_ptr_fifo_ctl {
+	u64 u64;
+	struct cvmx_ipd_port_ptr_fifo_ctl_s {
+		u64 reserved_48_63 : 16;
+		u64 ptr : 33;
+		u64 max_pkt : 7;
+		u64 cena : 1;
+		u64 raddr : 7;
+	} s;
+	struct cvmx_ipd_port_ptr_fifo_ctl_s cn68xx;
+	struct cvmx_ipd_port_ptr_fifo_ctl_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_port_ptr_fifo_ctl cvmx_ipd_port_ptr_fifo_ctl_t;
+
+/**
+ * cvmx_ipd_port_qos_#_cnt
+ *
+ * IPD_PORT_QOS_X_CNT = IPD PortX QOS-0 Count
+ * A counter per port/qos. Counter are originzed in sequence where the first 8 counter (0-7)
+ * belong to Port-0
+ * QOS 0-7 respectively followed by port 1 at (8-15), etc
+ * Ports 0-3, 32-43
+ */
+union cvmx_ipd_port_qos_x_cnt {
+	u64 u64;
+	struct cvmx_ipd_port_qos_x_cnt_s {
+		u64 wmark : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_ipd_port_qos_x_cnt_s cn52xx;
+	struct cvmx_ipd_port_qos_x_cnt_s cn52xxp1;
+	struct cvmx_ipd_port_qos_x_cnt_s cn56xx;
+	struct cvmx_ipd_port_qos_x_cnt_s cn56xxp1;
+	struct cvmx_ipd_port_qos_x_cnt_s cn61xx;
+	struct cvmx_ipd_port_qos_x_cnt_s cn63xx;
+	struct cvmx_ipd_port_qos_x_cnt_s cn63xxp1;
+	struct cvmx_ipd_port_qos_x_cnt_s cn66xx;
+	struct cvmx_ipd_port_qos_x_cnt_s cn68xx;
+	struct cvmx_ipd_port_qos_x_cnt_s cn68xxp1;
+	struct cvmx_ipd_port_qos_x_cnt_s cn70xx;
+	struct cvmx_ipd_port_qos_x_cnt_s cn70xxp1;
+	struct cvmx_ipd_port_qos_x_cnt_s cnf71xx;
+};
+
+typedef union cvmx_ipd_port_qos_x_cnt cvmx_ipd_port_qos_x_cnt_t;
+
+/**
+ * cvmx_ipd_port_qos_int#
+ *
+ * See the description for IPD_PORT_QOS_X_CNT
+ * 0=P0-7; 1=P8-15; 2=P16-23; 3=P24-31; 4=P32-39; 5=P40-47; 6=P48-55; 7=P56-63
+ * Only ports used are: P0-3, p16-19, P24, P32-39. Therefore only IPD_PORT_QOS_INT0 ([63:32] ==
+ * Reserved), IPD_PORT_QOS_INT2 ([63:32] == Reserved), IPD_PORT_QOS_INT3 ([63:8] == Reserved),
+ * IPD_PORT_QOS_INT4
+ */
+union cvmx_ipd_port_qos_intx {
+	u64 u64;
+	struct cvmx_ipd_port_qos_intx_s {
+		u64 intr : 64;
+	} s;
+	struct cvmx_ipd_port_qos_intx_s cn52xx;
+	struct cvmx_ipd_port_qos_intx_s cn52xxp1;
+	struct cvmx_ipd_port_qos_intx_s cn56xx;
+	struct cvmx_ipd_port_qos_intx_s cn56xxp1;
+	struct cvmx_ipd_port_qos_intx_s cn61xx;
+	struct cvmx_ipd_port_qos_intx_s cn63xx;
+	struct cvmx_ipd_port_qos_intx_s cn63xxp1;
+	struct cvmx_ipd_port_qos_intx_s cn66xx;
+	struct cvmx_ipd_port_qos_intx_s cn68xx;
+	struct cvmx_ipd_port_qos_intx_s cn68xxp1;
+	struct cvmx_ipd_port_qos_intx_s cn70xx;
+	struct cvmx_ipd_port_qos_intx_s cn70xxp1;
+	struct cvmx_ipd_port_qos_intx_s cnf71xx;
+};
+
+typedef union cvmx_ipd_port_qos_intx cvmx_ipd_port_qos_intx_t;
+
+/**
+ * cvmx_ipd_port_qos_int_enb#
+ *
+ * "When the IPD_PORT_QOS_INTX[\#] is '1' and IPD_PORT_QOS_INT_ENBX[\#] is '1' a interrupt will be
+ * generated."
+ */
+union cvmx_ipd_port_qos_int_enbx {
+	u64 u64;
+	struct cvmx_ipd_port_qos_int_enbx_s {
+		u64 enb : 64;
+	} s;
+	struct cvmx_ipd_port_qos_int_enbx_s cn52xx;
+	struct cvmx_ipd_port_qos_int_enbx_s cn52xxp1;
+	struct cvmx_ipd_port_qos_int_enbx_s cn56xx;
+	struct cvmx_ipd_port_qos_int_enbx_s cn56xxp1;
+	struct cvmx_ipd_port_qos_int_enbx_s cn61xx;
+	struct cvmx_ipd_port_qos_int_enbx_s cn63xx;
+	struct cvmx_ipd_port_qos_int_enbx_s cn63xxp1;
+	struct cvmx_ipd_port_qos_int_enbx_s cn66xx;
+	struct cvmx_ipd_port_qos_int_enbx_s cn68xx;
+	struct cvmx_ipd_port_qos_int_enbx_s cn68xxp1;
+	struct cvmx_ipd_port_qos_int_enbx_s cn70xx;
+	struct cvmx_ipd_port_qos_int_enbx_s cn70xxp1;
+	struct cvmx_ipd_port_qos_int_enbx_s cnf71xx;
+};
+
+typedef union cvmx_ipd_port_qos_int_enbx cvmx_ipd_port_qos_int_enbx_t;
+
+/**
+ * cvmx_ipd_port_sop#
+ *
+ * IPD_PORT_SOP = IPD Reasm-Id SOP
+ *
+ * Set when a SOP is detected on a reasm-num. Where the reasm-num value set the bit vector of this register.
+ */
+union cvmx_ipd_port_sopx {
+	u64 u64;
+	struct cvmx_ipd_port_sopx_s {
+		u64 sop : 64;
+	} s;
+	struct cvmx_ipd_port_sopx_s cn68xx;
+	struct cvmx_ipd_port_sopx_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_port_sopx cvmx_ipd_port_sopx_t;
+
+/**
+ * cvmx_ipd_prc_hold_ptr_fifo_ctl
+ *
+ * Allows reading of the Page-Pointers stored in the IPD's PRC Holding Fifo.
+ *
+ */
+union cvmx_ipd_prc_hold_ptr_fifo_ctl {
+	u64 u64;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s {
+		u64 reserved_39_63 : 25;
+		u64 max_pkt : 3;
+		u64 praddr : 3;
+		u64 ptr : 29;
+		u64 cena : 1;
+		u64 raddr : 3;
+	} s;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn30xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn31xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn38xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn50xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn52xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn52xxp1;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn56xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn56xxp1;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn58xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn58xxp1;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn61xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn63xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn63xxp1;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn66xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn70xx;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn70xxp1;
+	struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cnf71xx;
+};
+
+typedef union cvmx_ipd_prc_hold_ptr_fifo_ctl cvmx_ipd_prc_hold_ptr_fifo_ctl_t;
+
+/**
+ * cvmx_ipd_prc_port_ptr_fifo_ctl
+ *
+ * Allows reading of the Page-Pointers stored in the IPD's PRC PORT Fifo.
+ *
+ */
+union cvmx_ipd_prc_port_ptr_fifo_ctl {
+	u64 u64;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s {
+		u64 reserved_44_63 : 20;
+		u64 max_pkt : 7;
+		u64 ptr : 29;
+		u64 cena : 1;
+		u64 raddr : 7;
+	} s;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn30xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn31xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn38xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn50xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn52xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn52xxp1;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn56xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn56xxp1;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn58xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn58xxp1;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn61xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn63xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn63xxp1;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn66xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn70xx;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn70xxp1;
+	struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cnf71xx;
+};
+
+typedef union cvmx_ipd_prc_port_ptr_fifo_ctl cvmx_ipd_prc_port_ptr_fifo_ctl_t;
+
+/**
+ * cvmx_ipd_ptr_count
+ *
+ * Shows the number of WQE and Packet Page Pointers stored in the IPD.
+ *
+ */
+union cvmx_ipd_ptr_count {
+	u64 u64;
+	struct cvmx_ipd_ptr_count_s {
+		u64 reserved_19_63 : 45;
+		u64 pktv_cnt : 1;
+		u64 wqev_cnt : 1;
+		u64 pfif_cnt : 3;
+		u64 pkt_pcnt : 7;
+		u64 wqe_pcnt : 7;
+	} s;
+	struct cvmx_ipd_ptr_count_s cn30xx;
+	struct cvmx_ipd_ptr_count_s cn31xx;
+	struct cvmx_ipd_ptr_count_s cn38xx;
+	struct cvmx_ipd_ptr_count_s cn38xxp2;
+	struct cvmx_ipd_ptr_count_s cn50xx;
+	struct cvmx_ipd_ptr_count_s cn52xx;
+	struct cvmx_ipd_ptr_count_s cn52xxp1;
+	struct cvmx_ipd_ptr_count_s cn56xx;
+	struct cvmx_ipd_ptr_count_s cn56xxp1;
+	struct cvmx_ipd_ptr_count_s cn58xx;
+	struct cvmx_ipd_ptr_count_s cn58xxp1;
+	struct cvmx_ipd_ptr_count_s cn61xx;
+	struct cvmx_ipd_ptr_count_s cn63xx;
+	struct cvmx_ipd_ptr_count_s cn63xxp1;
+	struct cvmx_ipd_ptr_count_s cn66xx;
+	struct cvmx_ipd_ptr_count_s cn68xx;
+	struct cvmx_ipd_ptr_count_s cn68xxp1;
+	struct cvmx_ipd_ptr_count_s cn70xx;
+	struct cvmx_ipd_ptr_count_s cn70xxp1;
+	struct cvmx_ipd_ptr_count_s cnf71xx;
+};
+
+typedef union cvmx_ipd_ptr_count cvmx_ipd_ptr_count_t;
+
+/**
+ * cvmx_ipd_pwp_ptr_fifo_ctl
+ *
+ * Allows reading of the Page-Pointers stored in the IPD's PWP Fifo.
+ *
+ */
+union cvmx_ipd_pwp_ptr_fifo_ctl {
+	u64 u64;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s {
+		u64 reserved_61_63 : 3;
+		u64 max_cnts : 7;
+		u64 wraddr : 8;
+		u64 praddr : 8;
+		u64 ptr : 29;
+		u64 cena : 1;
+		u64 raddr : 8;
+	} s;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn30xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn31xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn38xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn50xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn52xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn52xxp1;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn56xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn56xxp1;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn58xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn58xxp1;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn61xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn63xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn63xxp1;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn66xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn70xx;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn70xxp1;
+	struct cvmx_ipd_pwp_ptr_fifo_ctl_s cnf71xx;
+};
+
+typedef union cvmx_ipd_pwp_ptr_fifo_ctl cvmx_ipd_pwp_ptr_fifo_ctl_t;
+
+/**
+ * cvmx_ipd_qos#_red_marks
+ *
+ * Set the pass-drop marks for qos level.
+ *
+ */
+union cvmx_ipd_qosx_red_marks {
+	u64 u64;
+	struct cvmx_ipd_qosx_red_marks_s {
+		u64 drop : 32;
+		u64 pass : 32;
+	} s;
+	struct cvmx_ipd_qosx_red_marks_s cn30xx;
+	struct cvmx_ipd_qosx_red_marks_s cn31xx;
+	struct cvmx_ipd_qosx_red_marks_s cn38xx;
+	struct cvmx_ipd_qosx_red_marks_s cn38xxp2;
+	struct cvmx_ipd_qosx_red_marks_s cn50xx;
+	struct cvmx_ipd_qosx_red_marks_s cn52xx;
+	struct cvmx_ipd_qosx_red_marks_s cn52xxp1;
+	struct cvmx_ipd_qosx_red_marks_s cn56xx;
+	struct cvmx_ipd_qosx_red_marks_s cn56xxp1;
+	struct cvmx_ipd_qosx_red_marks_s cn58xx;
+	struct cvmx_ipd_qosx_red_marks_s cn58xxp1;
+	struct cvmx_ipd_qosx_red_marks_s cn61xx;
+	struct cvmx_ipd_qosx_red_marks_s cn63xx;
+	struct cvmx_ipd_qosx_red_marks_s cn63xxp1;
+	struct cvmx_ipd_qosx_red_marks_s cn66xx;
+	struct cvmx_ipd_qosx_red_marks_s cn68xx;
+	struct cvmx_ipd_qosx_red_marks_s cn68xxp1;
+	struct cvmx_ipd_qosx_red_marks_s cn70xx;
+	struct cvmx_ipd_qosx_red_marks_s cn70xxp1;
+	struct cvmx_ipd_qosx_red_marks_s cnf71xx;
+};
+
+typedef union cvmx_ipd_qosx_red_marks cvmx_ipd_qosx_red_marks_t;
+
+/**
+ * cvmx_ipd_que0_free_page_cnt
+ *
+ * Number of Free-Page Pointer that are available for use in the FPA for Queue-0.
+ *
+ */
+union cvmx_ipd_que0_free_page_cnt {
+	u64 u64;
+	struct cvmx_ipd_que0_free_page_cnt_s {
+		u64 reserved_32_63 : 32;
+		u64 q0_pcnt : 32;
+	} s;
+	struct cvmx_ipd_que0_free_page_cnt_s cn30xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn31xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn38xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn38xxp2;
+	struct cvmx_ipd_que0_free_page_cnt_s cn50xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn52xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn52xxp1;
+	struct cvmx_ipd_que0_free_page_cnt_s cn56xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn56xxp1;
+	struct cvmx_ipd_que0_free_page_cnt_s cn58xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn58xxp1;
+	struct cvmx_ipd_que0_free_page_cnt_s cn61xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn63xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn63xxp1;
+	struct cvmx_ipd_que0_free_page_cnt_s cn66xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn68xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn68xxp1;
+	struct cvmx_ipd_que0_free_page_cnt_s cn70xx;
+	struct cvmx_ipd_que0_free_page_cnt_s cn70xxp1;
+	struct cvmx_ipd_que0_free_page_cnt_s cnf71xx;
+};
+
+typedef union cvmx_ipd_que0_free_page_cnt cvmx_ipd_que0_free_page_cnt_t;
+
+/**
+ * cvmx_ipd_red_bpid_enable#
+ *
+ * IPD_RED_BPID_ENABLE = IPD RED BPID Enable
+ *
+ * Set the pass-drop marks for qos level.
+ */
+union cvmx_ipd_red_bpid_enablex {
+	u64 u64;
+	struct cvmx_ipd_red_bpid_enablex_s {
+		u64 prt_enb : 64;
+	} s;
+	struct cvmx_ipd_red_bpid_enablex_s cn68xx;
+	struct cvmx_ipd_red_bpid_enablex_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_red_bpid_enablex cvmx_ipd_red_bpid_enablex_t;
+
+/**
+ * cvmx_ipd_red_delay
+ *
+ * IPD_RED_DELAY = IPD RED BPID Enable
+ *
+ * Set the pass-drop marks for qos level.
+ */
+union cvmx_ipd_red_delay {
+	u64 u64;
+	struct cvmx_ipd_red_delay_s {
+		u64 reserved_28_63 : 36;
+		u64 prb_dly : 14;
+		u64 avg_dly : 14;
+	} s;
+	struct cvmx_ipd_red_delay_s cn68xx;
+	struct cvmx_ipd_red_delay_s cn68xxp1;
+};
+
+typedef union cvmx_ipd_red_delay cvmx_ipd_red_delay_t;
+
+/**
+ * cvmx_ipd_red_port_enable
+ *
+ * Set the pass-drop marks for qos level.
+ *
+ */
+union cvmx_ipd_red_port_enable {
+	u64 u64;
+	struct cvmx_ipd_red_port_enable_s {
+		u64 prb_dly : 14;
+		u64 avg_dly : 14;
+		u64 prt_enb : 36;
+	} s;
+	struct cvmx_ipd_red_port_enable_s cn30xx;
+	struct cvmx_ipd_red_port_enable_s cn31xx;
+	struct cvmx_ipd_red_port_enable_s cn38xx;
+	struct cvmx_ipd_red_port_enable_s cn38xxp2;
+	struct cvmx_ipd_red_port_enable_s cn50xx;
+	struct cvmx_ipd_red_port_enable_s cn52xx;
+	struct cvmx_ipd_red_port_enable_s cn52xxp1;
+	struct cvmx_ipd_red_port_enable_s cn56xx;
+	struct cvmx_ipd_red_port_enable_s cn56xxp1;
+	struct cvmx_ipd_red_port_enable_s cn58xx;
+	struct cvmx_ipd_red_port_enable_s cn58xxp1;
+	struct cvmx_ipd_red_port_enable_s cn61xx;
+	struct cvmx_ipd_red_port_enable_s cn63xx;
+	struct cvmx_ipd_red_port_enable_s cn63xxp1;
+	struct cvmx_ipd_red_port_enable_s cn66xx;
+	struct cvmx_ipd_red_port_enable_s cn70xx;
+	struct cvmx_ipd_red_port_enable_s cn70xxp1;
+	struct cvmx_ipd_red_port_enable_s cnf71xx;
+};
+
+typedef union cvmx_ipd_red_port_enable cvmx_ipd_red_port_enable_t;
+
+/**
+ * cvmx_ipd_red_port_enable2
+ *
+ * Set the pass-drop marks for qos level.
+ *
+ */
+union cvmx_ipd_red_port_enable2 {
+	u64 u64;
+	struct cvmx_ipd_red_port_enable2_s {
+		u64 reserved_12_63 : 52;
+		u64 prt_enb : 12;
+	} s;
+	struct cvmx_ipd_red_port_enable2_cn52xx {
+		u64 reserved_4_63 : 60;
+		u64 prt_enb : 4;
+	} cn52xx;
+	struct cvmx_ipd_red_port_enable2_cn52xx cn52xxp1;
+	struct cvmx_ipd_red_port_enable2_cn52xx cn56xx;
+	struct cvmx_ipd_red_port_enable2_cn52xx cn56xxp1;
+	struct cvmx_ipd_red_port_enable2_s cn61xx;
+	struct cvmx_ipd_red_port_enable2_cn63xx {
+		u64 reserved_8_63 : 56;
+		u64 prt_enb : 8;
+	} cn63xx;
+	struct cvmx_ipd_red_port_enable2_cn63xx cn63xxp1;
+	struct cvmx_ipd_red_port_enable2_s cn66xx;
+	struct cvmx_ipd_red_port_enable2_s cn70xx;
+	struct cvmx_ipd_red_port_enable2_s cn70xxp1;
+	struct cvmx_ipd_red_port_enable2_s cnf71xx;
+};
+
+typedef union cvmx_ipd_red_port_enable2 cvmx_ipd_red_port_enable2_t;
+
+/**
+ * cvmx_ipd_red_que#_param
+ *
+ * Value control the Passing and Dropping of packets by the red engine for QOS Level-0.
+ *
+ */
+union cvmx_ipd_red_quex_param {
+	u64 u64;
+	struct cvmx_ipd_red_quex_param_s {
+		u64 reserved_49_63 : 15;
+		u64 use_pcnt : 1;
+		u64 new_con : 8;
+		u64 avg_con : 8;
+		u64 prb_con : 32;
+	} s;
+	struct cvmx_ipd_red_quex_param_s cn30xx;
+	struct cvmx_ipd_red_quex_param_s cn31xx;
+	struct cvmx_ipd_red_quex_param_s cn38xx;
+	struct cvmx_ipd_red_quex_param_s cn38xxp2;
+	struct cvmx_ipd_red_quex_param_s cn50xx;
+	struct cvmx_ipd_red_quex_param_s cn52xx;
+	struct cvmx_ipd_red_quex_param_s cn52xxp1;
+	struct cvmx_ipd_red_quex_param_s cn56xx;
+	struct cvmx_ipd_red_quex_param_s cn56xxp1;
+	struct cvmx_ipd_red_quex_param_s cn58xx;
+	struct cvmx_ipd_red_quex_param_s cn58xxp1;
+	struct cvmx_ipd_red_quex_param_s cn61xx;
+	struct cvmx_ipd_red_quex_param_s cn63xx;
+	struct cvmx_ipd_red_quex_param_s cn63xxp1;
+	struct cvmx_ipd_red_quex_param_s cn66xx;
+	struct cvmx_ipd_red_quex_param_s cn68xx;
+	struct cvmx_ipd_red_quex_param_s cn68xxp1;
+	struct cvmx_ipd_red_quex_param_s cn70xx;
+	struct cvmx_ipd_red_quex_param_s cn70xxp1;
+	struct cvmx_ipd_red_quex_param_s cnf71xx;
+};
+
+typedef union cvmx_ipd_red_quex_param cvmx_ipd_red_quex_param_t;
+
+/**
+ * cvmx_ipd_req_wgt
+ *
+ * IPD_REQ_WGT = IPD REQ weights
+ *
+ * There are 8 devices that can request to send packet traffic to the IPD. These weights are used for the Weighted Round Robin
+ * grant generated by the IPD to requestors.
+ */
+union cvmx_ipd_req_wgt {
+	u64 u64;
+	struct cvmx_ipd_req_wgt_s {
+		u64 wgt7 : 8;
+		u64 wgt6 : 8;
+		u64 wgt5 : 8;
+		u64 wgt4 : 8;
+		u64 wgt3 : 8;
+		u64 wgt2 : 8;
+		u64 wgt1 : 8;
+		u64 wgt0 : 8;
+	} s;
+	struct cvmx_ipd_req_wgt_s cn68xx;
+};
+
+typedef union cvmx_ipd_req_wgt cvmx_ipd_req_wgt_t;
+
+/**
+ * cvmx_ipd_sub_port_bp_page_cnt
+ *
+ * Will add the value to the indicated port count register, the number of pages supplied. The
+ * value added should
+ * be the 2's complement of the value that needs to be subtracted. Users add 2's complement
+ * values to the
+ * port-mbuf-count register to return (lower the count) mbufs to the counter in order to avoid
+ * port-level
+ * backpressure being applied to the port. Backpressure is applied when the MBUF used count of a
+ * port exceeds the
+ * value in the IPD_PORTX_BP_PAGE_CNT, IPD_PORTX_BP_PAGE_CNT2, and IPD_PORTX_BP_PAGE_CNT3.
+ * This register can't be written from the PCI via a window write.
+ */
+union cvmx_ipd_sub_port_bp_page_cnt {
+	u64 u64;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s {
+		u64 reserved_31_63 : 33;
+		u64 port : 6;
+		u64 page_cnt : 25;
+	} s;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn30xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn31xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn38xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn38xxp2;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn50xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn52xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn52xxp1;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn56xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn56xxp1;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn58xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn58xxp1;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn61xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn63xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn63xxp1;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn66xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn68xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn68xxp1;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn70xx;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cn70xxp1;
+	struct cvmx_ipd_sub_port_bp_page_cnt_s cnf71xx;
+};
+
+typedef union cvmx_ipd_sub_port_bp_page_cnt cvmx_ipd_sub_port_bp_page_cnt_t;
+
+/**
+ * cvmx_ipd_sub_port_fcs
+ *
+ * When set '1' the port corresponding to the bit set will subtract 4 bytes from the end of
+ * the packet.
+ */
+union cvmx_ipd_sub_port_fcs {
+	u64 u64;
+	struct cvmx_ipd_sub_port_fcs_s {
+		u64 reserved_40_63 : 24;
+		u64 port_bit2 : 4;
+		u64 reserved_32_35 : 4;
+		u64 port_bit : 32;
+	} s;
+	struct cvmx_ipd_sub_port_fcs_cn30xx {
+		u64 reserved_3_63 : 61;
+		u64 port_bit : 3;
+	} cn30xx;
+	struct cvmx_ipd_sub_port_fcs_cn30xx cn31xx;
+	struct cvmx_ipd_sub_port_fcs_cn38xx {
+		u64 reserved_32_63 : 32;
+		u64 port_bit : 32;
+	} cn38xx;
+	struct cvmx_ipd_sub_port_fcs_cn38xx cn38xxp2;
+	struct cvmx_ipd_sub_port_fcs_cn30xx cn50xx;
+	struct cvmx_ipd_sub_port_fcs_s cn52xx;
+	struct cvmx_ipd_sub_port_fcs_s cn52xxp1;
+	struct cvmx_ipd_sub_port_fcs_s cn56xx;
+	struct cvmx_ipd_sub_port_fcs_s cn56xxp1;
+	struct cvmx_ipd_sub_port_fcs_cn38xx cn58xx;
+	struct cvmx_ipd_sub_port_fcs_cn38xx cn58xxp1;
+	struct cvmx_ipd_sub_port_fcs_s cn61xx;
+	struct cvmx_ipd_sub_port_fcs_s cn63xx;
+	struct cvmx_ipd_sub_port_fcs_s cn63xxp1;
+	struct cvmx_ipd_sub_port_fcs_s cn66xx;
+	struct cvmx_ipd_sub_port_fcs_s cn70xx;
+	struct cvmx_ipd_sub_port_fcs_s cn70xxp1;
+	struct cvmx_ipd_sub_port_fcs_s cnf71xx;
+};
+
+typedef union cvmx_ipd_sub_port_fcs cvmx_ipd_sub_port_fcs_t;
+
+/**
+ * cvmx_ipd_sub_port_qos_cnt
+ *
+ * Will add the value (CNT) to the indicated Port-QOS register (PORT_QOS). The value added must
+ * be
+ * be the 2's complement of the value that needs to be subtracted.
+ */
+union cvmx_ipd_sub_port_qos_cnt {
+	u64 u64;
+	struct cvmx_ipd_sub_port_qos_cnt_s {
+		u64 reserved_41_63 : 23;
+		u64 port_qos : 9;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn52xx;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn52xxp1;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn56xx;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn56xxp1;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn61xx;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn63xx;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn63xxp1;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn66xx;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn68xx;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn68xxp1;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn70xx;
+	struct cvmx_ipd_sub_port_qos_cnt_s cn70xxp1;
+	struct cvmx_ipd_sub_port_qos_cnt_s cnf71xx;
+};
+
+typedef union cvmx_ipd_sub_port_qos_cnt cvmx_ipd_sub_port_qos_cnt_t;
+
+/**
+ * cvmx_ipd_wqe_fpa_queue
+ *
+ * Which FPA Queue (0-7) to fetch page-pointers from for WQE's
+ *
+ */
+union cvmx_ipd_wqe_fpa_queue {
+	u64 u64;
+	struct cvmx_ipd_wqe_fpa_queue_s {
+		u64 reserved_3_63 : 61;
+		u64 wqe_pool : 3;
+	} s;
+	struct cvmx_ipd_wqe_fpa_queue_s cn30xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn31xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn38xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn38xxp2;
+	struct cvmx_ipd_wqe_fpa_queue_s cn50xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn52xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn52xxp1;
+	struct cvmx_ipd_wqe_fpa_queue_s cn56xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn56xxp1;
+	struct cvmx_ipd_wqe_fpa_queue_s cn58xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn58xxp1;
+	struct cvmx_ipd_wqe_fpa_queue_s cn61xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn63xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn63xxp1;
+	struct cvmx_ipd_wqe_fpa_queue_s cn66xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn68xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn68xxp1;
+	struct cvmx_ipd_wqe_fpa_queue_s cn70xx;
+	struct cvmx_ipd_wqe_fpa_queue_s cn70xxp1;
+	struct cvmx_ipd_wqe_fpa_queue_s cnf71xx;
+};
+
+typedef union cvmx_ipd_wqe_fpa_queue cvmx_ipd_wqe_fpa_queue_t;
+
+/**
+ * cvmx_ipd_wqe_ptr_valid
+ *
+ * The value of the WQE-pointer fetched and in the valid register.
+ *
+ */
+union cvmx_ipd_wqe_ptr_valid {
+	u64 u64;
+	struct cvmx_ipd_wqe_ptr_valid_s {
+		u64 reserved_29_63 : 35;
+		u64 ptr : 29;
+	} s;
+	struct cvmx_ipd_wqe_ptr_valid_s cn30xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn31xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn38xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn50xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn52xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn52xxp1;
+	struct cvmx_ipd_wqe_ptr_valid_s cn56xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn56xxp1;
+	struct cvmx_ipd_wqe_ptr_valid_s cn58xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn58xxp1;
+	struct cvmx_ipd_wqe_ptr_valid_s cn61xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn63xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn63xxp1;
+	struct cvmx_ipd_wqe_ptr_valid_s cn66xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn70xx;
+	struct cvmx_ipd_wqe_ptr_valid_s cn70xxp1;
+	struct cvmx_ipd_wqe_ptr_valid_s cnf71xx;
+};
+
+typedef union cvmx_ipd_wqe_ptr_valid cvmx_ipd_wqe_ptr_valid_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-ipd.h b/arch/mips/mach-octeon/include/mach/cvmx-ipd.h
new file mode 100644
index 0000000..cdff36f
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-ipd.h
@@ -0,0 +1,233 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the hardware Input Packet Data unit.
+ */
+
+#ifndef __CVMX_IPD_H__
+#define __CVMX_IPD_H__
+
+#include "cvmx-pki.h"
+
+/* CSR typedefs have been moved to cvmx-ipd-defs.h */
+
+typedef cvmx_ipd_1st_mbuff_skip_t cvmx_ipd_mbuff_not_first_skip_t;
+typedef cvmx_ipd_1st_next_ptr_back_t cvmx_ipd_second_next_ptr_back_t;
+
+typedef struct cvmx_ipd_tag_fields {
+	u64 ipv6_src_ip : 1;
+	u64 ipv6_dst_ip : 1;
+	u64 ipv6_src_port : 1;
+	u64 ipv6_dst_port : 1;
+	u64 ipv6_next_header : 1;
+	u64 ipv4_src_ip : 1;
+	u64 ipv4_dst_ip : 1;
+	u64 ipv4_src_port : 1;
+	u64 ipv4_dst_port : 1;
+	u64 ipv4_protocol : 1;
+	u64 input_port : 1;
+} cvmx_ipd_tag_fields_t;
+
+typedef struct cvmx_pip_port_config {
+	u64 parse_mode;
+	u64 tag_type;
+	u64 tag_mode;
+	cvmx_ipd_tag_fields_t tag_fields;
+} cvmx_pip_port_config_t;
+
+typedef struct cvmx_ipd_config_struct {
+	u64 first_mbuf_skip;
+	u64 not_first_mbuf_skip;
+	u64 ipd_enable;
+	u64 enable_len_M8_fix;
+	u64 cache_mode;
+	cvmx_fpa_pool_config_t packet_pool;
+	cvmx_fpa_pool_config_t wqe_pool;
+	cvmx_pip_port_config_t port_config;
+} cvmx_ipd_config_t;
+
+extern cvmx_ipd_config_t cvmx_ipd_cfg;
+
+/**
+ * Gets the fpa pool number of packet pool
+ */
+static inline s64 cvmx_fpa_get_packet_pool(void)
+{
+	return (cvmx_ipd_cfg.packet_pool.pool_num);
+}
+
+/**
+ * Gets the buffer size of packet pool buffer
+ */
+static inline u64 cvmx_fpa_get_packet_pool_block_size(void)
+{
+	return (cvmx_ipd_cfg.packet_pool.buffer_size);
+}
+
+/**
+ * Gets the buffer count of packet pool
+ */
+static inline u64 cvmx_fpa_get_packet_pool_buffer_count(void)
+{
+	return (cvmx_ipd_cfg.packet_pool.buffer_count);
+}
+
+/**
+ * Gets the fpa pool number of wqe pool
+ */
+static inline s64 cvmx_fpa_get_wqe_pool(void)
+{
+	return (cvmx_ipd_cfg.wqe_pool.pool_num);
+}
+
+/**
+ * Gets the buffer size of wqe pool buffer
+ */
+static inline u64 cvmx_fpa_get_wqe_pool_block_size(void)
+{
+	return (cvmx_ipd_cfg.wqe_pool.buffer_size);
+}
+
+/**
+ * Gets the buffer count of wqe pool
+ */
+static inline u64 cvmx_fpa_get_wqe_pool_buffer_count(void)
+{
+	return (cvmx_ipd_cfg.wqe_pool.buffer_count);
+}
+
+/**
+ * Sets the ipd related configuration in internal structure which is then used
+ * for seting IPD hardware block
+ */
+int cvmx_ipd_set_config(cvmx_ipd_config_t ipd_config);
+
+/**
+ * Gets the ipd related configuration from internal structure.
+ */
+void cvmx_ipd_get_config(cvmx_ipd_config_t *ipd_config);
+
+/**
+ * Sets the internal FPA pool data structure for packet buffer pool.
+ * @param pool	fpa pool number yo use
+ * @param buffer_size	buffer size of pool
+ * @param buffer_count	number of buufers to allocate to pool
+ */
+void cvmx_ipd_set_packet_pool_config(s64 pool, u64 buffer_size, u64 buffer_count);
+
+/**
+ * Sets the internal FPA pool data structure for wqe pool.
+ * @param pool	fpa pool number yo use
+ * @param buffer_size	buffer size of pool
+ * @param buffer_count	number of buufers to allocate to pool
+ */
+void cvmx_ipd_set_wqe_pool_config(s64 pool, u64 buffer_size, u64 buffer_count);
+
+/**
+ * Gets the FPA packet buffer pool parameters.
+ */
+static inline void cvmx_fpa_get_packet_pool_config(s64 *pool, u64 *buffer_size, u64 *buffer_count)
+{
+	if (pool)
+		*pool = cvmx_ipd_cfg.packet_pool.pool_num;
+	if (buffer_size)
+		*buffer_size = cvmx_ipd_cfg.packet_pool.buffer_size;
+	if (buffer_count)
+		*buffer_count = cvmx_ipd_cfg.packet_pool.buffer_count;
+}
+
+/**
+ * Sets the FPA packet buffer pool parameters.
+ */
+static inline void cvmx_fpa_set_packet_pool_config(s64 pool, u64 buffer_size, u64 buffer_count)
+{
+	cvmx_ipd_set_packet_pool_config(pool, buffer_size, buffer_count);
+}
+
+/**
+ * Gets the FPA WQE pool parameters.
+ */
+static inline void cvmx_fpa_get_wqe_pool_config(s64 *pool, u64 *buffer_size, u64 *buffer_count)
+{
+	if (pool)
+		*pool = cvmx_ipd_cfg.wqe_pool.pool_num;
+	if (buffer_size)
+		*buffer_size = cvmx_ipd_cfg.wqe_pool.buffer_size;
+	if (buffer_count)
+		*buffer_count = cvmx_ipd_cfg.wqe_pool.buffer_count;
+}
+
+/**
+ * Sets the FPA WQE pool parameters.
+ */
+static inline void cvmx_fpa_set_wqe_pool_config(s64 pool, u64 buffer_size, u64 buffer_count)
+{
+	cvmx_ipd_set_wqe_pool_config(pool, buffer_size, buffer_count);
+}
+
+/**
+ * Configure IPD
+ *
+ * @param mbuff_size Packets buffer size in 8 byte words
+ * @param first_mbuff_skip
+ *                   Number of 8 byte words to skip in the first buffer
+ * @param not_first_mbuff_skip
+ *                   Number of 8 byte words to skip in each following buffer
+ * @param first_back Must be same as first_mbuff_skip / 128
+ * @param second_back
+ *                   Must be same as not_first_mbuff_skip / 128
+ * @param wqe_fpa_pool
+ *                   FPA pool to get work entries from
+ * @param cache_mode
+ * @param back_pres_enable_flag
+ *                   Enable or disable port back pressure at a global level.
+ *                   This should always be 1 as more accurate control can be
+ *                   found in IPD_PORTX_BP_PAGE_CNT[BP_ENB].
+ */
+void cvmx_ipd_config(u64 mbuff_size, u64 first_mbuff_skip, u64 not_first_mbuff_skip, u64 first_back,
+		     u64 second_back, u64 wqe_fpa_pool, cvmx_ipd_mode_t cache_mode,
+		     u64 back_pres_enable_flag);
+/**
+ * Enable IPD
+ */
+void cvmx_ipd_enable(void);
+
+/**
+ * Disable IPD
+ */
+void cvmx_ipd_disable(void);
+
+void __cvmx_ipd_free_ptr(void);
+
+void cvmx_ipd_set_packet_pool_buffer_count(u64 buffer_count);
+void cvmx_ipd_set_wqe_pool_buffer_count(u64 buffer_count);
+
+/**
+ * Setup Random Early Drop on a specific input queue
+ *
+ * @param queue  Input queue to setup RED on (0-7)
+ * @param pass_thresh
+ *               Packets will begin slowly dropping when there are less than
+ *               this many packet buffers free in FPA 0.
+ * @param drop_thresh
+ *               All incoming packets will be dropped when there are less
+ *               than this many free packet buffers in FPA 0.
+ * @return Zero on success. Negative on failure
+ */
+int cvmx_ipd_setup_red_queue(int queue, int pass_thresh, int drop_thresh);
+
+/**
+ * Setup Random Early Drop to automatically begin dropping packets.
+ *
+ * @param pass_thresh
+ *               Packets will begin slowly dropping when there are less than
+ *               this many packet buffers free in FPA 0.
+ * @param drop_thresh
+ *               All incoming packets will be dropped when there are less
+ *               than this many free packet buffers in FPA 0.
+ * @return Zero on success. Negative on failure
+ */
+int cvmx_ipd_setup_red(int pass_thresh, int drop_thresh);
+
+#endif /*  __CVMX_IPD_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-l2c-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-l2c-defs.h
new file mode 100644
index 0000000..7fddcd6
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-l2c-defs.h
@@ -0,0 +1,172 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_L2C_DEFS_H_
+#define __CVMX_L2C_DEFS_H_
+
+#define CVMX_L2C_CFG 0x0001180080000000ull
+#define CVMX_L2C_CTL 0x0001180080800000ull
+
+/*
+ * Mapping is done starting from 0x11800.80000000
+ * Use _REL for relative mapping
+ */
+#define CVMX_L2C_CTL_REL	 0x00800000
+#define CVMX_L2C_BIG_CTL_REL	 0x00800030
+#define CVMX_L2C_TADX_INT_REL(i) (0x00a00028 + (((i) & 7) * 0x40000))
+#define CVMX_L2C_MCIX_INT_REL(i) (0x00c00028 + (((i) & 3) * 0x40000))
+
+/**
+ * cvmx_l2c_cfg
+ *
+ * Specify the RSL base addresses for the block
+ *
+ *                  L2C_CFG = L2C Configuration
+ *
+ * Description:
+ */
+union cvmx_l2c_cfg {
+	u64 u64;
+	struct cvmx_l2c_cfg_s {
+		u64 reserved_20_63 : 44;
+		u64 bstrun : 1;
+		u64 lbist : 1;
+		u64 xor_bank : 1;
+		u64 dpres1 : 1;
+		u64 dpres0 : 1;
+		u64 dfill_dis : 1;
+		u64 fpexp : 4;
+		u64 fpempty : 1;
+		u64 fpen : 1;
+		u64 idxalias : 1;
+		u64 mwf_crd : 4;
+		u64 rsp_arb_mode : 1;
+		u64 rfb_arb_mode : 1;
+		u64 lrf_arb_mode : 1;
+	} s;
+};
+
+/**
+ * cvmx_l2c_ctl
+ *
+ * L2C_CTL = L2C Control
+ *
+ *
+ * Notes:
+ * (1) If MAXVAB is != 0, VAB_THRESH should be less than MAXVAB.
+ *
+ * (2) L2DFDBE and L2DFSBE allows software to generate L2DSBE, L2DDBE, VBFSBE,
+ * and VBFDBE errors for the purposes of testing error handling code.  When
+ * one (or both) of these bits are set a PL2 which misses in the L2 will fill
+ * with the appropriate error in the first 2 OWs of the fill. Software can
+ * determine which OW pair gets the error by choosing the desired fill order
+ * (address<6:5>).  A PL2 which hits in the L2 will not inject any errors.
+ * Therefore sending a WBIL2 prior to the PL2 is recommended to make a miss
+ * likely (if multiple processors are involved software must be careful to be
+ * sure no other processor or IO device can bring the block into the L2).
+ *
+ * To generate a VBFSBE or VBFDBE, software must first get the cache block
+ * into the cache with an error using a PL2 which misses the L2.  Then a
+ * store partial to a portion of the cache block without the error must
+ * change the block to dirty.  Then, a subsequent WBL2/WBIL2/victim will
+ * trigger the VBFSBE/VBFDBE error.
+ */
+union cvmx_l2c_ctl {
+	u64 u64;
+	struct cvmx_l2c_ctl_s {
+		u64 reserved_29_63 : 35;
+		u64 rdf_fast : 1;
+		u64 disstgl2i : 1;
+		u64 l2dfsbe : 1;
+		u64 l2dfdbe : 1;
+		u64 discclk : 1;
+		u64 maxvab : 4;
+		u64 maxlfb : 4;
+		u64 rsp_arb_mode : 1;
+		u64 xmc_arb_mode : 1;
+		u64 reserved_2_13 : 12;
+		u64 disecc : 1;
+		u64 disidxalias : 1;
+	} s;
+
+	struct cvmx_l2c_ctl_cn73xx {
+		u64 reserved_32_63 : 32;
+		u64 ocla_qos : 3;
+		u64 reserved_28_28 : 1;
+		u64 disstgl2i : 1;
+		u64 reserved_25_26 : 2;
+		u64 discclk : 1;
+		u64 reserved_16_23 : 8;
+		u64 rsp_arb_mode : 1;
+		u64 xmc_arb_mode : 1;
+		u64 rdf_cnt : 8;
+		u64 reserved_4_5 : 2;
+		u64 disldwb : 1;
+		u64 dissblkdty : 1;
+		u64 disecc : 1;
+		u64 disidxalias : 1;
+	} cn73xx;
+
+	struct cvmx_l2c_ctl_cn73xx cn78xx;
+};
+
+/**
+ * cvmx_l2c_big_ctl
+ *
+ * L2C_BIG_CTL = L2C Big memory control register
+ *
+ *
+ * Notes:
+ * (1) BIGRD interrupts can occur during normal operation as the PP's are
+ * allowed to prefetch to non-existent memory locations.  Therefore,
+ * BIGRD is for informational purposes only.
+ *
+ * (2) When HOLEWR/BIGWR blocks a store L2C_VER_ID, L2C_VER_PP, L2C_VER_IOB,
+ * and L2C_VER_MSC will be loaded just like a store which is blocked by VRTWR.
+ * Additionally, L2C_ERR_XMC will be loaded.
+ */
+union cvmx_l2c_big_ctl {
+	u64 u64;
+	struct cvmx_l2c_big_ctl_s {
+		u64 reserved_8_63 : 56;
+		u64 maxdram : 4;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_l2c_big_ctl_cn61xx {
+		u64 reserved_8_63 : 56;
+		u64 maxdram : 4;
+		u64 reserved_1_3 : 3;
+		u64 disable : 1;
+	} cn61xx;
+	struct cvmx_l2c_big_ctl_cn61xx cn63xx;
+	struct cvmx_l2c_big_ctl_cn61xx cn66xx;
+	struct cvmx_l2c_big_ctl_cn61xx cn68xx;
+	struct cvmx_l2c_big_ctl_cn61xx cn68xxp1;
+	struct cvmx_l2c_big_ctl_cn70xx {
+		u64 reserved_8_63 : 56;
+		u64 maxdram : 4;
+		u64 reserved_1_3 : 3;
+		u64 disbig : 1;
+	} cn70xx;
+	struct cvmx_l2c_big_ctl_cn70xx cn70xxp1;
+	struct cvmx_l2c_big_ctl_cn70xx cn73xx;
+	struct cvmx_l2c_big_ctl_cn70xx cn78xx;
+	struct cvmx_l2c_big_ctl_cn70xx cn78xxp1;
+	struct cvmx_l2c_big_ctl_cn61xx cnf71xx;
+	struct cvmx_l2c_big_ctl_cn70xx cnf75xx;
+};
+
+struct rlevel_byte_data {
+	int delay;
+	int loop_total;
+	int loop_count;
+	int best;
+	u64 bm;
+	int bmerrs;
+	int sqerrs;
+	int bestsq;
+};
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx/cvmx-lmcx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-lmcx-defs.h
similarity index 100%
rename from arch/mips/mach-octeon/include/mach/cvmx/cvmx-lmcx-defs.h
rename to arch/mips/mach-octeon/include/mach/cvmx-lmcx-defs.h
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-mio-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-mio-defs.h
new file mode 100644
index 0000000..23a18be
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-mio-defs.h
@@ -0,0 +1,353 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_MIO_DEFS_H__
+#define __CVMX_MIO_DEFS_H__
+
+#define CVMX_MIO_PTP_CLOCK_CFG	  (0x0001070000000F00ull)
+#define CVMX_MIO_PTP_EVT_CNT	  (0x0001070000000F28ull)
+#define CVMX_MIO_RST_BOOT	  (0x0001180000001600ull)
+#define CVMX_MIO_RST_CTLX(offset) (0x0001180000001618ull + ((offset) & 1))
+#define CVMX_MIO_QLMX_CFG(offset) (0x0001180000001590ull + ((offset) & 7) * 8)
+
+/**
+ * cvmx_mio_ptp_clock_cfg
+ *
+ * This register configures the timestamp architecture.
+ *
+ */
+union cvmx_mio_ptp_clock_cfg {
+	u64 u64;
+	struct cvmx_mio_ptp_clock_cfg_s {
+		u64 reserved_40_63 : 24;
+		u64 ext_clk_edge : 2;
+		u64 ckout_out4 : 1;
+		u64 pps_out : 5;
+		u64 pps_inv : 1;
+		u64 pps_en : 1;
+		u64 ckout_out : 4;
+		u64 ckout_inv : 1;
+		u64 ckout_en : 1;
+		u64 evcnt_in : 6;
+		u64 evcnt_edge : 1;
+		u64 evcnt_en : 1;
+		u64 tstmp_in : 6;
+		u64 tstmp_edge : 1;
+		u64 tstmp_en : 1;
+		u64 ext_clk_in : 6;
+		u64 ext_clk_en : 1;
+		u64 ptp_en : 1;
+	} s;
+	struct cvmx_mio_ptp_clock_cfg_cn61xx {
+		u64 reserved_42_63 : 22;
+		u64 pps : 1;
+		u64 ckout : 1;
+		u64 ext_clk_edge : 2;
+		u64 ckout_out4 : 1;
+		u64 pps_out : 5;
+		u64 pps_inv : 1;
+		u64 pps_en : 1;
+		u64 ckout_out : 4;
+		u64 ckout_inv : 1;
+		u64 ckout_en : 1;
+		u64 evcnt_in : 6;
+		u64 evcnt_edge : 1;
+		u64 evcnt_en : 1;
+		u64 tstmp_in : 6;
+		u64 tstmp_edge : 1;
+		u64 tstmp_en : 1;
+		u64 ext_clk_in : 6;
+		u64 ext_clk_en : 1;
+		u64 ptp_en : 1;
+	} cn61xx;
+	struct cvmx_mio_ptp_clock_cfg_cn63xx {
+		u64 reserved_24_63 : 40;
+		u64 evcnt_in : 6;
+		u64 evcnt_edge : 1;
+		u64 evcnt_en : 1;
+		u64 tstmp_in : 6;
+		u64 tstmp_edge : 1;
+		u64 tstmp_en : 1;
+		u64 ext_clk_in : 6;
+		u64 ext_clk_en : 1;
+		u64 ptp_en : 1;
+	} cn63xx;
+	struct cvmx_mio_ptp_clock_cfg_cn63xx cn63xxp1;
+	struct cvmx_mio_ptp_clock_cfg_s cn66xx;
+	struct cvmx_mio_ptp_clock_cfg_cn61xx cn68xx;
+	struct cvmx_mio_ptp_clock_cfg_cn63xx cn68xxp1;
+	struct cvmx_mio_ptp_clock_cfg_cn70xx {
+		u64 reserved_42_63 : 22;
+		u64 ckout : 1;
+		u64 pps : 1;
+		u64 ext_clk_edge : 2;
+		u64 reserved_32_37 : 6;
+		u64 pps_inv : 1;
+		u64 pps_en : 1;
+		u64 reserved_26_29 : 4;
+		u64 ckout_inv : 1;
+		u64 ckout_en : 1;
+		u64 evcnt_in : 6;
+		u64 evcnt_edge : 1;
+		u64 evcnt_en : 1;
+		u64 tstmp_in : 6;
+		u64 tstmp_edge : 1;
+		u64 tstmp_en : 1;
+		u64 ext_clk_in : 6;
+		u64 ext_clk_en : 1;
+		u64 ptp_en : 1;
+	} cn70xx;
+	struct cvmx_mio_ptp_clock_cfg_cn70xx cn70xxp1;
+	struct cvmx_mio_ptp_clock_cfg_cn70xx cn73xx;
+	struct cvmx_mio_ptp_clock_cfg_cn70xx cn78xx;
+	struct cvmx_mio_ptp_clock_cfg_cn70xx cn78xxp1;
+	struct cvmx_mio_ptp_clock_cfg_cn61xx cnf71xx;
+	struct cvmx_mio_ptp_clock_cfg_cn70xx cnf75xx;
+};
+
+typedef union cvmx_mio_ptp_clock_cfg cvmx_mio_ptp_clock_cfg_t;
+
+/**
+ * cvmx_mio_ptp_evt_cnt
+ *
+ * This register contains the PTP event counter.
+ *
+ */
+union cvmx_mio_ptp_evt_cnt {
+	u64 u64;
+	struct cvmx_mio_ptp_evt_cnt_s {
+		u64 cntr : 64;
+	} s;
+	struct cvmx_mio_ptp_evt_cnt_s cn61xx;
+	struct cvmx_mio_ptp_evt_cnt_s cn63xx;
+	struct cvmx_mio_ptp_evt_cnt_s cn63xxp1;
+	struct cvmx_mio_ptp_evt_cnt_s cn66xx;
+	struct cvmx_mio_ptp_evt_cnt_s cn68xx;
+	struct cvmx_mio_ptp_evt_cnt_s cn68xxp1;
+	struct cvmx_mio_ptp_evt_cnt_s cn70xx;
+	struct cvmx_mio_ptp_evt_cnt_s cn70xxp1;
+	struct cvmx_mio_ptp_evt_cnt_s cn73xx;
+	struct cvmx_mio_ptp_evt_cnt_s cn78xx;
+	struct cvmx_mio_ptp_evt_cnt_s cn78xxp1;
+	struct cvmx_mio_ptp_evt_cnt_s cnf71xx;
+	struct cvmx_mio_ptp_evt_cnt_s cnf75xx;
+};
+
+typedef union cvmx_mio_ptp_evt_cnt cvmx_mio_ptp_evt_cnt_t;
+
+/**
+ * cvmx_mio_rst_boot
+ *
+ * Notes:
+ * JTCSRDIS, EJTAGDIS, ROMEN reset to 1 in authentik mode; in all other modes they reset to 0.
+ *
+ */
+union cvmx_mio_rst_boot {
+	u64 u64;
+	struct cvmx_mio_rst_boot_s {
+		u64 chipkill : 1;
+		u64 jtcsrdis : 1;
+		u64 ejtagdis : 1;
+		u64 romen : 1;
+		u64 ckill_ppdis : 1;
+		u64 jt_tstmode : 1;
+		u64 reserved_50_57 : 8;
+		u64 lboot_ext : 2;
+		u64 reserved_44_47 : 4;
+		u64 qlm4_spd : 4;
+		u64 qlm3_spd : 4;
+		u64 c_mul : 6;
+		u64 pnr_mul : 6;
+		u64 qlm2_spd : 4;
+		u64 qlm1_spd : 4;
+		u64 qlm0_spd : 4;
+		u64 lboot : 10;
+		u64 rboot : 1;
+		u64 rboot_pin : 1;
+	} s;
+	struct cvmx_mio_rst_boot_cn61xx {
+		u64 chipkill : 1;
+		u64 jtcsrdis : 1;
+		u64 ejtagdis : 1;
+		u64 romen : 1;
+		u64 ckill_ppdis : 1;
+		u64 jt_tstmode : 1;
+		u64 reserved_50_57 : 8;
+		u64 lboot_ext : 2;
+		u64 reserved_36_47 : 12;
+		u64 c_mul : 6;
+		u64 pnr_mul : 6;
+		u64 qlm2_spd : 4;
+		u64 qlm1_spd : 4;
+		u64 qlm0_spd : 4;
+		u64 lboot : 10;
+		u64 rboot : 1;
+		u64 rboot_pin : 1;
+	} cn61xx;
+	struct cvmx_mio_rst_boot_cn63xx {
+		u64 reserved_36_63 : 28;
+		u64 c_mul : 6;
+		u64 pnr_mul : 6;
+		u64 qlm2_spd : 4;
+		u64 qlm1_spd : 4;
+		u64 qlm0_spd : 4;
+		u64 lboot : 10;
+		u64 rboot : 1;
+		u64 rboot_pin : 1;
+	} cn63xx;
+	struct cvmx_mio_rst_boot_cn63xx cn63xxp1;
+	struct cvmx_mio_rst_boot_cn66xx {
+		u64 chipkill : 1;
+		u64 jtcsrdis : 1;
+		u64 ejtagdis : 1;
+		u64 romen : 1;
+		u64 ckill_ppdis : 1;
+		u64 reserved_50_58 : 9;
+		u64 lboot_ext : 2;
+		u64 reserved_36_47 : 12;
+		u64 c_mul : 6;
+		u64 pnr_mul : 6;
+		u64 qlm2_spd : 4;
+		u64 qlm1_spd : 4;
+		u64 qlm0_spd : 4;
+		u64 lboot : 10;
+		u64 rboot : 1;
+		u64 rboot_pin : 1;
+	} cn66xx;
+	struct cvmx_mio_rst_boot_cn68xx {
+		u64 reserved_59_63 : 5;
+		u64 jt_tstmode : 1;
+		u64 reserved_44_57 : 14;
+		u64 qlm4_spd : 4;
+		u64 qlm3_spd : 4;
+		u64 c_mul : 6;
+		u64 pnr_mul : 6;
+		u64 qlm2_spd : 4;
+		u64 qlm1_spd : 4;
+		u64 qlm0_spd : 4;
+		u64 lboot : 10;
+		u64 rboot : 1;
+		u64 rboot_pin : 1;
+	} cn68xx;
+	struct cvmx_mio_rst_boot_cn68xxp1 {
+		u64 reserved_44_63 : 20;
+		u64 qlm4_spd : 4;
+		u64 qlm3_spd : 4;
+		u64 c_mul : 6;
+		u64 pnr_mul : 6;
+		u64 qlm2_spd : 4;
+		u64 qlm1_spd : 4;
+		u64 qlm0_spd : 4;
+		u64 lboot : 10;
+		u64 rboot : 1;
+		u64 rboot_pin : 1;
+	} cn68xxp1;
+	struct cvmx_mio_rst_boot_cn61xx cnf71xx;
+};
+
+typedef union cvmx_mio_rst_boot cvmx_mio_rst_boot_t;
+
+/**
+ * cvmx_mio_rst_ctl#
+ *
+ * Notes:
+ * GEN1_Only mode is enabled for PEM0 when QLM1_SPD[0] is set or when sclk < 550Mhz.
+ * GEN1_Only mode is enabled for PEM1 when QLM1_SPD[1] is set or when sclk < 550Mhz.
+ */
+union cvmx_mio_rst_ctlx {
+	u64 u64;
+	struct cvmx_mio_rst_ctlx_s {
+		u64 reserved_13_63 : 51;
+		u64 in_rev_ln : 1;
+		u64 rev_lanes : 1;
+		u64 gen1_only : 1;
+		u64 prst_link : 1;
+		u64 rst_done : 1;
+		u64 rst_link : 1;
+		u64 host_mode : 1;
+		u64 prtmode : 2;
+		u64 rst_drv : 1;
+		u64 rst_rcv : 1;
+		u64 rst_chip : 1;
+		u64 rst_val : 1;
+	} s;
+	struct cvmx_mio_rst_ctlx_s cn61xx;
+	struct cvmx_mio_rst_ctlx_cn63xx {
+		u64 reserved_10_63 : 54;
+		u64 prst_link : 1;
+		u64 rst_done : 1;
+		u64 rst_link : 1;
+		u64 host_mode : 1;
+		u64 prtmode : 2;
+		u64 rst_drv : 1;
+		u64 rst_rcv : 1;
+		u64 rst_chip : 1;
+		u64 rst_val : 1;
+	} cn63xx;
+	struct cvmx_mio_rst_ctlx_cn63xxp1 {
+		u64 reserved_9_63 : 55;
+		u64 rst_done : 1;
+		u64 rst_link : 1;
+		u64 host_mode : 1;
+		u64 prtmode : 2;
+		u64 rst_drv : 1;
+		u64 rst_rcv : 1;
+		u64 rst_chip : 1;
+		u64 rst_val : 1;
+	} cn63xxp1;
+	struct cvmx_mio_rst_ctlx_cn63xx cn66xx;
+	struct cvmx_mio_rst_ctlx_cn63xx cn68xx;
+	struct cvmx_mio_rst_ctlx_cn63xx cn68xxp1;
+	struct cvmx_mio_rst_ctlx_s cnf71xx;
+};
+
+typedef union cvmx_mio_rst_ctlx cvmx_mio_rst_ctlx_t;
+
+/**
+ * cvmx_mio_qlm#_cfg
+ *
+ * Notes:
+ * Certain QLM_SPD is valid only for certain QLM_CFG configuration, refer to HRM for valid
+ * combinations.  These csrs are reset only on COLD_RESET.  The Reset values for QLM_SPD and QLM_CFG
+ * are as follows:               MIO_QLM0_CFG  SPD=F, CFG=2 SGMII (AGX0)
+ *                               MIO_QLM1_CFG  SPD=0, CFG=1 PCIE 2x1 (PEM0/PEM1)
+ */
+union cvmx_mio_qlmx_cfg {
+	u64 u64;
+	struct cvmx_mio_qlmx_cfg_s {
+		u64 reserved_15_63 : 49;
+		u64 prtmode : 1;
+		u64 reserved_12_13 : 2;
+		u64 qlm_spd : 4;
+		u64 reserved_4_7 : 4;
+		u64 qlm_cfg : 4;
+	} s;
+	struct cvmx_mio_qlmx_cfg_cn61xx {
+		u64 reserved_15_63 : 49;
+		u64 prtmode : 1;
+		u64 reserved_12_13 : 2;
+		u64 qlm_spd : 4;
+		u64 reserved_2_7 : 6;
+		u64 qlm_cfg : 2;
+	} cn61xx;
+	struct cvmx_mio_qlmx_cfg_cn66xx {
+		u64 reserved_12_63 : 52;
+		u64 qlm_spd : 4;
+		u64 reserved_4_7 : 4;
+		u64 qlm_cfg : 4;
+	} cn66xx;
+	struct cvmx_mio_qlmx_cfg_cn68xx {
+		u64 reserved_12_63 : 52;
+		u64 qlm_spd : 4;
+		u64 reserved_3_7 : 5;
+		u64 qlm_cfg : 3;
+	} cn68xx;
+	struct cvmx_mio_qlmx_cfg_cn68xx cn68xxp1;
+	struct cvmx_mio_qlmx_cfg_cn61xx cnf71xx;
+};
+
+typedef union cvmx_mio_qlmx_cfg cvmx_mio_qlmx_cfg_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-npi-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-npi-defs.h
new file mode 100644
index 0000000..f23ed78
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-npi-defs.h
@@ -0,0 +1,1953 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon npi.
+ */
+
+#ifndef __CVMX_NPI_DEFS_H__
+#define __CVMX_NPI_DEFS_H__
+
+#define CVMX_NPI_BASE_ADDR_INPUT0	   CVMX_NPI_BASE_ADDR_INPUTX(0)
+#define CVMX_NPI_BASE_ADDR_INPUT1	   CVMX_NPI_BASE_ADDR_INPUTX(1)
+#define CVMX_NPI_BASE_ADDR_INPUT2	   CVMX_NPI_BASE_ADDR_INPUTX(2)
+#define CVMX_NPI_BASE_ADDR_INPUT3	   CVMX_NPI_BASE_ADDR_INPUTX(3)
+#define CVMX_NPI_BASE_ADDR_INPUTX(offset)  (0x00011F0000000070ull + ((offset) & 3) * 16)
+#define CVMX_NPI_BASE_ADDR_OUTPUT0	   CVMX_NPI_BASE_ADDR_OUTPUTX(0)
+#define CVMX_NPI_BASE_ADDR_OUTPUT1	   CVMX_NPI_BASE_ADDR_OUTPUTX(1)
+#define CVMX_NPI_BASE_ADDR_OUTPUT2	   CVMX_NPI_BASE_ADDR_OUTPUTX(2)
+#define CVMX_NPI_BASE_ADDR_OUTPUT3	   CVMX_NPI_BASE_ADDR_OUTPUTX(3)
+#define CVMX_NPI_BASE_ADDR_OUTPUTX(offset) (0x00011F00000000B8ull + ((offset) & 3) * 8)
+#define CVMX_NPI_BIST_STATUS		   (0x00011F00000003F8ull)
+#define CVMX_NPI_BUFF_SIZE_OUTPUT0	   CVMX_NPI_BUFF_SIZE_OUTPUTX(0)
+#define CVMX_NPI_BUFF_SIZE_OUTPUT1	   CVMX_NPI_BUFF_SIZE_OUTPUTX(1)
+#define CVMX_NPI_BUFF_SIZE_OUTPUT2	   CVMX_NPI_BUFF_SIZE_OUTPUTX(2)
+#define CVMX_NPI_BUFF_SIZE_OUTPUT3	   CVMX_NPI_BUFF_SIZE_OUTPUTX(3)
+#define CVMX_NPI_BUFF_SIZE_OUTPUTX(offset) (0x00011F00000000E0ull + ((offset) & 3) * 8)
+#define CVMX_NPI_COMP_CTL		   (0x00011F0000000218ull)
+#define CVMX_NPI_CTL_STATUS		   (0x00011F0000000010ull)
+#define CVMX_NPI_DBG_SELECT		   (0x00011F0000000008ull)
+#define CVMX_NPI_DMA_CONTROL		   (0x00011F0000000128ull)
+#define CVMX_NPI_DMA_HIGHP_COUNTS	   (0x00011F0000000148ull)
+#define CVMX_NPI_DMA_HIGHP_NADDR	   (0x00011F0000000158ull)
+#define CVMX_NPI_DMA_LOWP_COUNTS	   (0x00011F0000000140ull)
+#define CVMX_NPI_DMA_LOWP_NADDR		   (0x00011F0000000150ull)
+#define CVMX_NPI_HIGHP_DBELL		   (0x00011F0000000120ull)
+#define CVMX_NPI_HIGHP_IBUFF_SADDR	   (0x00011F0000000110ull)
+#define CVMX_NPI_INPUT_CONTROL		   (0x00011F0000000138ull)
+#define CVMX_NPI_INT_ENB		   (0x00011F0000000020ull)
+#define CVMX_NPI_INT_SUM		   (0x00011F0000000018ull)
+#define CVMX_NPI_LOWP_DBELL		   (0x00011F0000000118ull)
+#define CVMX_NPI_LOWP_IBUFF_SADDR	   (0x00011F0000000108ull)
+#define CVMX_NPI_MEM_ACCESS_SUBID3	   CVMX_NPI_MEM_ACCESS_SUBIDX(3)
+#define CVMX_NPI_MEM_ACCESS_SUBID4	   CVMX_NPI_MEM_ACCESS_SUBIDX(4)
+#define CVMX_NPI_MEM_ACCESS_SUBID5	   CVMX_NPI_MEM_ACCESS_SUBIDX(5)
+#define CVMX_NPI_MEM_ACCESS_SUBID6	   CVMX_NPI_MEM_ACCESS_SUBIDX(6)
+#define CVMX_NPI_MEM_ACCESS_SUBIDX(offset) (0x00011F0000000028ull + ((offset) & 7) * 8 - 8 * 3)
+#define CVMX_NPI_MSI_RCV		   (0x0000000000000190ull)
+#define CVMX_NPI_NPI_MSI_RCV		   (0x00011F0000001190ull)
+#define CVMX_NPI_NUM_DESC_OUTPUT0	   CVMX_NPI_NUM_DESC_OUTPUTX(0)
+#define CVMX_NPI_NUM_DESC_OUTPUT1	   CVMX_NPI_NUM_DESC_OUTPUTX(1)
+#define CVMX_NPI_NUM_DESC_OUTPUT2	   CVMX_NPI_NUM_DESC_OUTPUTX(2)
+#define CVMX_NPI_NUM_DESC_OUTPUT3	   CVMX_NPI_NUM_DESC_OUTPUTX(3)
+#define CVMX_NPI_NUM_DESC_OUTPUTX(offset)  (0x00011F0000000050ull + ((offset) & 3) * 8)
+#define CVMX_NPI_OUTPUT_CONTROL		   (0x00011F0000000100ull)
+#define CVMX_NPI_P0_DBPAIR_ADDR		   CVMX_NPI_PX_DBPAIR_ADDR(0)
+#define CVMX_NPI_P0_INSTR_ADDR		   CVMX_NPI_PX_INSTR_ADDR(0)
+#define CVMX_NPI_P0_INSTR_CNTS		   CVMX_NPI_PX_INSTR_CNTS(0)
+#define CVMX_NPI_P0_PAIR_CNTS		   CVMX_NPI_PX_PAIR_CNTS(0)
+#define CVMX_NPI_P1_DBPAIR_ADDR		   CVMX_NPI_PX_DBPAIR_ADDR(1)
+#define CVMX_NPI_P1_INSTR_ADDR		   CVMX_NPI_PX_INSTR_ADDR(1)
+#define CVMX_NPI_P1_INSTR_CNTS		   CVMX_NPI_PX_INSTR_CNTS(1)
+#define CVMX_NPI_P1_PAIR_CNTS		   CVMX_NPI_PX_PAIR_CNTS(1)
+#define CVMX_NPI_P2_DBPAIR_ADDR		   CVMX_NPI_PX_DBPAIR_ADDR(2)
+#define CVMX_NPI_P2_INSTR_ADDR		   CVMX_NPI_PX_INSTR_ADDR(2)
+#define CVMX_NPI_P2_INSTR_CNTS		   CVMX_NPI_PX_INSTR_CNTS(2)
+#define CVMX_NPI_P2_PAIR_CNTS		   CVMX_NPI_PX_PAIR_CNTS(2)
+#define CVMX_NPI_P3_DBPAIR_ADDR		   CVMX_NPI_PX_DBPAIR_ADDR(3)
+#define CVMX_NPI_P3_INSTR_ADDR		   CVMX_NPI_PX_INSTR_ADDR(3)
+#define CVMX_NPI_P3_INSTR_CNTS		   CVMX_NPI_PX_INSTR_CNTS(3)
+#define CVMX_NPI_P3_PAIR_CNTS		   CVMX_NPI_PX_PAIR_CNTS(3)
+#define CVMX_NPI_PCI_BAR1_INDEXX(offset)   (0x00011F0000001100ull + ((offset) & 31) * 4)
+#define CVMX_NPI_PCI_BIST_REG		   (0x00011F00000011C0ull)
+#define CVMX_NPI_PCI_BURST_SIZE		   (0x00011F00000000D8ull)
+#define CVMX_NPI_PCI_CFG00		   (0x00011F0000001800ull)
+#define CVMX_NPI_PCI_CFG01		   (0x00011F0000001804ull)
+#define CVMX_NPI_PCI_CFG02		   (0x00011F0000001808ull)
+#define CVMX_NPI_PCI_CFG03		   (0x00011F000000180Cull)
+#define CVMX_NPI_PCI_CFG04		   (0x00011F0000001810ull)
+#define CVMX_NPI_PCI_CFG05		   (0x00011F0000001814ull)
+#define CVMX_NPI_PCI_CFG06		   (0x00011F0000001818ull)
+#define CVMX_NPI_PCI_CFG07		   (0x00011F000000181Cull)
+#define CVMX_NPI_PCI_CFG08		   (0x00011F0000001820ull)
+#define CVMX_NPI_PCI_CFG09		   (0x00011F0000001824ull)
+#define CVMX_NPI_PCI_CFG10		   (0x00011F0000001828ull)
+#define CVMX_NPI_PCI_CFG11		   (0x00011F000000182Cull)
+#define CVMX_NPI_PCI_CFG12		   (0x00011F0000001830ull)
+#define CVMX_NPI_PCI_CFG13		   (0x00011F0000001834ull)
+#define CVMX_NPI_PCI_CFG15		   (0x00011F000000183Cull)
+#define CVMX_NPI_PCI_CFG16		   (0x00011F0000001840ull)
+#define CVMX_NPI_PCI_CFG17		   (0x00011F0000001844ull)
+#define CVMX_NPI_PCI_CFG18		   (0x00011F0000001848ull)
+#define CVMX_NPI_PCI_CFG19		   (0x00011F000000184Cull)
+#define CVMX_NPI_PCI_CFG20		   (0x00011F0000001850ull)
+#define CVMX_NPI_PCI_CFG21		   (0x00011F0000001854ull)
+#define CVMX_NPI_PCI_CFG22		   (0x00011F0000001858ull)
+#define CVMX_NPI_PCI_CFG56		   (0x00011F00000018E0ull)
+#define CVMX_NPI_PCI_CFG57		   (0x00011F00000018E4ull)
+#define CVMX_NPI_PCI_CFG58		   (0x00011F00000018E8ull)
+#define CVMX_NPI_PCI_CFG59		   (0x00011F00000018ECull)
+#define CVMX_NPI_PCI_CFG60		   (0x00011F00000018F0ull)
+#define CVMX_NPI_PCI_CFG61		   (0x00011F00000018F4ull)
+#define CVMX_NPI_PCI_CFG62		   (0x00011F00000018F8ull)
+#define CVMX_NPI_PCI_CFG63		   (0x00011F00000018FCull)
+#define CVMX_NPI_PCI_CNT_REG		   (0x00011F00000011B8ull)
+#define CVMX_NPI_PCI_CTL_STATUS_2	   (0x00011F000000118Cull)
+#define CVMX_NPI_PCI_INT_ARB_CFG	   (0x00011F0000000130ull)
+#define CVMX_NPI_PCI_INT_ENB2		   (0x00011F00000011A0ull)
+#define CVMX_NPI_PCI_INT_SUM2		   (0x00011F0000001198ull)
+#define CVMX_NPI_PCI_READ_CMD		   (0x00011F0000000048ull)
+#define CVMX_NPI_PCI_READ_CMD_6		   (0x00011F0000001180ull)
+#define CVMX_NPI_PCI_READ_CMD_C		   (0x00011F0000001184ull)
+#define CVMX_NPI_PCI_READ_CMD_E		   (0x00011F0000001188ull)
+#define CVMX_NPI_PCI_SCM_REG		   (0x00011F00000011A8ull)
+#define CVMX_NPI_PCI_TSR_REG		   (0x00011F00000011B0ull)
+#define CVMX_NPI_PORT32_INSTR_HDR	   (0x00011F00000001F8ull)
+#define CVMX_NPI_PORT33_INSTR_HDR	   (0x00011F0000000200ull)
+#define CVMX_NPI_PORT34_INSTR_HDR	   (0x00011F0000000208ull)
+#define CVMX_NPI_PORT35_INSTR_HDR	   (0x00011F0000000210ull)
+#define CVMX_NPI_PORT_BP_CONTROL	   (0x00011F00000001F0ull)
+#define CVMX_NPI_PX_DBPAIR_ADDR(offset)	   (0x00011F0000000180ull + ((offset) & 3) * 8)
+#define CVMX_NPI_PX_INSTR_ADDR(offset)	   (0x00011F00000001C0ull + ((offset) & 3) * 8)
+#define CVMX_NPI_PX_INSTR_CNTS(offset)	   (0x00011F00000001A0ull + ((offset) & 3) * 8)
+#define CVMX_NPI_PX_PAIR_CNTS(offset)	   (0x00011F0000000160ull + ((offset) & 3) * 8)
+#define CVMX_NPI_RSL_INT_BLOCKS		   (0x00011F0000000000ull)
+#define CVMX_NPI_SIZE_INPUT0		   CVMX_NPI_SIZE_INPUTX(0)
+#define CVMX_NPI_SIZE_INPUT1		   CVMX_NPI_SIZE_INPUTX(1)
+#define CVMX_NPI_SIZE_INPUT2		   CVMX_NPI_SIZE_INPUTX(2)
+#define CVMX_NPI_SIZE_INPUT3		   CVMX_NPI_SIZE_INPUTX(3)
+#define CVMX_NPI_SIZE_INPUTX(offset)	   (0x00011F0000000078ull + ((offset) & 3) * 16)
+#define CVMX_NPI_WIN_READ_TO		   (0x00011F00000001E0ull)
+
+/**
+ * cvmx_npi_base_addr_input#
+ *
+ * NPI_BASE_ADDR_INPUT0 = NPI's Base Address Input 0 Register
+ *
+ * The address to start reading Instructions from for Input-0.
+ */
+union cvmx_npi_base_addr_inputx {
+	u64 u64;
+	struct cvmx_npi_base_addr_inputx_s {
+		u64 baddr : 61;
+		u64 reserved_0_2 : 3;
+	} s;
+	struct cvmx_npi_base_addr_inputx_s cn30xx;
+	struct cvmx_npi_base_addr_inputx_s cn31xx;
+	struct cvmx_npi_base_addr_inputx_s cn38xx;
+	struct cvmx_npi_base_addr_inputx_s cn38xxp2;
+	struct cvmx_npi_base_addr_inputx_s cn50xx;
+	struct cvmx_npi_base_addr_inputx_s cn58xx;
+	struct cvmx_npi_base_addr_inputx_s cn58xxp1;
+};
+
+typedef union cvmx_npi_base_addr_inputx cvmx_npi_base_addr_inputx_t;
+
+/**
+ * cvmx_npi_base_addr_output#
+ *
+ * NPI_BASE_ADDR_OUTPUT0 = NPI's Base Address Output 0 Register
+ *
+ * The address to start reading Instructions from for Output-0.
+ */
+union cvmx_npi_base_addr_outputx {
+	u64 u64;
+	struct cvmx_npi_base_addr_outputx_s {
+		u64 baddr : 61;
+		u64 reserved_0_2 : 3;
+	} s;
+	struct cvmx_npi_base_addr_outputx_s cn30xx;
+	struct cvmx_npi_base_addr_outputx_s cn31xx;
+	struct cvmx_npi_base_addr_outputx_s cn38xx;
+	struct cvmx_npi_base_addr_outputx_s cn38xxp2;
+	struct cvmx_npi_base_addr_outputx_s cn50xx;
+	struct cvmx_npi_base_addr_outputx_s cn58xx;
+	struct cvmx_npi_base_addr_outputx_s cn58xxp1;
+};
+
+typedef union cvmx_npi_base_addr_outputx cvmx_npi_base_addr_outputx_t;
+
+/**
+ * cvmx_npi_bist_status
+ *
+ * NPI_BIST_STATUS = NPI's BIST Status Register
+ *
+ * Results from BIST runs of NPI's memories.
+ */
+union cvmx_npi_bist_status {
+	u64 u64;
+	struct cvmx_npi_bist_status_s {
+		u64 reserved_20_63 : 44;
+		u64 csr_bs : 1;
+		u64 dif_bs : 1;
+		u64 rdp_bs : 1;
+		u64 pcnc_bs : 1;
+		u64 pcn_bs : 1;
+		u64 rdn_bs : 1;
+		u64 pcac_bs : 1;
+		u64 pcad_bs : 1;
+		u64 rdnl_bs : 1;
+		u64 pgf_bs : 1;
+		u64 pig_bs : 1;
+		u64 pof0_bs : 1;
+		u64 pof1_bs : 1;
+		u64 pof2_bs : 1;
+		u64 pof3_bs : 1;
+		u64 pos_bs : 1;
+		u64 nus_bs : 1;
+		u64 dob_bs : 1;
+		u64 pdf_bs : 1;
+		u64 dpi_bs : 1;
+	} s;
+	struct cvmx_npi_bist_status_cn30xx {
+		u64 reserved_20_63 : 44;
+		u64 csr_bs : 1;
+		u64 dif_bs : 1;
+		u64 rdp_bs : 1;
+		u64 pcnc_bs : 1;
+		u64 pcn_bs : 1;
+		u64 rdn_bs : 1;
+		u64 pcac_bs : 1;
+		u64 pcad_bs : 1;
+		u64 rdnl_bs : 1;
+		u64 pgf_bs : 1;
+		u64 pig_bs : 1;
+		u64 pof0_bs : 1;
+		u64 reserved_5_7 : 3;
+		u64 pos_bs : 1;
+		u64 nus_bs : 1;
+		u64 dob_bs : 1;
+		u64 pdf_bs : 1;
+		u64 dpi_bs : 1;
+	} cn30xx;
+	struct cvmx_npi_bist_status_s cn31xx;
+	struct cvmx_npi_bist_status_s cn38xx;
+	struct cvmx_npi_bist_status_s cn38xxp2;
+	struct cvmx_npi_bist_status_cn50xx {
+		u64 reserved_20_63 : 44;
+		u64 csr_bs : 1;
+		u64 dif_bs : 1;
+		u64 rdp_bs : 1;
+		u64 pcnc_bs : 1;
+		u64 pcn_bs : 1;
+		u64 rdn_bs : 1;
+		u64 pcac_bs : 1;
+		u64 pcad_bs : 1;
+		u64 rdnl_bs : 1;
+		u64 pgf_bs : 1;
+		u64 pig_bs : 1;
+		u64 pof0_bs : 1;
+		u64 pof1_bs : 1;
+		u64 reserved_5_6 : 2;
+		u64 pos_bs : 1;
+		u64 nus_bs : 1;
+		u64 dob_bs : 1;
+		u64 pdf_bs : 1;
+		u64 dpi_bs : 1;
+	} cn50xx;
+	struct cvmx_npi_bist_status_s cn58xx;
+	struct cvmx_npi_bist_status_s cn58xxp1;
+};
+
+typedef union cvmx_npi_bist_status cvmx_npi_bist_status_t;
+
+/**
+ * cvmx_npi_buff_size_output#
+ *
+ * NPI_BUFF_SIZE_OUTPUT0 = NPI's D/I Buffer Sizes For Output 0
+ *
+ * The size in bytes of the Data Bufffer and Information Buffer for output 0.
+ */
+union cvmx_npi_buff_size_outputx {
+	u64 u64;
+	struct cvmx_npi_buff_size_outputx_s {
+		u64 reserved_23_63 : 41;
+		u64 isize : 7;
+		u64 bsize : 16;
+	} s;
+	struct cvmx_npi_buff_size_outputx_s cn30xx;
+	struct cvmx_npi_buff_size_outputx_s cn31xx;
+	struct cvmx_npi_buff_size_outputx_s cn38xx;
+	struct cvmx_npi_buff_size_outputx_s cn38xxp2;
+	struct cvmx_npi_buff_size_outputx_s cn50xx;
+	struct cvmx_npi_buff_size_outputx_s cn58xx;
+	struct cvmx_npi_buff_size_outputx_s cn58xxp1;
+};
+
+typedef union cvmx_npi_buff_size_outputx cvmx_npi_buff_size_outputx_t;
+
+/**
+ * cvmx_npi_comp_ctl
+ *
+ * NPI_COMP_CTL = PCI Compensation Control
+ *
+ * PCI Compensation Control
+ */
+union cvmx_npi_comp_ctl {
+	u64 u64;
+	struct cvmx_npi_comp_ctl_s {
+		u64 reserved_10_63 : 54;
+		u64 pctl : 5;
+		u64 nctl : 5;
+	} s;
+	struct cvmx_npi_comp_ctl_s cn50xx;
+	struct cvmx_npi_comp_ctl_s cn58xx;
+	struct cvmx_npi_comp_ctl_s cn58xxp1;
+};
+
+typedef union cvmx_npi_comp_ctl cvmx_npi_comp_ctl_t;
+
+/**
+ * cvmx_npi_ctl_status
+ *
+ * NPI_CTL_STATUS = NPI's Control Status Register
+ *
+ * Contains control ans status for NPI.
+ * Writes to this register are not ordered with writes/reads to the PCI Memory space.
+ * To ensure that a write has completed the user must read the register before
+ * making an access(i.e. PCI memory space) that requires the value of this register to be updated.
+ */
+union cvmx_npi_ctl_status {
+	u64 u64;
+	struct cvmx_npi_ctl_status_s {
+		u64 reserved_63_63 : 1;
+		u64 chip_rev : 8;
+		u64 dis_pniw : 1;
+		u64 out3_enb : 1;
+		u64 out2_enb : 1;
+		u64 out1_enb : 1;
+		u64 out0_enb : 1;
+		u64 ins3_enb : 1;
+		u64 ins2_enb : 1;
+		u64 ins1_enb : 1;
+		u64 ins0_enb : 1;
+		u64 ins3_64b : 1;
+		u64 ins2_64b : 1;
+		u64 ins1_64b : 1;
+		u64 ins0_64b : 1;
+		u64 pci_wdis : 1;
+		u64 wait_com : 1;
+		u64 reserved_37_39 : 3;
+		u64 max_word : 5;
+		u64 reserved_10_31 : 22;
+		u64 timer : 10;
+	} s;
+	struct cvmx_npi_ctl_status_cn30xx {
+		u64 reserved_63_63 : 1;
+		u64 chip_rev : 8;
+		u64 dis_pniw : 1;
+		u64 reserved_51_53 : 3;
+		u64 out0_enb : 1;
+		u64 reserved_47_49 : 3;
+		u64 ins0_enb : 1;
+		u64 reserved_43_45 : 3;
+		u64 ins0_64b : 1;
+		u64 pci_wdis : 1;
+		u64 wait_com : 1;
+		u64 reserved_37_39 : 3;
+		u64 max_word : 5;
+		u64 reserved_10_31 : 22;
+		u64 timer : 10;
+	} cn30xx;
+	struct cvmx_npi_ctl_status_cn31xx {
+		u64 reserved_63_63 : 1;
+		u64 chip_rev : 8;
+		u64 dis_pniw : 1;
+		u64 reserved_52_53 : 2;
+		u64 out1_enb : 1;
+		u64 out0_enb : 1;
+		u64 reserved_48_49 : 2;
+		u64 ins1_enb : 1;
+		u64 ins0_enb : 1;
+		u64 reserved_44_45 : 2;
+		u64 ins1_64b : 1;
+		u64 ins0_64b : 1;
+		u64 pci_wdis : 1;
+		u64 wait_com : 1;
+		u64 reserved_37_39 : 3;
+		u64 max_word : 5;
+		u64 reserved_10_31 : 22;
+		u64 timer : 10;
+	} cn31xx;
+	struct cvmx_npi_ctl_status_s cn38xx;
+	struct cvmx_npi_ctl_status_s cn38xxp2;
+	struct cvmx_npi_ctl_status_cn31xx cn50xx;
+	struct cvmx_npi_ctl_status_s cn58xx;
+	struct cvmx_npi_ctl_status_s cn58xxp1;
+};
+
+typedef union cvmx_npi_ctl_status cvmx_npi_ctl_status_t;
+
+/**
+ * cvmx_npi_dbg_select
+ *
+ * NPI_DBG_SELECT = Debug Select Register
+ *
+ * Contains the debug select value in last written to the RSLs.
+ */
+union cvmx_npi_dbg_select {
+	u64 u64;
+	struct cvmx_npi_dbg_select_s {
+		u64 reserved_16_63 : 48;
+		u64 dbg_sel : 16;
+	} s;
+	struct cvmx_npi_dbg_select_s cn30xx;
+	struct cvmx_npi_dbg_select_s cn31xx;
+	struct cvmx_npi_dbg_select_s cn38xx;
+	struct cvmx_npi_dbg_select_s cn38xxp2;
+	struct cvmx_npi_dbg_select_s cn50xx;
+	struct cvmx_npi_dbg_select_s cn58xx;
+	struct cvmx_npi_dbg_select_s cn58xxp1;
+};
+
+typedef union cvmx_npi_dbg_select cvmx_npi_dbg_select_t;
+
+/**
+ * cvmx_npi_dma_control
+ *
+ * NPI_DMA_CONTROL = DMA Control Register
+ *
+ * Controls operation of the DMA IN/OUT of the NPI.
+ */
+union cvmx_npi_dma_control {
+	u64 u64;
+	struct cvmx_npi_dma_control_s {
+		u64 reserved_36_63 : 28;
+		u64 b0_lend : 1;
+		u64 dwb_denb : 1;
+		u64 dwb_ichk : 9;
+		u64 fpa_que : 3;
+		u64 o_add1 : 1;
+		u64 o_ro : 1;
+		u64 o_ns : 1;
+		u64 o_es : 2;
+		u64 o_mode : 1;
+		u64 hp_enb : 1;
+		u64 lp_enb : 1;
+		u64 csize : 14;
+	} s;
+	struct cvmx_npi_dma_control_s cn30xx;
+	struct cvmx_npi_dma_control_s cn31xx;
+	struct cvmx_npi_dma_control_s cn38xx;
+	struct cvmx_npi_dma_control_s cn38xxp2;
+	struct cvmx_npi_dma_control_s cn50xx;
+	struct cvmx_npi_dma_control_s cn58xx;
+	struct cvmx_npi_dma_control_s cn58xxp1;
+};
+
+typedef union cvmx_npi_dma_control cvmx_npi_dma_control_t;
+
+/**
+ * cvmx_npi_dma_highp_counts
+ *
+ * NPI_DMA_HIGHP_COUNTS = NPI's High Priority DMA Counts
+ *
+ * Values for determing the number of instructions for High Priority DMA in the NPI.
+ */
+union cvmx_npi_dma_highp_counts {
+	u64 u64;
+	struct cvmx_npi_dma_highp_counts_s {
+		u64 reserved_39_63 : 25;
+		u64 fcnt : 7;
+		u64 dbell : 32;
+	} s;
+	struct cvmx_npi_dma_highp_counts_s cn30xx;
+	struct cvmx_npi_dma_highp_counts_s cn31xx;
+	struct cvmx_npi_dma_highp_counts_s cn38xx;
+	struct cvmx_npi_dma_highp_counts_s cn38xxp2;
+	struct cvmx_npi_dma_highp_counts_s cn50xx;
+	struct cvmx_npi_dma_highp_counts_s cn58xx;
+	struct cvmx_npi_dma_highp_counts_s cn58xxp1;
+};
+
+typedef union cvmx_npi_dma_highp_counts cvmx_npi_dma_highp_counts_t;
+
+/**
+ * cvmx_npi_dma_highp_naddr
+ *
+ * NPI_DMA_HIGHP_NADDR = NPI's High Priority DMA Next Ichunk Address
+ *
+ * Place NPI will read the next Ichunk data from. This is valid when state is 0
+ */
+union cvmx_npi_dma_highp_naddr {
+	u64 u64;
+	struct cvmx_npi_dma_highp_naddr_s {
+		u64 reserved_40_63 : 24;
+		u64 state : 4;
+		u64 addr : 36;
+	} s;
+	struct cvmx_npi_dma_highp_naddr_s cn30xx;
+	struct cvmx_npi_dma_highp_naddr_s cn31xx;
+	struct cvmx_npi_dma_highp_naddr_s cn38xx;
+	struct cvmx_npi_dma_highp_naddr_s cn38xxp2;
+	struct cvmx_npi_dma_highp_naddr_s cn50xx;
+	struct cvmx_npi_dma_highp_naddr_s cn58xx;
+	struct cvmx_npi_dma_highp_naddr_s cn58xxp1;
+};
+
+typedef union cvmx_npi_dma_highp_naddr cvmx_npi_dma_highp_naddr_t;
+
+/**
+ * cvmx_npi_dma_lowp_counts
+ *
+ * NPI_DMA_LOWP_COUNTS = NPI's Low Priority DMA Counts
+ *
+ * Values for determing the number of instructions for Low Priority DMA in the NPI.
+ */
+union cvmx_npi_dma_lowp_counts {
+	u64 u64;
+	struct cvmx_npi_dma_lowp_counts_s {
+		u64 reserved_39_63 : 25;
+		u64 fcnt : 7;
+		u64 dbell : 32;
+	} s;
+	struct cvmx_npi_dma_lowp_counts_s cn30xx;
+	struct cvmx_npi_dma_lowp_counts_s cn31xx;
+	struct cvmx_npi_dma_lowp_counts_s cn38xx;
+	struct cvmx_npi_dma_lowp_counts_s cn38xxp2;
+	struct cvmx_npi_dma_lowp_counts_s cn50xx;
+	struct cvmx_npi_dma_lowp_counts_s cn58xx;
+	struct cvmx_npi_dma_lowp_counts_s cn58xxp1;
+};
+
+typedef union cvmx_npi_dma_lowp_counts cvmx_npi_dma_lowp_counts_t;
+
+/**
+ * cvmx_npi_dma_lowp_naddr
+ *
+ * NPI_DMA_LOWP_NADDR = NPI's Low Priority DMA Next Ichunk Address
+ *
+ * Place NPI will read the next Ichunk data from. This is valid when state is 0
+ */
+union cvmx_npi_dma_lowp_naddr {
+	u64 u64;
+	struct cvmx_npi_dma_lowp_naddr_s {
+		u64 reserved_40_63 : 24;
+		u64 state : 4;
+		u64 addr : 36;
+	} s;
+	struct cvmx_npi_dma_lowp_naddr_s cn30xx;
+	struct cvmx_npi_dma_lowp_naddr_s cn31xx;
+	struct cvmx_npi_dma_lowp_naddr_s cn38xx;
+	struct cvmx_npi_dma_lowp_naddr_s cn38xxp2;
+	struct cvmx_npi_dma_lowp_naddr_s cn50xx;
+	struct cvmx_npi_dma_lowp_naddr_s cn58xx;
+	struct cvmx_npi_dma_lowp_naddr_s cn58xxp1;
+};
+
+typedef union cvmx_npi_dma_lowp_naddr cvmx_npi_dma_lowp_naddr_t;
+
+/**
+ * cvmx_npi_highp_dbell
+ *
+ * NPI_HIGHP_DBELL = High Priority Door Bell
+ *
+ * The door bell register for the high priority DMA queue.
+ */
+union cvmx_npi_highp_dbell {
+	u64 u64;
+	struct cvmx_npi_highp_dbell_s {
+		u64 reserved_16_63 : 48;
+		u64 dbell : 16;
+	} s;
+	struct cvmx_npi_highp_dbell_s cn30xx;
+	struct cvmx_npi_highp_dbell_s cn31xx;
+	struct cvmx_npi_highp_dbell_s cn38xx;
+	struct cvmx_npi_highp_dbell_s cn38xxp2;
+	struct cvmx_npi_highp_dbell_s cn50xx;
+	struct cvmx_npi_highp_dbell_s cn58xx;
+	struct cvmx_npi_highp_dbell_s cn58xxp1;
+};
+
+typedef union cvmx_npi_highp_dbell cvmx_npi_highp_dbell_t;
+
+/**
+ * cvmx_npi_highp_ibuff_saddr
+ *
+ * NPI_HIGHP_IBUFF_SADDR = DMA High Priority Instruction Buffer Starting Address
+ *
+ * The address to start reading Instructions from for HIGHP.
+ */
+union cvmx_npi_highp_ibuff_saddr {
+	u64 u64;
+	struct cvmx_npi_highp_ibuff_saddr_s {
+		u64 reserved_36_63 : 28;
+		u64 saddr : 36;
+	} s;
+	struct cvmx_npi_highp_ibuff_saddr_s cn30xx;
+	struct cvmx_npi_highp_ibuff_saddr_s cn31xx;
+	struct cvmx_npi_highp_ibuff_saddr_s cn38xx;
+	struct cvmx_npi_highp_ibuff_saddr_s cn38xxp2;
+	struct cvmx_npi_highp_ibuff_saddr_s cn50xx;
+	struct cvmx_npi_highp_ibuff_saddr_s cn58xx;
+	struct cvmx_npi_highp_ibuff_saddr_s cn58xxp1;
+};
+
+typedef union cvmx_npi_highp_ibuff_saddr cvmx_npi_highp_ibuff_saddr_t;
+
+/**
+ * cvmx_npi_input_control
+ *
+ * NPI_INPUT_CONTROL = NPI's Input Control Register
+ *
+ * Control for reads for gather list and instructions.
+ */
+union cvmx_npi_input_control {
+	u64 u64;
+	struct cvmx_npi_input_control_s {
+		u64 reserved_23_63 : 41;
+		u64 pkt_rr : 1;
+		u64 pbp_dhi : 13;
+		u64 d_nsr : 1;
+		u64 d_esr : 2;
+		u64 d_ror : 1;
+		u64 use_csr : 1;
+		u64 nsr : 1;
+		u64 esr : 2;
+		u64 ror : 1;
+	} s;
+	struct cvmx_npi_input_control_cn30xx {
+		u64 reserved_22_63 : 42;
+		u64 pbp_dhi : 13;
+		u64 d_nsr : 1;
+		u64 d_esr : 2;
+		u64 d_ror : 1;
+		u64 use_csr : 1;
+		u64 nsr : 1;
+		u64 esr : 2;
+		u64 ror : 1;
+	} cn30xx;
+	struct cvmx_npi_input_control_cn30xx cn31xx;
+	struct cvmx_npi_input_control_s cn38xx;
+	struct cvmx_npi_input_control_cn30xx cn38xxp2;
+	struct cvmx_npi_input_control_s cn50xx;
+	struct cvmx_npi_input_control_s cn58xx;
+	struct cvmx_npi_input_control_s cn58xxp1;
+};
+
+typedef union cvmx_npi_input_control cvmx_npi_input_control_t;
+
+/**
+ * cvmx_npi_int_enb
+ *
+ * NPI_INTERRUPT_ENB = NPI's Interrupt Enable Register
+ *
+ * Used to enable the various interrupting conditions of NPI
+ */
+union cvmx_npi_int_enb {
+	u64 u64;
+	struct cvmx_npi_int_enb_s {
+		u64 reserved_62_63 : 2;
+		u64 q1_a_f : 1;
+		u64 q1_s_e : 1;
+		u64 pdf_p_f : 1;
+		u64 pdf_p_e : 1;
+		u64 pcf_p_f : 1;
+		u64 pcf_p_e : 1;
+		u64 rdx_s_e : 1;
+		u64 rwx_s_e : 1;
+		u64 pnc_a_f : 1;
+		u64 pnc_s_e : 1;
+		u64 com_a_f : 1;
+		u64 com_s_e : 1;
+		u64 q3_a_f : 1;
+		u64 q3_s_e : 1;
+		u64 q2_a_f : 1;
+		u64 q2_s_e : 1;
+		u64 pcr_a_f : 1;
+		u64 pcr_s_e : 1;
+		u64 fcr_a_f : 1;
+		u64 fcr_s_e : 1;
+		u64 iobdma : 1;
+		u64 p_dperr : 1;
+		u64 win_rto : 1;
+		u64 i3_pperr : 1;
+		u64 i2_pperr : 1;
+		u64 i1_pperr : 1;
+		u64 i0_pperr : 1;
+		u64 p3_ptout : 1;
+		u64 p2_ptout : 1;
+		u64 p1_ptout : 1;
+		u64 p0_ptout : 1;
+		u64 p3_pperr : 1;
+		u64 p2_pperr : 1;
+		u64 p1_pperr : 1;
+		u64 p0_pperr : 1;
+		u64 g3_rtout : 1;
+		u64 g2_rtout : 1;
+		u64 g1_rtout : 1;
+		u64 g0_rtout : 1;
+		u64 p3_perr : 1;
+		u64 p2_perr : 1;
+		u64 p1_perr : 1;
+		u64 p0_perr : 1;
+		u64 p3_rtout : 1;
+		u64 p2_rtout : 1;
+		u64 p1_rtout : 1;
+		u64 p0_rtout : 1;
+		u64 i3_overf : 1;
+		u64 i2_overf : 1;
+		u64 i1_overf : 1;
+		u64 i0_overf : 1;
+		u64 i3_rtout : 1;
+		u64 i2_rtout : 1;
+		u64 i1_rtout : 1;
+		u64 i0_rtout : 1;
+		u64 po3_2sml : 1;
+		u64 po2_2sml : 1;
+		u64 po1_2sml : 1;
+		u64 po0_2sml : 1;
+		u64 pci_rsl : 1;
+		u64 rml_wto : 1;
+		u64 rml_rto : 1;
+	} s;
+	struct cvmx_npi_int_enb_cn30xx {
+		u64 reserved_62_63 : 2;
+		u64 q1_a_f : 1;
+		u64 q1_s_e : 1;
+		u64 pdf_p_f : 1;
+		u64 pdf_p_e : 1;
+		u64 pcf_p_f : 1;
+		u64 pcf_p_e : 1;
+		u64 rdx_s_e : 1;
+		u64 rwx_s_e : 1;
+		u64 pnc_a_f : 1;
+		u64 pnc_s_e : 1;
+		u64 com_a_f : 1;
+		u64 com_s_e : 1;
+		u64 q3_a_f : 1;
+		u64 q3_s_e : 1;
+		u64 q2_a_f : 1;
+		u64 q2_s_e : 1;
+		u64 pcr_a_f : 1;
+		u64 pcr_s_e : 1;
+		u64 fcr_a_f : 1;
+		u64 fcr_s_e : 1;
+		u64 iobdma : 1;
+		u64 p_dperr : 1;
+		u64 win_rto : 1;
+		u64 reserved_36_38 : 3;
+		u64 i0_pperr : 1;
+		u64 reserved_32_34 : 3;
+		u64 p0_ptout : 1;
+		u64 reserved_28_30 : 3;
+		u64 p0_pperr : 1;
+		u64 reserved_24_26 : 3;
+		u64 g0_rtout : 1;
+		u64 reserved_20_22 : 3;
+		u64 p0_perr : 1;
+		u64 reserved_16_18 : 3;
+		u64 p0_rtout : 1;
+		u64 reserved_12_14 : 3;
+		u64 i0_overf : 1;
+		u64 reserved_8_10 : 3;
+		u64 i0_rtout : 1;
+		u64 reserved_4_6 : 3;
+		u64 po0_2sml : 1;
+		u64 pci_rsl : 1;
+		u64 rml_wto : 1;
+		u64 rml_rto : 1;
+	} cn30xx;
+	struct cvmx_npi_int_enb_cn31xx {
+		u64 reserved_62_63 : 2;
+		u64 q1_a_f : 1;
+		u64 q1_s_e : 1;
+		u64 pdf_p_f : 1;
+		u64 pdf_p_e : 1;
+		u64 pcf_p_f : 1;
+		u64 pcf_p_e : 1;
+		u64 rdx_s_e : 1;
+		u64 rwx_s_e : 1;
+		u64 pnc_a_f : 1;
+		u64 pnc_s_e : 1;
+		u64 com_a_f : 1;
+		u64 com_s_e : 1;
+		u64 q3_a_f : 1;
+		u64 q3_s_e : 1;
+		u64 q2_a_f : 1;
+		u64 q2_s_e : 1;
+		u64 pcr_a_f : 1;
+		u64 pcr_s_e : 1;
+		u64 fcr_a_f : 1;
+		u64 fcr_s_e : 1;
+		u64 iobdma : 1;
+		u64 p_dperr : 1;
+		u64 win_rto : 1;
+		u64 reserved_37_38 : 2;
+		u64 i1_pperr : 1;
+		u64 i0_pperr : 1;
+		u64 reserved_33_34 : 2;
+		u64 p1_ptout : 1;
+		u64 p0_ptout : 1;
+		u64 reserved_29_30 : 2;
+		u64 p1_pperr : 1;
+		u64 p0_pperr : 1;
+		u64 reserved_25_26 : 2;
+		u64 g1_rtout : 1;
+		u64 g0_rtout : 1;
+		u64 reserved_21_22 : 2;
+		u64 p1_perr : 1;
+		u64 p0_perr : 1;
+		u64 reserved_17_18 : 2;
+		u64 p1_rtout : 1;
+		u64 p0_rtout : 1;
+		u64 reserved_13_14 : 2;
+		u64 i1_overf : 1;
+		u64 i0_overf : 1;
+		u64 reserved_9_10 : 2;
+		u64 i1_rtout : 1;
+		u64 i0_rtout : 1;
+		u64 reserved_5_6 : 2;
+		u64 po1_2sml : 1;
+		u64 po0_2sml : 1;
+		u64 pci_rsl : 1;
+		u64 rml_wto : 1;
+		u64 rml_rto : 1;
+	} cn31xx;
+	struct cvmx_npi_int_enb_s cn38xx;
+	struct cvmx_npi_int_enb_cn38xxp2 {
+		u64 reserved_42_63 : 22;
+		u64 iobdma : 1;
+		u64 p_dperr : 1;
+		u64 win_rto : 1;
+		u64 i3_pperr : 1;
+		u64 i2_pperr : 1;
+		u64 i1_pperr : 1;
+		u64 i0_pperr : 1;
+		u64 p3_ptout : 1;
+		u64 p2_ptout : 1;
+		u64 p1_ptout : 1;
+		u64 p0_ptout : 1;
+		u64 p3_pperr : 1;
+		u64 p2_pperr : 1;
+		u64 p1_pperr : 1;
+		u64 p0_pperr : 1;
+		u64 g3_rtout : 1;
+		u64 g2_rtout : 1;
+		u64 g1_rtout : 1;
+		u64 g0_rtout : 1;
+		u64 p3_perr : 1;
+		u64 p2_perr : 1;
+		u64 p1_perr : 1;
+		u64 p0_perr : 1;
+		u64 p3_rtout : 1;
+		u64 p2_rtout : 1;
+		u64 p1_rtout : 1;
+		u64 p0_rtout : 1;
+		u64 i3_overf : 1;
+		u64 i2_overf : 1;
+		u64 i1_overf : 1;
+		u64 i0_overf : 1;
+		u64 i3_rtout : 1;
+		u64 i2_rtout : 1;
+		u64 i1_rtout : 1;
+		u64 i0_rtout : 1;
+		u64 po3_2sml : 1;
+		u64 po2_2sml : 1;
+		u64 po1_2sml : 1;
+		u64 po0_2sml : 1;
+		u64 pci_rsl : 1;
+		u64 rml_wto : 1;
+		u64 rml_rto : 1;
+	} cn38xxp2;
+	struct cvmx_npi_int_enb_cn31xx cn50xx;
+	struct cvmx_npi_int_enb_s cn58xx;
+	struct cvmx_npi_int_enb_s cn58xxp1;
+};
+
+typedef union cvmx_npi_int_enb cvmx_npi_int_enb_t;
+
+/**
+ * cvmx_npi_int_sum
+ *
+ * NPI_INTERRUPT_SUM = NPI Interrupt Summary Register
+ *
+ * Set when an interrupt condition occurs, write '1' to clear.
+ */
+union cvmx_npi_int_sum {
+	u64 u64;
+	struct cvmx_npi_int_sum_s {
+		u64 reserved_62_63 : 2;
+		u64 q1_a_f : 1;
+		u64 q1_s_e : 1;
+		u64 pdf_p_f : 1;
+		u64 pdf_p_e : 1;
+		u64 pcf_p_f : 1;
+		u64 pcf_p_e : 1;
+		u64 rdx_s_e : 1;
+		u64 rwx_s_e : 1;
+		u64 pnc_a_f : 1;
+		u64 pnc_s_e : 1;
+		u64 com_a_f : 1;
+		u64 com_s_e : 1;
+		u64 q3_a_f : 1;
+		u64 q3_s_e : 1;
+		u64 q2_a_f : 1;
+		u64 q2_s_e : 1;
+		u64 pcr_a_f : 1;
+		u64 pcr_s_e : 1;
+		u64 fcr_a_f : 1;
+		u64 fcr_s_e : 1;
+		u64 iobdma : 1;
+		u64 p_dperr : 1;
+		u64 win_rto : 1;
+		u64 i3_pperr : 1;
+		u64 i2_pperr : 1;
+		u64 i1_pperr : 1;
+		u64 i0_pperr : 1;
+		u64 p3_ptout : 1;
+		u64 p2_ptout : 1;
+		u64 p1_ptout : 1;
+		u64 p0_ptout : 1;
+		u64 p3_pperr : 1;
+		u64 p2_pperr : 1;
+		u64 p1_pperr : 1;
+		u64 p0_pperr : 1;
+		u64 g3_rtout : 1;
+		u64 g2_rtout : 1;
+		u64 g1_rtout : 1;
+		u64 g0_rtout : 1;
+		u64 p3_perr : 1;
+		u64 p2_perr : 1;
+		u64 p1_perr : 1;
+		u64 p0_perr : 1;
+		u64 p3_rtout : 1;
+		u64 p2_rtout : 1;
+		u64 p1_rtout : 1;
+		u64 p0_rtout : 1;
+		u64 i3_overf : 1;
+		u64 i2_overf : 1;
+		u64 i1_overf : 1;
+		u64 i0_overf : 1;
+		u64 i3_rtout : 1;
+		u64 i2_rtout : 1;
+		u64 i1_rtout : 1;
+		u64 i0_rtout : 1;
+		u64 po3_2sml : 1;
+		u64 po2_2sml : 1;
+		u64 po1_2sml : 1;
+		u64 po0_2sml : 1;
+		u64 pci_rsl : 1;
+		u64 rml_wto : 1;
+		u64 rml_rto : 1;
+	} s;
+	struct cvmx_npi_int_sum_cn30xx {
+		u64 reserved_62_63 : 2;
+		u64 q1_a_f : 1;
+		u64 q1_s_e : 1;
+		u64 pdf_p_f : 1;
+		u64 pdf_p_e : 1;
+		u64 pcf_p_f : 1;
+		u64 pcf_p_e : 1;
+		u64 rdx_s_e : 1;
+		u64 rwx_s_e : 1;
+		u64 pnc_a_f : 1;
+		u64 pnc_s_e : 1;
+		u64 com_a_f : 1;
+		u64 com_s_e : 1;
+		u64 q3_a_f : 1;
+		u64 q3_s_e : 1;
+		u64 q2_a_f : 1;
+		u64 q2_s_e : 1;
+		u64 pcr_a_f : 1;
+		u64 pcr_s_e : 1;
+		u64 fcr_a_f : 1;
+		u64 fcr_s_e : 1;
+		u64 iobdma : 1;
+		u64 p_dperr : 1;
+		u64 win_rto : 1;
+		u64 reserved_36_38 : 3;
+		u64 i0_pperr : 1;
+		u64 reserved_32_34 : 3;
+		u64 p0_ptout : 1;
+		u64 reserved_28_30 : 3;
+		u64 p0_pperr : 1;
+		u64 reserved_24_26 : 3;
+		u64 g0_rtout : 1;
+		u64 reserved_20_22 : 3;
+		u64 p0_perr : 1;
+		u64 reserved_16_18 : 3;
+		u64 p0_rtout : 1;
+		u64 reserved_12_14 : 3;
+		u64 i0_overf : 1;
+		u64 reserved_8_10 : 3;
+		u64 i0_rtout : 1;
+		u64 reserved_4_6 : 3;
+		u64 po0_2sml : 1;
+		u64 pci_rsl : 1;
+		u64 rml_wto : 1;
+		u64 rml_rto : 1;
+	} cn30xx;
+	struct cvmx_npi_int_sum_cn31xx {
+		u64 reserved_62_63 : 2;
+		u64 q1_a_f : 1;
+		u64 q1_s_e : 1;
+		u64 pdf_p_f : 1;
+		u64 pdf_p_e : 1;
+		u64 pcf_p_f : 1;
+		u64 pcf_p_e : 1;
+		u64 rdx_s_e : 1;
+		u64 rwx_s_e : 1;
+		u64 pnc_a_f : 1;
+		u64 pnc_s_e : 1;
+		u64 com_a_f : 1;
+		u64 com_s_e : 1;
+		u64 q3_a_f : 1;
+		u64 q3_s_e : 1;
+		u64 q2_a_f : 1;
+		u64 q2_s_e : 1;
+		u64 pcr_a_f : 1;
+		u64 pcr_s_e : 1;
+		u64 fcr_a_f : 1;
+		u64 fcr_s_e : 1;
+		u64 iobdma : 1;
+		u64 p_dperr : 1;
+		u64 win_rto : 1;
+		u64 reserved_37_38 : 2;
+		u64 i1_pperr : 1;
+		u64 i0_pperr : 1;
+		u64 reserved_33_34 : 2;
+		u64 p1_ptout : 1;
+		u64 p0_ptout : 1;
+		u64 reserved_29_30 : 2;
+		u64 p1_pperr : 1;
+		u64 p0_pperr : 1;
+		u64 reserved_25_26 : 2;
+		u64 g1_rtout : 1;
+		u64 g0_rtout : 1;
+		u64 reserved_21_22 : 2;
+		u64 p1_perr : 1;
+		u64 p0_perr : 1;
+		u64 reserved_17_18 : 2;
+		u64 p1_rtout : 1;
+		u64 p0_rtout : 1;
+		u64 reserved_13_14 : 2;
+		u64 i1_overf : 1;
+		u64 i0_overf : 1;
+		u64 reserved_9_10 : 2;
+		u64 i1_rtout : 1;
+		u64 i0_rtout : 1;
+		u64 reserved_5_6 : 2;
+		u64 po1_2sml : 1;
+		u64 po0_2sml : 1;
+		u64 pci_rsl : 1;
+		u64 rml_wto : 1;
+		u64 rml_rto : 1;
+	} cn31xx;
+	struct cvmx_npi_int_sum_s cn38xx;
+	struct cvmx_npi_int_sum_cn38xxp2 {
+		u64 reserved_42_63 : 22;
+		u64 iobdma : 1;
+		u64 p_dperr : 1;
+		u64 win_rto : 1;
+		u64 i3_pperr : 1;
+		u64 i2_pperr : 1;
+		u64 i1_pperr : 1;
+		u64 i0_pperr : 1;
+		u64 p3_ptout : 1;
+		u64 p2_ptout : 1;
+		u64 p1_ptout : 1;
+		u64 p0_ptout : 1;
+		u64 p3_pperr : 1;
+		u64 p2_pperr : 1;
+		u64 p1_pperr : 1;
+		u64 p0_pperr : 1;
+		u64 g3_rtout : 1;
+		u64 g2_rtout : 1;
+		u64 g1_rtout : 1;
+		u64 g0_rtout : 1;
+		u64 p3_perr : 1;
+		u64 p2_perr : 1;
+		u64 p1_perr : 1;
+		u64 p0_perr : 1;
+		u64 p3_rtout : 1;
+		u64 p2_rtout : 1;
+		u64 p1_rtout : 1;
+		u64 p0_rtout : 1;
+		u64 i3_overf : 1;
+		u64 i2_overf : 1;
+		u64 i1_overf : 1;
+		u64 i0_overf : 1;
+		u64 i3_rtout : 1;
+		u64 i2_rtout : 1;
+		u64 i1_rtout : 1;
+		u64 i0_rtout : 1;
+		u64 po3_2sml : 1;
+		u64 po2_2sml : 1;
+		u64 po1_2sml : 1;
+		u64 po0_2sml : 1;
+		u64 pci_rsl : 1;
+		u64 rml_wto : 1;
+		u64 rml_rto : 1;
+	} cn38xxp2;
+	struct cvmx_npi_int_sum_cn31xx cn50xx;
+	struct cvmx_npi_int_sum_s cn58xx;
+	struct cvmx_npi_int_sum_s cn58xxp1;
+};
+
+typedef union cvmx_npi_int_sum cvmx_npi_int_sum_t;
+
+/**
+ * cvmx_npi_lowp_dbell
+ *
+ * NPI_LOWP_DBELL = Low Priority Door Bell
+ *
+ * The door bell register for the low priority DMA queue.
+ */
+union cvmx_npi_lowp_dbell {
+	u64 u64;
+	struct cvmx_npi_lowp_dbell_s {
+		u64 reserved_16_63 : 48;
+		u64 dbell : 16;
+	} s;
+	struct cvmx_npi_lowp_dbell_s cn30xx;
+	struct cvmx_npi_lowp_dbell_s cn31xx;
+	struct cvmx_npi_lowp_dbell_s cn38xx;
+	struct cvmx_npi_lowp_dbell_s cn38xxp2;
+	struct cvmx_npi_lowp_dbell_s cn50xx;
+	struct cvmx_npi_lowp_dbell_s cn58xx;
+	struct cvmx_npi_lowp_dbell_s cn58xxp1;
+};
+
+typedef union cvmx_npi_lowp_dbell cvmx_npi_lowp_dbell_t;
+
+/**
+ * cvmx_npi_lowp_ibuff_saddr
+ *
+ * NPI_LOWP_IBUFF_SADDR = DMA Low Priority's Instruction Buffer Starting Address
+ *
+ * The address to start reading Instructions from for LOWP.
+ */
+union cvmx_npi_lowp_ibuff_saddr {
+	u64 u64;
+	struct cvmx_npi_lowp_ibuff_saddr_s {
+		u64 reserved_36_63 : 28;
+		u64 saddr : 36;
+	} s;
+	struct cvmx_npi_lowp_ibuff_saddr_s cn30xx;
+	struct cvmx_npi_lowp_ibuff_saddr_s cn31xx;
+	struct cvmx_npi_lowp_ibuff_saddr_s cn38xx;
+	struct cvmx_npi_lowp_ibuff_saddr_s cn38xxp2;
+	struct cvmx_npi_lowp_ibuff_saddr_s cn50xx;
+	struct cvmx_npi_lowp_ibuff_saddr_s cn58xx;
+	struct cvmx_npi_lowp_ibuff_saddr_s cn58xxp1;
+};
+
+typedef union cvmx_npi_lowp_ibuff_saddr cvmx_npi_lowp_ibuff_saddr_t;
+
+/**
+ * cvmx_npi_mem_access_subid#
+ *
+ * NPI_MEM_ACCESS_SUBID3 = Memory Access SubId 3Register
+ *
+ * Carries Read/Write parameters for PP access to PCI memory that use NPI SubId3.
+ * Writes to this register are not ordered with writes/reads to the PCI Memory space.
+ * To ensure that a write has completed the user must read the register before
+ * making an access(i.e. PCI memory space) that requires the value of this register to be updated.
+ */
+union cvmx_npi_mem_access_subidx {
+	u64 u64;
+	struct cvmx_npi_mem_access_subidx_s {
+		u64 reserved_38_63 : 26;
+		u64 shortl : 1;
+		u64 nmerge : 1;
+		u64 esr : 2;
+		u64 esw : 2;
+		u64 nsr : 1;
+		u64 nsw : 1;
+		u64 ror : 1;
+		u64 row : 1;
+		u64 ba : 28;
+	} s;
+	struct cvmx_npi_mem_access_subidx_s cn30xx;
+	struct cvmx_npi_mem_access_subidx_cn31xx {
+		u64 reserved_36_63 : 28;
+		u64 esr : 2;
+		u64 esw : 2;
+		u64 nsr : 1;
+		u64 nsw : 1;
+		u64 ror : 1;
+		u64 row : 1;
+		u64 ba : 28;
+	} cn31xx;
+	struct cvmx_npi_mem_access_subidx_s cn38xx;
+	struct cvmx_npi_mem_access_subidx_cn31xx cn38xxp2;
+	struct cvmx_npi_mem_access_subidx_s cn50xx;
+	struct cvmx_npi_mem_access_subidx_s cn58xx;
+	struct cvmx_npi_mem_access_subidx_s cn58xxp1;
+};
+
+typedef union cvmx_npi_mem_access_subidx cvmx_npi_mem_access_subidx_t;
+
+/**
+ * cvmx_npi_msi_rcv
+ *
+ * NPI_MSI_RCV = NPI MSI Receive Vector Register
+ *
+ * A bit is set in this register relative to the vector received during a MSI. And cleared by a W1 to the register.
+ */
+union cvmx_npi_msi_rcv {
+	u64 u64;
+	struct cvmx_npi_msi_rcv_s {
+		u64 int_vec : 64;
+	} s;
+	struct cvmx_npi_msi_rcv_s cn30xx;
+	struct cvmx_npi_msi_rcv_s cn31xx;
+	struct cvmx_npi_msi_rcv_s cn38xx;
+	struct cvmx_npi_msi_rcv_s cn38xxp2;
+	struct cvmx_npi_msi_rcv_s cn50xx;
+	struct cvmx_npi_msi_rcv_s cn58xx;
+	struct cvmx_npi_msi_rcv_s cn58xxp1;
+};
+
+typedef union cvmx_npi_msi_rcv cvmx_npi_msi_rcv_t;
+
+/**
+ * cvmx_npi_num_desc_output#
+ *
+ * NUM_DESC_OUTPUT0 = Number Of Descriptors Available For Output 0
+ *
+ * The size of the Buffer/Info Pointer Pair ring for Output-0.
+ */
+union cvmx_npi_num_desc_outputx {
+	u64 u64;
+	struct cvmx_npi_num_desc_outputx_s {
+		u64 reserved_32_63 : 32;
+		u64 size : 32;
+	} s;
+	struct cvmx_npi_num_desc_outputx_s cn30xx;
+	struct cvmx_npi_num_desc_outputx_s cn31xx;
+	struct cvmx_npi_num_desc_outputx_s cn38xx;
+	struct cvmx_npi_num_desc_outputx_s cn38xxp2;
+	struct cvmx_npi_num_desc_outputx_s cn50xx;
+	struct cvmx_npi_num_desc_outputx_s cn58xx;
+	struct cvmx_npi_num_desc_outputx_s cn58xxp1;
+};
+
+typedef union cvmx_npi_num_desc_outputx cvmx_npi_num_desc_outputx_t;
+
+/**
+ * cvmx_npi_output_control
+ *
+ * NPI_OUTPUT_CONTROL = NPI's Output Control Register
+ *
+ * The address to start reading Instructions from for Output-3.
+ */
+union cvmx_npi_output_control {
+	u64 u64;
+	struct cvmx_npi_output_control_s {
+		u64 reserved_49_63 : 15;
+		u64 pkt_rr : 1;
+		u64 p3_bmode : 1;
+		u64 p2_bmode : 1;
+		u64 p1_bmode : 1;
+		u64 p0_bmode : 1;
+		u64 o3_es : 2;
+		u64 o3_ns : 1;
+		u64 o3_ro : 1;
+		u64 o2_es : 2;
+		u64 o2_ns : 1;
+		u64 o2_ro : 1;
+		u64 o1_es : 2;
+		u64 o1_ns : 1;
+		u64 o1_ro : 1;
+		u64 o0_es : 2;
+		u64 o0_ns : 1;
+		u64 o0_ro : 1;
+		u64 o3_csrm : 1;
+		u64 o2_csrm : 1;
+		u64 o1_csrm : 1;
+		u64 o0_csrm : 1;
+		u64 reserved_20_23 : 4;
+		u64 iptr_o3 : 1;
+		u64 iptr_o2 : 1;
+		u64 iptr_o1 : 1;
+		u64 iptr_o0 : 1;
+		u64 esr_sl3 : 2;
+		u64 nsr_sl3 : 1;
+		u64 ror_sl3 : 1;
+		u64 esr_sl2 : 2;
+		u64 nsr_sl2 : 1;
+		u64 ror_sl2 : 1;
+		u64 esr_sl1 : 2;
+		u64 nsr_sl1 : 1;
+		u64 ror_sl1 : 1;
+		u64 esr_sl0 : 2;
+		u64 nsr_sl0 : 1;
+		u64 ror_sl0 : 1;
+	} s;
+	struct cvmx_npi_output_control_cn30xx {
+		u64 reserved_45_63 : 19;
+		u64 p0_bmode : 1;
+		u64 reserved_32_43 : 12;
+		u64 o0_es : 2;
+		u64 o0_ns : 1;
+		u64 o0_ro : 1;
+		u64 reserved_25_27 : 3;
+		u64 o0_csrm : 1;
+		u64 reserved_17_23 : 7;
+		u64 iptr_o0 : 1;
+		u64 reserved_4_15 : 12;
+		u64 esr_sl0 : 2;
+		u64 nsr_sl0 : 1;
+		u64 ror_sl0 : 1;
+	} cn30xx;
+	struct cvmx_npi_output_control_cn31xx {
+		u64 reserved_46_63 : 18;
+		u64 p1_bmode : 1;
+		u64 p0_bmode : 1;
+		u64 reserved_36_43 : 8;
+		u64 o1_es : 2;
+		u64 o1_ns : 1;
+		u64 o1_ro : 1;
+		u64 o0_es : 2;
+		u64 o0_ns : 1;
+		u64 o0_ro : 1;
+		u64 reserved_26_27 : 2;
+		u64 o1_csrm : 1;
+		u64 o0_csrm : 1;
+		u64 reserved_18_23 : 6;
+		u64 iptr_o1 : 1;
+		u64 iptr_o0 : 1;
+		u64 reserved_8_15 : 8;
+		u64 esr_sl1 : 2;
+		u64 nsr_sl1 : 1;
+		u64 ror_sl1 : 1;
+		u64 esr_sl0 : 2;
+		u64 nsr_sl0 : 1;
+		u64 ror_sl0 : 1;
+	} cn31xx;
+	struct cvmx_npi_output_control_s cn38xx;
+	struct cvmx_npi_output_control_cn38xxp2 {
+		u64 reserved_48_63 : 16;
+		u64 p3_bmode : 1;
+		u64 p2_bmode : 1;
+		u64 p1_bmode : 1;
+		u64 p0_bmode : 1;
+		u64 o3_es : 2;
+		u64 o3_ns : 1;
+		u64 o3_ro : 1;
+		u64 o2_es : 2;
+		u64 o2_ns : 1;
+		u64 o2_ro : 1;
+		u64 o1_es : 2;
+		u64 o1_ns : 1;
+		u64 o1_ro : 1;
+		u64 o0_es : 2;
+		u64 o0_ns : 1;
+		u64 o0_ro : 1;
+		u64 o3_csrm : 1;
+		u64 o2_csrm : 1;
+		u64 o1_csrm : 1;
+		u64 o0_csrm : 1;
+		u64 reserved_20_23 : 4;
+		u64 iptr_o3 : 1;
+		u64 iptr_o2 : 1;
+		u64 iptr_o1 : 1;
+		u64 iptr_o0 : 1;
+		u64 esr_sl3 : 2;
+		u64 nsr_sl3 : 1;
+		u64 ror_sl3 : 1;
+		u64 esr_sl2 : 2;
+		u64 nsr_sl2 : 1;
+		u64 ror_sl2 : 1;
+		u64 esr_sl1 : 2;
+		u64 nsr_sl1 : 1;
+		u64 ror_sl1 : 1;
+		u64 esr_sl0 : 2;
+		u64 nsr_sl0 : 1;
+		u64 ror_sl0 : 1;
+	} cn38xxp2;
+	struct cvmx_npi_output_control_cn50xx {
+		u64 reserved_49_63 : 15;
+		u64 pkt_rr : 1;
+		u64 reserved_46_47 : 2;
+		u64 p1_bmode : 1;
+		u64 p0_bmode : 1;
+		u64 reserved_36_43 : 8;
+		u64 o1_es : 2;
+		u64 o1_ns : 1;
+		u64 o1_ro : 1;
+		u64 o0_es : 2;
+		u64 o0_ns : 1;
+		u64 o0_ro : 1;
+		u64 reserved_26_27 : 2;
+		u64 o1_csrm : 1;
+		u64 o0_csrm : 1;
+		u64 reserved_18_23 : 6;
+		u64 iptr_o1 : 1;
+		u64 iptr_o0 : 1;
+		u64 reserved_8_15 : 8;
+		u64 esr_sl1 : 2;
+		u64 nsr_sl1 : 1;
+		u64 ror_sl1 : 1;
+		u64 esr_sl0 : 2;
+		u64 nsr_sl0 : 1;
+		u64 ror_sl0 : 1;
+	} cn50xx;
+	struct cvmx_npi_output_control_s cn58xx;
+	struct cvmx_npi_output_control_s cn58xxp1;
+};
+
+typedef union cvmx_npi_output_control cvmx_npi_output_control_t;
+
+/**
+ * cvmx_npi_p#_dbpair_addr
+ *
+ * NPI_P0_DBPAIR_ADDR = NPI's Port-0 DATA-BUFFER Pair Next Read Address.
+ *
+ * Contains the next address to read for Port's-0 Data/Buffer Pair.
+ */
+union cvmx_npi_px_dbpair_addr {
+	u64 u64;
+	struct cvmx_npi_px_dbpair_addr_s {
+		u64 reserved_63_63 : 1;
+		u64 state : 2;
+		u64 naddr : 61;
+	} s;
+	struct cvmx_npi_px_dbpair_addr_s cn30xx;
+	struct cvmx_npi_px_dbpair_addr_s cn31xx;
+	struct cvmx_npi_px_dbpair_addr_s cn38xx;
+	struct cvmx_npi_px_dbpair_addr_s cn38xxp2;
+	struct cvmx_npi_px_dbpair_addr_s cn50xx;
+	struct cvmx_npi_px_dbpair_addr_s cn58xx;
+	struct cvmx_npi_px_dbpair_addr_s cn58xxp1;
+};
+
+typedef union cvmx_npi_px_dbpair_addr cvmx_npi_px_dbpair_addr_t;
+
+/**
+ * cvmx_npi_p#_instr_addr
+ *
+ * NPI_P0_INSTR_ADDR = NPI's Port-0 Instruction Next Read Address.
+ *
+ * Contains the next address to read for Port's-0 Instructions.
+ */
+union cvmx_npi_px_instr_addr {
+	u64 u64;
+	struct cvmx_npi_px_instr_addr_s {
+		u64 state : 3;
+		u64 naddr : 61;
+	} s;
+	struct cvmx_npi_px_instr_addr_s cn30xx;
+	struct cvmx_npi_px_instr_addr_s cn31xx;
+	struct cvmx_npi_px_instr_addr_s cn38xx;
+	struct cvmx_npi_px_instr_addr_s cn38xxp2;
+	struct cvmx_npi_px_instr_addr_s cn50xx;
+	struct cvmx_npi_px_instr_addr_s cn58xx;
+	struct cvmx_npi_px_instr_addr_s cn58xxp1;
+};
+
+typedef union cvmx_npi_px_instr_addr cvmx_npi_px_instr_addr_t;
+
+/**
+ * cvmx_npi_p#_instr_cnts
+ *
+ * NPI_P0_INSTR_CNTS = NPI's Port-0 Instruction Counts For Packets In.
+ *
+ * Used to determine the number of instruction in the NPI and to be fetched for Input-Packets.
+ */
+union cvmx_npi_px_instr_cnts {
+	u64 u64;
+	struct cvmx_npi_px_instr_cnts_s {
+		u64 reserved_38_63 : 26;
+		u64 fcnt : 6;
+		u64 avail : 32;
+	} s;
+	struct cvmx_npi_px_instr_cnts_s cn30xx;
+	struct cvmx_npi_px_instr_cnts_s cn31xx;
+	struct cvmx_npi_px_instr_cnts_s cn38xx;
+	struct cvmx_npi_px_instr_cnts_s cn38xxp2;
+	struct cvmx_npi_px_instr_cnts_s cn50xx;
+	struct cvmx_npi_px_instr_cnts_s cn58xx;
+	struct cvmx_npi_px_instr_cnts_s cn58xxp1;
+};
+
+typedef union cvmx_npi_px_instr_cnts cvmx_npi_px_instr_cnts_t;
+
+/**
+ * cvmx_npi_p#_pair_cnts
+ *
+ * NPI_P0_PAIR_CNTS = NPI's Port-0 Instruction Counts For Packets Out.
+ *
+ * Used to determine the number of instruction in the NPI and to be fetched for Output-Packets.
+ */
+union cvmx_npi_px_pair_cnts {
+	u64 u64;
+	struct cvmx_npi_px_pair_cnts_s {
+		u64 reserved_37_63 : 27;
+		u64 fcnt : 5;
+		u64 avail : 32;
+	} s;
+	struct cvmx_npi_px_pair_cnts_s cn30xx;
+	struct cvmx_npi_px_pair_cnts_s cn31xx;
+	struct cvmx_npi_px_pair_cnts_s cn38xx;
+	struct cvmx_npi_px_pair_cnts_s cn38xxp2;
+	struct cvmx_npi_px_pair_cnts_s cn50xx;
+	struct cvmx_npi_px_pair_cnts_s cn58xx;
+	struct cvmx_npi_px_pair_cnts_s cn58xxp1;
+};
+
+typedef union cvmx_npi_px_pair_cnts cvmx_npi_px_pair_cnts_t;
+
+/**
+ * cvmx_npi_pci_burst_size
+ *
+ * NPI_PCI_BURST_SIZE = NPI PCI Burst Size Register
+ *
+ * Control the number of words the NPI will attempt to read / write to/from the PCI.
+ */
+union cvmx_npi_pci_burst_size {
+	u64 u64;
+	struct cvmx_npi_pci_burst_size_s {
+		u64 reserved_14_63 : 50;
+		u64 wr_brst : 7;
+		u64 rd_brst : 7;
+	} s;
+	struct cvmx_npi_pci_burst_size_s cn30xx;
+	struct cvmx_npi_pci_burst_size_s cn31xx;
+	struct cvmx_npi_pci_burst_size_s cn38xx;
+	struct cvmx_npi_pci_burst_size_s cn38xxp2;
+	struct cvmx_npi_pci_burst_size_s cn50xx;
+	struct cvmx_npi_pci_burst_size_s cn58xx;
+	struct cvmx_npi_pci_burst_size_s cn58xxp1;
+};
+
+typedef union cvmx_npi_pci_burst_size cvmx_npi_pci_burst_size_t;
+
+/**
+ * cvmx_npi_pci_int_arb_cfg
+ *
+ * NPI_PCI_INT_ARB_CFG = Configuration For PCI Arbiter
+ *
+ * Controls operation of the Internal PCI Arbiter.  This register should
+ * only be written when PRST# is asserted.  NPI_PCI_INT_ARB_CFG[EN] should
+ * only be set when Octane is a host.
+ */
+union cvmx_npi_pci_int_arb_cfg {
+	u64 u64;
+	struct cvmx_npi_pci_int_arb_cfg_s {
+		u64 reserved_13_63 : 51;
+		u64 hostmode : 1;
+		u64 pci_ovr : 4;
+		u64 reserved_5_7 : 3;
+		u64 en : 1;
+		u64 park_mod : 1;
+		u64 park_dev : 3;
+	} s;
+	struct cvmx_npi_pci_int_arb_cfg_cn30xx {
+		u64 reserved_5_63 : 59;
+		u64 en : 1;
+		u64 park_mod : 1;
+		u64 park_dev : 3;
+	} cn30xx;
+	struct cvmx_npi_pci_int_arb_cfg_cn30xx cn31xx;
+	struct cvmx_npi_pci_int_arb_cfg_cn30xx cn38xx;
+	struct cvmx_npi_pci_int_arb_cfg_cn30xx cn38xxp2;
+	struct cvmx_npi_pci_int_arb_cfg_s cn50xx;
+	struct cvmx_npi_pci_int_arb_cfg_s cn58xx;
+	struct cvmx_npi_pci_int_arb_cfg_s cn58xxp1;
+};
+
+typedef union cvmx_npi_pci_int_arb_cfg cvmx_npi_pci_int_arb_cfg_t;
+
+/**
+ * cvmx_npi_pci_read_cmd
+ *
+ * NPI_PCI_READ_CMD = NPI PCI Read Command Register
+ *
+ * Controls the type of read command sent.
+ * Writes to this register are not ordered with writes/reads to the PCI Memory space.
+ * To ensure that a write has completed the user must read the register before
+ * making an access(i.e. PCI memory space) that requires the value of this register to be updated.
+ * Also any previously issued reads/writes to PCI memory space, still stored in the outbound
+ * FIFO will use the value of this register after it has been updated.
+ */
+union cvmx_npi_pci_read_cmd {
+	u64 u64;
+	struct cvmx_npi_pci_read_cmd_s {
+		u64 reserved_11_63 : 53;
+		u64 cmd_size : 11;
+	} s;
+	struct cvmx_npi_pci_read_cmd_s cn30xx;
+	struct cvmx_npi_pci_read_cmd_s cn31xx;
+	struct cvmx_npi_pci_read_cmd_s cn38xx;
+	struct cvmx_npi_pci_read_cmd_s cn38xxp2;
+	struct cvmx_npi_pci_read_cmd_s cn50xx;
+	struct cvmx_npi_pci_read_cmd_s cn58xx;
+	struct cvmx_npi_pci_read_cmd_s cn58xxp1;
+};
+
+typedef union cvmx_npi_pci_read_cmd cvmx_npi_pci_read_cmd_t;
+
+/**
+ * cvmx_npi_port32_instr_hdr
+ *
+ * NPI_PORT32_INSTR_HDR = NPI Port 32 Instruction Header
+ *
+ * Contains bits [62:42] of the Instruction Header for port 32.
+ */
+union cvmx_npi_port32_instr_hdr {
+	u64 u64;
+	struct cvmx_npi_port32_instr_hdr_s {
+		u64 reserved_44_63 : 20;
+		u64 pbp : 1;
+		u64 rsv_f : 5;
+		u64 rparmode : 2;
+		u64 rsv_e : 1;
+		u64 rskp_len : 7;
+		u64 rsv_d : 6;
+		u64 use_ihdr : 1;
+		u64 rsv_c : 5;
+		u64 par_mode : 2;
+		u64 rsv_b : 1;
+		u64 skp_len : 7;
+		u64 rsv_a : 6;
+	} s;
+	struct cvmx_npi_port32_instr_hdr_s cn30xx;
+	struct cvmx_npi_port32_instr_hdr_s cn31xx;
+	struct cvmx_npi_port32_instr_hdr_s cn38xx;
+	struct cvmx_npi_port32_instr_hdr_s cn38xxp2;
+	struct cvmx_npi_port32_instr_hdr_s cn50xx;
+	struct cvmx_npi_port32_instr_hdr_s cn58xx;
+	struct cvmx_npi_port32_instr_hdr_s cn58xxp1;
+};
+
+typedef union cvmx_npi_port32_instr_hdr cvmx_npi_port32_instr_hdr_t;
+
+/**
+ * cvmx_npi_port33_instr_hdr
+ *
+ * NPI_PORT33_INSTR_HDR = NPI Port 33 Instruction Header
+ *
+ * Contains bits [62:42] of the Instruction Header for port 33.
+ */
+union cvmx_npi_port33_instr_hdr {
+	u64 u64;
+	struct cvmx_npi_port33_instr_hdr_s {
+		u64 reserved_44_63 : 20;
+		u64 pbp : 1;
+		u64 rsv_f : 5;
+		u64 rparmode : 2;
+		u64 rsv_e : 1;
+		u64 rskp_len : 7;
+		u64 rsv_d : 6;
+		u64 use_ihdr : 1;
+		u64 rsv_c : 5;
+		u64 par_mode : 2;
+		u64 rsv_b : 1;
+		u64 skp_len : 7;
+		u64 rsv_a : 6;
+	} s;
+	struct cvmx_npi_port33_instr_hdr_s cn31xx;
+	struct cvmx_npi_port33_instr_hdr_s cn38xx;
+	struct cvmx_npi_port33_instr_hdr_s cn38xxp2;
+	struct cvmx_npi_port33_instr_hdr_s cn50xx;
+	struct cvmx_npi_port33_instr_hdr_s cn58xx;
+	struct cvmx_npi_port33_instr_hdr_s cn58xxp1;
+};
+
+typedef union cvmx_npi_port33_instr_hdr cvmx_npi_port33_instr_hdr_t;
+
+/**
+ * cvmx_npi_port34_instr_hdr
+ *
+ * NPI_PORT34_INSTR_HDR = NPI Port 34 Instruction Header
+ *
+ * Contains bits [62:42] of the Instruction Header for port 34. Added for PASS-2.
+ */
+union cvmx_npi_port34_instr_hdr {
+	u64 u64;
+	struct cvmx_npi_port34_instr_hdr_s {
+		u64 reserved_44_63 : 20;
+		u64 pbp : 1;
+		u64 rsv_f : 5;
+		u64 rparmode : 2;
+		u64 rsv_e : 1;
+		u64 rskp_len : 7;
+		u64 rsv_d : 6;
+		u64 use_ihdr : 1;
+		u64 rsv_c : 5;
+		u64 par_mode : 2;
+		u64 rsv_b : 1;
+		u64 skp_len : 7;
+		u64 rsv_a : 6;
+	} s;
+	struct cvmx_npi_port34_instr_hdr_s cn38xx;
+	struct cvmx_npi_port34_instr_hdr_s cn38xxp2;
+	struct cvmx_npi_port34_instr_hdr_s cn58xx;
+	struct cvmx_npi_port34_instr_hdr_s cn58xxp1;
+};
+
+typedef union cvmx_npi_port34_instr_hdr cvmx_npi_port34_instr_hdr_t;
+
+/**
+ * cvmx_npi_port35_instr_hdr
+ *
+ * NPI_PORT35_INSTR_HDR = NPI Port 35 Instruction Header
+ *
+ * Contains bits [62:42] of the Instruction Header for port 35. Added for PASS-2.
+ */
+union cvmx_npi_port35_instr_hdr {
+	u64 u64;
+	struct cvmx_npi_port35_instr_hdr_s {
+		u64 reserved_44_63 : 20;
+		u64 pbp : 1;
+		u64 rsv_f : 5;
+		u64 rparmode : 2;
+		u64 rsv_e : 1;
+		u64 rskp_len : 7;
+		u64 rsv_d : 6;
+		u64 use_ihdr : 1;
+		u64 rsv_c : 5;
+		u64 par_mode : 2;
+		u64 rsv_b : 1;
+		u64 skp_len : 7;
+		u64 rsv_a : 6;
+	} s;
+	struct cvmx_npi_port35_instr_hdr_s cn38xx;
+	struct cvmx_npi_port35_instr_hdr_s cn38xxp2;
+	struct cvmx_npi_port35_instr_hdr_s cn58xx;
+	struct cvmx_npi_port35_instr_hdr_s cn58xxp1;
+};
+
+typedef union cvmx_npi_port35_instr_hdr cvmx_npi_port35_instr_hdr_t;
+
+/**
+ * cvmx_npi_port_bp_control
+ *
+ * NPI_PORT_BP_CONTROL = Port Backpressure Control
+ *
+ * Enables Port Level Backpressure
+ */
+union cvmx_npi_port_bp_control {
+	u64 u64;
+	struct cvmx_npi_port_bp_control_s {
+		u64 reserved_8_63 : 56;
+		u64 bp_on : 4;
+		u64 enb : 4;
+	} s;
+	struct cvmx_npi_port_bp_control_s cn30xx;
+	struct cvmx_npi_port_bp_control_s cn31xx;
+	struct cvmx_npi_port_bp_control_s cn38xx;
+	struct cvmx_npi_port_bp_control_s cn38xxp2;
+	struct cvmx_npi_port_bp_control_s cn50xx;
+	struct cvmx_npi_port_bp_control_s cn58xx;
+	struct cvmx_npi_port_bp_control_s cn58xxp1;
+};
+
+typedef union cvmx_npi_port_bp_control cvmx_npi_port_bp_control_t;
+
+/**
+ * cvmx_npi_rsl_int_blocks
+ *
+ * RSL_INT_BLOCKS = RSL Interrupt Blocks Register
+ *
+ * Reading this register will return a vector with a bit set '1' for a corresponding RSL block
+ * that presently has an interrupt pending. The Field Description below supplies the name of the
+ * register that software should read to find out why that intterupt bit is set.
+ */
+union cvmx_npi_rsl_int_blocks {
+	u64 u64;
+	struct cvmx_npi_rsl_int_blocks_s {
+		u64 reserved_32_63 : 32;
+		u64 rint_31 : 1;
+		u64 iob : 1;
+		u64 reserved_28_29 : 2;
+		u64 rint_27 : 1;
+		u64 rint_26 : 1;
+		u64 rint_25 : 1;
+		u64 rint_24 : 1;
+		u64 asx1 : 1;
+		u64 asx0 : 1;
+		u64 rint_21 : 1;
+		u64 pip : 1;
+		u64 spx1 : 1;
+		u64 spx0 : 1;
+		u64 lmc : 1;
+		u64 l2c : 1;
+		u64 rint_15 : 1;
+		u64 reserved_13_14 : 2;
+		u64 pow : 1;
+		u64 tim : 1;
+		u64 pko : 1;
+		u64 ipd : 1;
+		u64 rint_8 : 1;
+		u64 zip : 1;
+		u64 dfa : 1;
+		u64 fpa : 1;
+		u64 key : 1;
+		u64 npi : 1;
+		u64 gmx1 : 1;
+		u64 gmx0 : 1;
+		u64 mio : 1;
+	} s;
+	struct cvmx_npi_rsl_int_blocks_cn30xx {
+		u64 reserved_32_63 : 32;
+		u64 rint_31 : 1;
+		u64 iob : 1;
+		u64 rint_29 : 1;
+		u64 rint_28 : 1;
+		u64 rint_27 : 1;
+		u64 rint_26 : 1;
+		u64 rint_25 : 1;
+		u64 rint_24 : 1;
+		u64 asx1 : 1;
+		u64 asx0 : 1;
+		u64 rint_21 : 1;
+		u64 pip : 1;
+		u64 spx1 : 1;
+		u64 spx0 : 1;
+		u64 lmc : 1;
+		u64 l2c : 1;
+		u64 rint_15 : 1;
+		u64 rint_14 : 1;
+		u64 usb : 1;
+		u64 pow : 1;
+		u64 tim : 1;
+		u64 pko : 1;
+		u64 ipd : 1;
+		u64 rint_8 : 1;
+		u64 zip : 1;
+		u64 dfa : 1;
+		u64 fpa : 1;
+		u64 key : 1;
+		u64 npi : 1;
+		u64 gmx1 : 1;
+		u64 gmx0 : 1;
+		u64 mio : 1;
+	} cn30xx;
+	struct cvmx_npi_rsl_int_blocks_cn30xx cn31xx;
+	struct cvmx_npi_rsl_int_blocks_cn38xx {
+		u64 reserved_32_63 : 32;
+		u64 rint_31 : 1;
+		u64 iob : 1;
+		u64 rint_29 : 1;
+		u64 rint_28 : 1;
+		u64 rint_27 : 1;
+		u64 rint_26 : 1;
+		u64 rint_25 : 1;
+		u64 rint_24 : 1;
+		u64 asx1 : 1;
+		u64 asx0 : 1;
+		u64 rint_21 : 1;
+		u64 pip : 1;
+		u64 spx1 : 1;
+		u64 spx0 : 1;
+		u64 lmc : 1;
+		u64 l2c : 1;
+		u64 rint_15 : 1;
+		u64 rint_14 : 1;
+		u64 rint_13 : 1;
+		u64 pow : 1;
+		u64 tim : 1;
+		u64 pko : 1;
+		u64 ipd : 1;
+		u64 rint_8 : 1;
+		u64 zip : 1;
+		u64 dfa : 1;
+		u64 fpa : 1;
+		u64 key : 1;
+		u64 npi : 1;
+		u64 gmx1 : 1;
+		u64 gmx0 : 1;
+		u64 mio : 1;
+	} cn38xx;
+	struct cvmx_npi_rsl_int_blocks_cn38xx cn38xxp2;
+	struct cvmx_npi_rsl_int_blocks_cn50xx {
+		u64 reserved_31_63 : 33;
+		u64 iob : 1;
+		u64 lmc1 : 1;
+		u64 agl : 1;
+		u64 reserved_24_27 : 4;
+		u64 asx1 : 1;
+		u64 asx0 : 1;
+		u64 reserved_21_21 : 1;
+		u64 pip : 1;
+		u64 spx1 : 1;
+		u64 spx0 : 1;
+		u64 lmc : 1;
+		u64 l2c : 1;
+		u64 reserved_15_15 : 1;
+		u64 rad : 1;
+		u64 usb : 1;
+		u64 pow : 1;
+		u64 tim : 1;
+		u64 pko : 1;
+		u64 ipd : 1;
+		u64 reserved_8_8 : 1;
+		u64 zip : 1;
+		u64 dfa : 1;
+		u64 fpa : 1;
+		u64 key : 1;
+		u64 npi : 1;
+		u64 gmx1 : 1;
+		u64 gmx0 : 1;
+		u64 mio : 1;
+	} cn50xx;
+	struct cvmx_npi_rsl_int_blocks_cn38xx cn58xx;
+	struct cvmx_npi_rsl_int_blocks_cn38xx cn58xxp1;
+};
+
+typedef union cvmx_npi_rsl_int_blocks cvmx_npi_rsl_int_blocks_t;
+
+/**
+ * cvmx_npi_size_input#
+ *
+ * NPI_SIZE_INPUT0 = NPI's Size for Input 0 Register
+ *
+ * The size (in instructions) of Instruction Queue-0.
+ */
+union cvmx_npi_size_inputx {
+	u64 u64;
+	struct cvmx_npi_size_inputx_s {
+		u64 reserved_32_63 : 32;
+		u64 size : 32;
+	} s;
+	struct cvmx_npi_size_inputx_s cn30xx;
+	struct cvmx_npi_size_inputx_s cn31xx;
+	struct cvmx_npi_size_inputx_s cn38xx;
+	struct cvmx_npi_size_inputx_s cn38xxp2;
+	struct cvmx_npi_size_inputx_s cn50xx;
+	struct cvmx_npi_size_inputx_s cn58xx;
+	struct cvmx_npi_size_inputx_s cn58xxp1;
+};
+
+typedef union cvmx_npi_size_inputx cvmx_npi_size_inputx_t;
+
+/**
+ * cvmx_npi_win_read_to
+ *
+ * NPI_WIN_READ_TO = NPI WINDOW READ Timeout Register
+ *
+ * Number of core clocks to wait before timing out on a WINDOW-READ to the NCB.
+ */
+union cvmx_npi_win_read_to {
+	u64 u64;
+	struct cvmx_npi_win_read_to_s {
+		u64 reserved_32_63 : 32;
+		u64 time : 32;
+	} s;
+	struct cvmx_npi_win_read_to_s cn30xx;
+	struct cvmx_npi_win_read_to_s cn31xx;
+	struct cvmx_npi_win_read_to_s cn38xx;
+	struct cvmx_npi_win_read_to_s cn38xxp2;
+	struct cvmx_npi_win_read_to_s cn50xx;
+	struct cvmx_npi_win_read_to_s cn58xx;
+	struct cvmx_npi_win_read_to_s cn58xxp1;
+};
+
+typedef union cvmx_npi_win_read_to cvmx_npi_win_read_to_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-packet.h b/arch/mips/mach-octeon/include/mach/cvmx-packet.h
new file mode 100644
index 0000000..f3cfe9c
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-packet.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Packet buffer defines.
+ */
+
+#ifndef __CVMX_PACKET_H__
+#define __CVMX_PACKET_H__
+
+union cvmx_buf_ptr_pki {
+	u64 u64;
+	struct {
+		u64 size : 16;
+		u64 packet_outside_wqe : 1;
+		u64 rsvd0 : 5;
+		u64 addr : 42;
+	};
+};
+
+typedef union cvmx_buf_ptr_pki cvmx_buf_ptr_pki_t;
+
+/**
+ * This structure defines a buffer pointer on Octeon
+ */
+union cvmx_buf_ptr {
+	void *ptr;
+	u64 u64;
+	struct {
+		u64 i : 1;
+		u64 back : 4;
+		u64 pool : 3;
+		u64 size : 16;
+		u64 addr : 40;
+	} s;
+};
+
+typedef union cvmx_buf_ptr cvmx_buf_ptr_t;
+
+#endif /*  __CVMX_PACKET_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pcie.h b/arch/mips/mach-octeon/include/mach/cvmx-pcie.h
new file mode 100644
index 0000000..a819196
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pcie.h
@@ -0,0 +1,279 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_PCIE_H__
+#define __CVMX_PCIE_H__
+
+#define CVMX_PCIE_MAX_PORTS 4
+#define CVMX_PCIE_PORTS                                                                            \
+	((OCTEON_IS_MODEL(OCTEON_CN78XX) || OCTEON_IS_MODEL(OCTEON_CN73XX)) ?                      \
+		       CVMX_PCIE_MAX_PORTS :                                                             \
+		       (OCTEON_IS_MODEL(OCTEON_CN70XX) ? 3 : 2))
+
+/*
+ * The physical memory base mapped by BAR1.  256MB at the end of the
+ * first 4GB.
+ */
+#define CVMX_PCIE_BAR1_PHYS_BASE ((1ull << 32) - (1ull << 28))
+#define CVMX_PCIE_BAR1_PHYS_SIZE BIT_ULL(28)
+
+/*
+ * The RC base of BAR1.  gen1 has a 39-bit BAR2, gen2 has 41-bit BAR2,
+ * place BAR1 so it is the same for both.
+ */
+#define CVMX_PCIE_BAR1_RC_BASE BIT_ULL(41)
+
+typedef union {
+	u64 u64;
+	struct {
+		u64 upper : 2;		 /* Normally 2 for XKPHYS */
+		u64 reserved_49_61 : 13; /* Must be zero */
+		u64 io : 1;		 /* 1 for IO space access */
+		u64 did : 5;		 /* PCIe DID = 3 */
+		u64 subdid : 3;		 /* PCIe SubDID = 1 */
+		u64 reserved_38_39 : 2;	 /* Must be zero */
+		u64 node : 2;		 /* Numa node number */
+		u64 es : 2;		 /* Endian swap = 1 */
+		u64 port : 2;		 /* PCIe port 0,1 */
+		u64 reserved_29_31 : 3;	 /* Must be zero */
+		u64 ty : 1;
+		u64 bus : 8;
+		u64 dev : 5;
+		u64 func : 3;
+		u64 reg : 12;
+	} config;
+	struct {
+		u64 upper : 2;		 /* Normally 2 for XKPHYS */
+		u64 reserved_49_61 : 13; /* Must be zero */
+		u64 io : 1;		 /* 1 for IO space access */
+		u64 did : 5;		 /* PCIe DID = 3 */
+		u64 subdid : 3;		 /* PCIe SubDID = 2 */
+		u64 reserved_38_39 : 2;	 /* Must be zero */
+		u64 node : 2;		 /* Numa node number */
+		u64 es : 2;		 /* Endian swap = 1 */
+		u64 port : 2;		 /* PCIe port 0,1 */
+		u64 address : 32;	 /* PCIe IO address */
+	} io;
+	struct {
+		u64 upper : 2;		 /* Normally 2 for XKPHYS */
+		u64 reserved_49_61 : 13; /* Must be zero */
+		u64 io : 1;		 /* 1 for IO space access */
+		u64 did : 5;		 /* PCIe DID = 3 */
+		u64 subdid : 3;		 /* PCIe SubDID = 3-6 */
+		u64 reserved_38_39 : 2;	 /* Must be zero */
+		u64 node : 2;		 /* Numa node number */
+		u64 address : 36;	 /* PCIe Mem address */
+	} mem;
+} cvmx_pcie_address_t;
+
+/**
+ * Return the Core virtual base address for PCIe IO access. IOs are
+ * read/written as an offset from this address.
+ *
+ * @param pcie_port PCIe port the IO is for
+ *
+ * @return 64bit Octeon IO base address for read/write
+ */
+u64 cvmx_pcie_get_io_base_address(int pcie_port);
+
+/**
+ * Size of the IO address region returned at address
+ * cvmx_pcie_get_io_base_address()
+ *
+ * @param pcie_port PCIe port the IO is for
+ *
+ * @return Size of the IO window
+ */
+u64 cvmx_pcie_get_io_size(int pcie_port);
+
+/**
+ * Return the Core virtual base address for PCIe MEM access. Memory is
+ * read/written as an offset from this address.
+ *
+ * @param pcie_port PCIe port the IO is for
+ *
+ * @return 64bit Octeon IO base address for read/write
+ */
+u64 cvmx_pcie_get_mem_base_address(int pcie_port);
+
+/**
+ * Size of the Mem address region returned at address
+ * cvmx_pcie_get_mem_base_address()
+ *
+ * @param pcie_port PCIe port the IO is for
+ *
+ * @return Size of the Mem window
+ */
+u64 cvmx_pcie_get_mem_size(int pcie_port);
+
+/**
+ * Initialize a PCIe port for use in host(RC) mode. It doesn't enumerate the bus.
+ *
+ * @param pcie_port PCIe port to initialize
+ *
+ * @return Zero on success
+ */
+int cvmx_pcie_rc_initialize(int pcie_port);
+
+/**
+ * Shutdown a PCIe port and put it in reset
+ *
+ * @param pcie_port PCIe port to shutdown
+ *
+ * @return Zero on success
+ */
+int cvmx_pcie_rc_shutdown(int pcie_port);
+
+/**
+ * Read 8bits from a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ *
+ * @return Result of the read
+ */
+u8 cvmx_pcie_config_read8(int pcie_port, int bus, int dev, int fn, int reg);
+
+/**
+ * Read 16bits from a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ *
+ * @return Result of the read
+ */
+u16 cvmx_pcie_config_read16(int pcie_port, int bus, int dev, int fn, int reg);
+
+/**
+ * Read 32bits from a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ *
+ * @return Result of the read
+ */
+u32 cvmx_pcie_config_read32(int pcie_port, int bus, int dev, int fn, int reg);
+
+/**
+ * Write 8bits to a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ * @param val       Value to write
+ */
+void cvmx_pcie_config_write8(int pcie_port, int bus, int dev, int fn, int reg, u8 val);
+
+/**
+ * Write 16bits to a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ * @param val       Value to write
+ */
+void cvmx_pcie_config_write16(int pcie_port, int bus, int dev, int fn, int reg, u16 val);
+
+/**
+ * Write 32bits to a Device's config space
+ *
+ * @param pcie_port PCIe port the device is on
+ * @param bus       Sub bus
+ * @param dev       Device ID
+ * @param fn        Device sub function
+ * @param reg       Register to access
+ * @param val       Value to write
+ */
+void cvmx_pcie_config_write32(int pcie_port, int bus, int dev, int fn, int reg, u32 val);
+
+/**
+ * Read a PCIe config space register indirectly. This is used for
+ * registers of the form PCIEEP_CFG??? and PCIERC?_CFG???.
+ *
+ * @param pcie_port  PCIe port to read from
+ * @param cfg_offset Address to read
+ *
+ * @return Value read
+ */
+u32 cvmx_pcie_cfgx_read(int pcie_port, u32 cfg_offset);
+u32 cvmx_pcie_cfgx_read_node(int node, int pcie_port, u32 cfg_offset);
+
+/**
+ * Write a PCIe config space register indirectly. This is used for
+ * registers of the form PCIEEP_CFG??? and PCIERC?_CFG???.
+ *
+ * @param pcie_port  PCIe port to write to
+ * @param cfg_offset Address to write
+ * @param val        Value to write
+ */
+void cvmx_pcie_cfgx_write(int pcie_port, u32 cfg_offset, u32 val);
+void cvmx_pcie_cfgx_write_node(int node, int pcie_port, u32 cfg_offset, u32 val);
+
+/**
+ * Write a 32bit value to the Octeon NPEI register space
+ *
+ * @param address Address to write to
+ * @param val     Value to write
+ */
+static inline void cvmx_pcie_npei_write32(u64 address, u32 val)
+{
+	cvmx_write64_uint32(address ^ 4, val);
+	cvmx_read64_uint32(address ^ 4);
+}
+
+/**
+ * Read a 32bit value from the Octeon NPEI register space
+ *
+ * @param address Address to read
+ * @return The result
+ */
+static inline u32 cvmx_pcie_npei_read32(u64 address)
+{
+	return cvmx_read64_uint32(address ^ 4);
+}
+
+/**
+ * Initialize a PCIe port for use in target(EP) mode.
+ *
+ * @param pcie_port PCIe port to initialize
+ *
+ * @return Zero on success
+ */
+int cvmx_pcie_ep_initialize(int pcie_port);
+
+/**
+ * Wait for posted PCIe read/writes to reach the other side of
+ * the internal PCIe switch. This will insure that core
+ * read/writes are posted before anything after this function
+ * is called. This may be necessary when writing to memory that
+ * will later be read using the DMA/PKT engines.
+ *
+ * @param pcie_port PCIe port to wait for
+ */
+void cvmx_pcie_wait_for_pending(int pcie_port);
+
+/**
+ * Returns if a PCIe port is in host or target mode.
+ *
+ * @param pcie_port PCIe port number (PEM number)
+ *
+ * @return 0 if PCIe port is in target mode, !0 if in host mode.
+ */
+int cvmx_pcie_is_host_mode(int pcie_port);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pcieepx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-pcieepx-defs.h
new file mode 100644
index 0000000..13ef599
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pcieepx-defs.h
@@ -0,0 +1,6848 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon pcieepx.
+ */
+
+#ifndef __CVMX_PCIEEPX_DEFS_H__
+#define __CVMX_PCIEEPX_DEFS_H__
+
+static inline u64 CVMX_PCIEEPX_CFG000(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000000ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000000ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000000ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000000ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000000ull;
+	}
+	return 0x0000030000000000ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG001(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000004ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000004ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000004ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000004ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000004ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000004ull;
+	}
+	return 0x0000030000000004ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG002(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000008ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000008ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000008ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000008ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000008ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000008ull;
+	}
+	return 0x0000030000000008ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG003(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000000Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000000Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000000Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000000Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000000Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000000Cull;
+	}
+	return 0x000003000000000Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG004(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000010ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000010ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000010ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000010ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000010ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000010ull;
+	}
+	return 0x0000030000000010ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG004_MASK(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000010ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000010ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030080000010ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030080000010ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000010ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000080000010ull;
+	}
+	return 0x0000030080000010ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG005(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000014ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000014ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000014ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000014ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000014ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000014ull;
+	}
+	return 0x0000030000000014ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG005_MASK(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000014ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000014ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030080000014ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030080000014ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000014ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000080000014ull;
+	}
+	return 0x0000030080000014ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG006(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000018ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000018ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000018ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000018ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000018ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000018ull;
+	}
+	return 0x0000030000000018ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG006_MASK(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000018ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000018ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030080000018ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030080000018ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000018ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000080000018ull;
+	}
+	return 0x0000030080000018ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG007(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000001Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000001Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000001Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000001Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000001Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000001Cull;
+	}
+	return 0x000003000000001Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG007_MASK(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003008000001Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003008000001Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003008000001Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003008000001Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003008000001Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000008000001Cull;
+	}
+	return 0x000003008000001Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG008(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000020ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000020ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000020ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000020ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000020ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000020ull;
+	}
+	return 0x0000030000000020ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG008_MASK(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000020ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000020ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030080000020ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030080000020ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000020ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000080000020ull;
+	}
+	return 0x0000030080000020ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG009(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000024ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000024ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000024ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000024ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000024ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000024ull;
+	}
+	return 0x0000030000000024ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG009_MASK(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000024ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000024ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030080000024ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030080000024ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000024ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000080000024ull;
+	}
+	return 0x0000030080000024ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG010(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000028ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000028ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000028ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000028ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000028ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000028ull;
+	}
+	return 0x0000030000000028ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG011(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000002Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000002Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000002Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000002Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000002Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000002Cull;
+	}
+	return 0x000003000000002Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG012(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000030ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000030ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000030ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000030ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000030ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000030ull;
+	}
+	return 0x0000030000000030ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG012_MASK(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000030ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000030ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030080000030ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030080000030ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030080000030ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000080000030ull;
+	}
+	return 0x0000030080000030ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG013(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000034ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000034ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000034ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000034ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000034ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000034ull;
+	}
+	return 0x0000030000000034ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG015(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000003Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000003Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000003Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000003Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000003Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000003Cull;
+	}
+	return 0x000003000000003Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG016(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000040ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000040ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000040ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000040ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000040ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000040ull;
+	}
+	return 0x0000030000000040ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG017(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000044ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000044ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000044ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000044ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000044ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000044ull;
+	}
+	return 0x0000030000000044ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG020(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000050ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000050ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000050ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000050ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000050ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000050ull;
+	}
+	return 0x0000030000000050ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG021(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000054ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000054ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000054ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000054ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000054ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000054ull;
+	}
+	return 0x0000030000000054ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG022(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000058ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000058ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000058ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000058ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000058ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000058ull;
+	}
+	return 0x0000030000000058ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG023(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000005Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000005Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000005Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000005Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000005Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000005Cull;
+	}
+	return 0x000003000000005Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG024(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000060ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000060ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000060ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000060ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000060ull + (offset) * 0x100000000ull;
+	}
+	return 0x0000030000000060ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG025(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000064ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000064ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000064ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000064ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000064ull + (offset) * 0x100000000ull;
+	}
+	return 0x0000030000000064ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG028(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000070ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000070ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000070ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000070ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000070ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000070ull;
+	}
+	return 0x0000030000000070ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG029(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000074ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000074ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000074ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000074ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000074ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000074ull;
+	}
+	return 0x0000030000000074ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG030(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000078ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000078ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000078ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000078ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000078ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000078ull;
+	}
+	return 0x0000030000000078ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG031(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000007Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000007Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000007Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000007Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000007Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000007Cull;
+	}
+	return 0x000003000000007Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG032(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000080ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000080ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000080ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000080ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000080ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000080ull;
+	}
+	return 0x0000030000000080ull;
+}
+
+#define CVMX_PCIEEPX_CFG033(offset) (0x0000000000000084ull)
+#define CVMX_PCIEEPX_CFG034(offset) (0x0000000000000088ull)
+static inline u64 CVMX_PCIEEPX_CFG037(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000094ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000094ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000094ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000094ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000094ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000094ull;
+	}
+	return 0x0000030000000094ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG038(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000098ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000098ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000098ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000098ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000098ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000098ull;
+	}
+	return 0x0000030000000098ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG039(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000009Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000009Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000009Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000009Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000009Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000009Cull;
+	}
+	return 0x000003000000009Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG040(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000000A0ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000000A0ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000000A0ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000000A0ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000000A0ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000000A0ull;
+	}
+	return 0x00000300000000A0ull;
+}
+
+#define CVMX_PCIEEPX_CFG041(offset) (0x00000000000000A4ull)
+#define CVMX_PCIEEPX_CFG042(offset) (0x00000000000000A8ull)
+static inline u64 CVMX_PCIEEPX_CFG044(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000000B0ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000000B0ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000000B0ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000000B0ull;
+	}
+	return 0x00000300000000B0ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG045(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000000B4ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000000B4ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000000B4ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000000B4ull;
+	}
+	return 0x00000300000000B4ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG046(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000000B8ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000000B8ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000000B8ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000000B8ull;
+	}
+	return 0x00000300000000B8ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG064(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000100ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000100ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000100ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000100ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000100ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000100ull;
+	}
+	return 0x0000030000000100ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG065(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000104ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000104ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000104ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000104ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000104ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000104ull;
+	}
+	return 0x0000030000000104ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG066(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000108ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000108ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000108ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000108ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000108ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000108ull;
+	}
+	return 0x0000030000000108ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG067(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000010Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000010Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000010Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000010Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000010Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000010Cull;
+	}
+	return 0x000003000000010Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG068(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000110ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000110ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000110ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000110ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000110ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000110ull;
+	}
+	return 0x0000030000000110ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG069(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000114ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000114ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000114ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000114ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000114ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000114ull;
+	}
+	return 0x0000030000000114ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG070(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000118ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000118ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000118ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000118ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000118ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000118ull;
+	}
+	return 0x0000030000000118ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG071(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000011Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000011Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000011Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000011Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000011Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000011Cull;
+	}
+	return 0x000003000000011Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG072(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000120ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000120ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000120ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000120ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000120ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000120ull;
+	}
+	return 0x0000030000000120ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG073(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000124ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000124ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000124ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000124ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000124ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000124ull;
+	}
+	return 0x0000030000000124ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG074(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000128ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000128ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000128ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000128ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000128ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000128ull;
+	}
+	return 0x0000030000000128ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG078(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000138ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000138ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000138ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000138ull;
+	}
+	return 0x0000030000000138ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG082(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000148ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000148ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000148ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000148ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000148ull + (offset) * 0x100000000ull;
+	}
+	return 0x0000030000000148ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG083(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000014Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000014Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000014Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000014Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000014Cull + (offset) * 0x100000000ull;
+	}
+	return 0x000003000000014Cull;
+}
+
+#define CVMX_PCIEEPX_CFG084(offset) (0x0000030000000150ull + ((offset) & 3) * 0x100000000ull)
+static inline u64 CVMX_PCIEEPX_CFG086(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000158ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000158ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000158ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000158ull;
+	}
+	return 0x0000030000000158ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG087(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000015Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000015Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000015Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000015Cull;
+	}
+	return 0x000003000000015Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG088(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000160ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000160ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000160ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000160ull;
+	}
+	return 0x0000030000000160ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG089(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000164ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000164ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000164ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000164ull;
+	}
+	return 0x0000030000000164ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG090(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000168ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000168ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000168ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000168ull;
+	}
+	return 0x0000030000000168ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG091(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000016Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000016Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000016Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000016Cull;
+	}
+	return 0x000003000000016Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG092(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000170ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000170ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000170ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000170ull;
+	}
+	return 0x0000030000000170ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG094(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000178ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000178ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000178ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000178ull;
+	}
+	return 0x0000030000000178ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG095(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000017Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000017Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000017Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000017Cull;
+	}
+	return 0x000003000000017Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG096(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000180ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000180ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000180ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000180ull;
+	}
+	return 0x0000030000000180ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG097(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000184ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000184ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000184ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000184ull;
+	}
+	return 0x0000030000000184ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG098(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000188ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000188ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000188ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000188ull;
+	}
+	return 0x0000030000000188ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG099(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000018Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000018Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000018Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000018Cull;
+	}
+	return 0x000003000000018Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG100(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000190ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000190ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000190ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000190ull;
+	}
+	return 0x0000030000000190ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG101(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000194ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000194ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000194ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000194ull;
+	}
+	return 0x0000030000000194ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG102(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000198ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000198ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000198ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000198ull;
+	}
+	return 0x0000030000000198ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG103(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000019Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000019Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000019Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000019Cull;
+	}
+	return 0x000003000000019Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG104(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000001A0ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000001A0ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001A0ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001A0ull;
+	}
+	return 0x00000300000001A0ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG105(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000001A4ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000001A4ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001A4ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001A4ull;
+	}
+	return 0x00000300000001A4ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG106(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000001A8ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000001A8ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001A8ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001A8ull;
+	}
+	return 0x00000300000001A8ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG107(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000001ACull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000001ACull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001ACull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001ACull;
+	}
+	return 0x00000300000001ACull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG108(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000001B0ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000001B0ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001B0ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001B0ull;
+	}
+	return 0x00000300000001B0ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG109(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000001B4ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000001B4ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001B4ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001B4ull;
+	}
+	return 0x00000300000001B4ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG110(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000001B8ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000001B8ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001B8ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001B8ull;
+	}
+	return 0x00000300000001B8ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG111(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000001BCull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000001BCull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001BCull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001BCull;
+	}
+	return 0x00000300000001BCull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG112(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000001C0ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000001C0ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001C0ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000001C0ull;
+	}
+	return 0x00000300000001C0ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG448(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000700ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000700ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000700ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000700ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000700ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000700ull;
+	}
+	return 0x0000030000000700ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG449(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000704ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000704ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000704ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000704ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000704ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000704ull;
+	}
+	return 0x0000030000000704ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG450(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000708ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000708ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000708ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000708ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000708ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000708ull;
+	}
+	return 0x0000030000000708ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG451(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000070Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000070Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000070Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000070Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000070Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000070Cull;
+	}
+	return 0x000003000000070Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG452(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000710ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000710ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000710ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000710ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000710ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000710ull;
+	}
+	return 0x0000030000000710ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG453(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000714ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000714ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000714ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000714ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000714ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000714ull;
+	}
+	return 0x0000030000000714ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG454(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000718ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000718ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000718ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000718ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000718ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000718ull;
+	}
+	return 0x0000030000000718ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG455(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000071Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000071Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000071Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000071Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000071Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000071Cull;
+	}
+	return 0x000003000000071Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG456(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000720ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000720ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000720ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000720ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000720ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000720ull;
+	}
+	return 0x0000030000000720ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG458(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000728ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000728ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000728ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000728ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000728ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000728ull;
+	}
+	return 0x0000030000000728ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG459(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000072Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000072Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000072Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000072Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000072Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000072Cull;
+	}
+	return 0x000003000000072Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG460(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000730ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000730ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000730ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000730ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000730ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000730ull;
+	}
+	return 0x0000030000000730ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG461(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000734ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000734ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000734ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000734ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000734ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000734ull;
+	}
+	return 0x0000030000000734ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG462(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000738ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000738ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000738ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000738ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000738ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000738ull;
+	}
+	return 0x0000030000000738ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG463(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000073Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000073Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000073Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000073Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000073Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000073Cull;
+	}
+	return 0x000003000000073Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG464(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000740ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000740ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000740ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000740ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000740ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000740ull;
+	}
+	return 0x0000030000000740ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG465(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000744ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000744ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000744ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000744ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000744ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000744ull;
+	}
+	return 0x0000030000000744ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG466(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000748ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000748ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000748ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000748ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000748ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000748ull;
+	}
+	return 0x0000030000000748ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG467(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000074Cull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000074Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000074Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000074Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000074Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000074Cull;
+	}
+	return 0x000003000000074Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG468(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000750ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000750ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000750ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000750ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000750ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000750ull;
+	}
+	return 0x0000030000000750ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG490(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000007A8ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000007A8ull + (offset) * 0x100000000ull;
+	}
+	return 0x00000000000007A8ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG491(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000007ACull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000007ACull + (offset) * 0x100000000ull;
+	}
+	return 0x00000000000007ACull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG492(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000007B0ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000007B0ull + (offset) * 0x100000000ull;
+	}
+	return 0x00000000000007B0ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG515(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000080Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000003000000080Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000003000000080Cull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000080Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000003000000080Cull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000080Cull;
+	}
+	return 0x000003000000080Cull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG516(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000810ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000810ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000810ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000810ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000810ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000810ull;
+	}
+	return 0x0000030000000810ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG517(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000814ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000814ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000814ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000814ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000814ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000814ull;
+	}
+	return 0x0000030000000814ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG548(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000030000000890ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000030000000890ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000890ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000030000000890ull;
+	}
+	return 0x0000030000000890ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG554(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000008A8ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000008A8ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000008A8ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000008A8ull;
+	}
+	return 0x00000300000008A8ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG558(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000008B8ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000008B8ull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000008B8ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000008B8ull;
+	}
+	return 0x00000300000008B8ull;
+}
+
+static inline u64 CVMX_PCIEEPX_CFG559(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000300000008BCull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000300000008BCull + (offset) * 0x100000000ull;
+
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000008BCull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000300000008BCull;
+	}
+	return 0x00000300000008BCull;
+}
+
+/**
+ * cvmx_pcieep#_cfg000
+ *
+ * This register contains the first 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg000 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg000_s {
+		u32 devid : 16;
+		u32 vendid : 16;
+	} s;
+	struct cvmx_pcieepx_cfg000_s cn52xx;
+	struct cvmx_pcieepx_cfg000_s cn52xxp1;
+	struct cvmx_pcieepx_cfg000_s cn56xx;
+	struct cvmx_pcieepx_cfg000_s cn56xxp1;
+	struct cvmx_pcieepx_cfg000_s cn61xx;
+	struct cvmx_pcieepx_cfg000_s cn63xx;
+	struct cvmx_pcieepx_cfg000_s cn63xxp1;
+	struct cvmx_pcieepx_cfg000_s cn66xx;
+	struct cvmx_pcieepx_cfg000_s cn68xx;
+	struct cvmx_pcieepx_cfg000_s cn68xxp1;
+	struct cvmx_pcieepx_cfg000_s cn70xx;
+	struct cvmx_pcieepx_cfg000_s cn70xxp1;
+	struct cvmx_pcieepx_cfg000_s cn73xx;
+	struct cvmx_pcieepx_cfg000_s cn78xx;
+	struct cvmx_pcieepx_cfg000_s cn78xxp1;
+	struct cvmx_pcieepx_cfg000_s cnf71xx;
+	struct cvmx_pcieepx_cfg000_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg000 cvmx_pcieepx_cfg000_t;
+
+/**
+ * cvmx_pcieep#_cfg001
+ *
+ * This register contains the second 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg001 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg001_s {
+		u32 dpe : 1;
+		u32 sse : 1;
+		u32 rma : 1;
+		u32 rta : 1;
+		u32 sta : 1;
+		u32 devt : 2;
+		u32 mdpe : 1;
+		u32 fbb : 1;
+		u32 reserved_22_22 : 1;
+		u32 m66 : 1;
+		u32 cl : 1;
+		u32 i_stat : 1;
+		u32 reserved_11_18 : 8;
+		u32 i_dis : 1;
+		u32 fbbe : 1;
+		u32 see : 1;
+		u32 ids_wcc : 1;
+		u32 per : 1;
+		u32 vps : 1;
+		u32 mwice : 1;
+		u32 scse : 1;
+		u32 me : 1;
+		u32 msae : 1;
+		u32 isae : 1;
+	} s;
+	struct cvmx_pcieepx_cfg001_s cn52xx;
+	struct cvmx_pcieepx_cfg001_s cn52xxp1;
+	struct cvmx_pcieepx_cfg001_s cn56xx;
+	struct cvmx_pcieepx_cfg001_s cn56xxp1;
+	struct cvmx_pcieepx_cfg001_s cn61xx;
+	struct cvmx_pcieepx_cfg001_s cn63xx;
+	struct cvmx_pcieepx_cfg001_s cn63xxp1;
+	struct cvmx_pcieepx_cfg001_s cn66xx;
+	struct cvmx_pcieepx_cfg001_s cn68xx;
+	struct cvmx_pcieepx_cfg001_s cn68xxp1;
+	struct cvmx_pcieepx_cfg001_s cn70xx;
+	struct cvmx_pcieepx_cfg001_s cn70xxp1;
+	struct cvmx_pcieepx_cfg001_s cn73xx;
+	struct cvmx_pcieepx_cfg001_s cn78xx;
+	struct cvmx_pcieepx_cfg001_s cn78xxp1;
+	struct cvmx_pcieepx_cfg001_s cnf71xx;
+	struct cvmx_pcieepx_cfg001_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg001 cvmx_pcieepx_cfg001_t;
+
+/**
+ * cvmx_pcieep#_cfg002
+ *
+ * This register contains the third 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg002 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg002_s {
+		u32 bcc : 8;
+		u32 sc : 8;
+		u32 pi : 8;
+		u32 rid : 8;
+	} s;
+	struct cvmx_pcieepx_cfg002_s cn52xx;
+	struct cvmx_pcieepx_cfg002_s cn52xxp1;
+	struct cvmx_pcieepx_cfg002_s cn56xx;
+	struct cvmx_pcieepx_cfg002_s cn56xxp1;
+	struct cvmx_pcieepx_cfg002_s cn61xx;
+	struct cvmx_pcieepx_cfg002_s cn63xx;
+	struct cvmx_pcieepx_cfg002_s cn63xxp1;
+	struct cvmx_pcieepx_cfg002_s cn66xx;
+	struct cvmx_pcieepx_cfg002_s cn68xx;
+	struct cvmx_pcieepx_cfg002_s cn68xxp1;
+	struct cvmx_pcieepx_cfg002_s cn70xx;
+	struct cvmx_pcieepx_cfg002_s cn70xxp1;
+	struct cvmx_pcieepx_cfg002_s cn73xx;
+	struct cvmx_pcieepx_cfg002_s cn78xx;
+	struct cvmx_pcieepx_cfg002_s cn78xxp1;
+	struct cvmx_pcieepx_cfg002_s cnf71xx;
+	struct cvmx_pcieepx_cfg002_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg002 cvmx_pcieepx_cfg002_t;
+
+/**
+ * cvmx_pcieep#_cfg003
+ *
+ * This register contains the fourth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg003 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg003_s {
+		u32 bist : 8;
+		u32 mfd : 1;
+		u32 chf : 7;
+		u32 lt : 8;
+		u32 cls : 8;
+	} s;
+	struct cvmx_pcieepx_cfg003_s cn52xx;
+	struct cvmx_pcieepx_cfg003_s cn52xxp1;
+	struct cvmx_pcieepx_cfg003_s cn56xx;
+	struct cvmx_pcieepx_cfg003_s cn56xxp1;
+	struct cvmx_pcieepx_cfg003_s cn61xx;
+	struct cvmx_pcieepx_cfg003_s cn63xx;
+	struct cvmx_pcieepx_cfg003_s cn63xxp1;
+	struct cvmx_pcieepx_cfg003_s cn66xx;
+	struct cvmx_pcieepx_cfg003_s cn68xx;
+	struct cvmx_pcieepx_cfg003_s cn68xxp1;
+	struct cvmx_pcieepx_cfg003_s cn70xx;
+	struct cvmx_pcieepx_cfg003_s cn70xxp1;
+	struct cvmx_pcieepx_cfg003_s cn73xx;
+	struct cvmx_pcieepx_cfg003_s cn78xx;
+	struct cvmx_pcieepx_cfg003_s cn78xxp1;
+	struct cvmx_pcieepx_cfg003_s cnf71xx;
+	struct cvmx_pcieepx_cfg003_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg003 cvmx_pcieepx_cfg003_t;
+
+/**
+ * cvmx_pcieep#_cfg004
+ *
+ * This register contains the fifth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg004 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg004_s {
+		u32 reserved_4_31 : 28;
+		u32 pf : 1;
+		u32 typ : 2;
+		u32 mspc : 1;
+	} s;
+	struct cvmx_pcieepx_cfg004_cn52xx {
+		u32 lbab : 18;
+		u32 reserved_4_13 : 10;
+		u32 pf : 1;
+		u32 typ : 2;
+		u32 mspc : 1;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg004_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg004_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg004_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg004_cn52xx cn61xx;
+	struct cvmx_pcieepx_cfg004_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg004_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg004_cn52xx cn66xx;
+	struct cvmx_pcieepx_cfg004_cn52xx cn68xx;
+	struct cvmx_pcieepx_cfg004_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg004_cn52xx cn70xx;
+	struct cvmx_pcieepx_cfg004_cn52xx cn70xxp1;
+	struct cvmx_pcieepx_cfg004_cn73xx {
+		u32 lbab : 9;
+		u32 reserved_4_22 : 19;
+		u32 pf : 1;
+		u32 typ : 2;
+		u32 mspc : 1;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg004_cn73xx cn78xx;
+	struct cvmx_pcieepx_cfg004_cn78xxp1 {
+		u32 lbab : 17;
+		u32 reserved_4_14 : 11;
+		u32 pf : 1;
+		u32 typ : 2;
+		u32 mspc : 1;
+	} cn78xxp1;
+	struct cvmx_pcieepx_cfg004_cn52xx cnf71xx;
+	struct cvmx_pcieepx_cfg004_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg004 cvmx_pcieepx_cfg004_t;
+
+/**
+ * cvmx_pcieep#_cfg004_mask
+ *
+ * The BAR 0 mask register is invisible to host software and not readable from the application.
+ * The BAR 0 mask register is only writable through PEM()_CFG_WR.
+ */
+union cvmx_pcieepx_cfg004_mask {
+	u32 u32;
+	struct cvmx_pcieepx_cfg004_mask_s {
+		u32 lmask : 31;
+		u32 enb : 1;
+	} s;
+	struct cvmx_pcieepx_cfg004_mask_s cn52xx;
+	struct cvmx_pcieepx_cfg004_mask_s cn52xxp1;
+	struct cvmx_pcieepx_cfg004_mask_s cn56xx;
+	struct cvmx_pcieepx_cfg004_mask_s cn56xxp1;
+	struct cvmx_pcieepx_cfg004_mask_s cn61xx;
+	struct cvmx_pcieepx_cfg004_mask_s cn63xx;
+	struct cvmx_pcieepx_cfg004_mask_s cn63xxp1;
+	struct cvmx_pcieepx_cfg004_mask_s cn66xx;
+	struct cvmx_pcieepx_cfg004_mask_s cn68xx;
+	struct cvmx_pcieepx_cfg004_mask_s cn68xxp1;
+	struct cvmx_pcieepx_cfg004_mask_s cn70xx;
+	struct cvmx_pcieepx_cfg004_mask_s cn70xxp1;
+	struct cvmx_pcieepx_cfg004_mask_s cn73xx;
+	struct cvmx_pcieepx_cfg004_mask_s cn78xx;
+	struct cvmx_pcieepx_cfg004_mask_s cn78xxp1;
+	struct cvmx_pcieepx_cfg004_mask_s cnf71xx;
+	struct cvmx_pcieepx_cfg004_mask_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg004_mask cvmx_pcieepx_cfg004_mask_t;
+
+/**
+ * cvmx_pcieep#_cfg005
+ *
+ * This register contains the sixth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg005 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg005_s {
+		u32 ubab : 32;
+	} s;
+	struct cvmx_pcieepx_cfg005_s cn52xx;
+	struct cvmx_pcieepx_cfg005_s cn52xxp1;
+	struct cvmx_pcieepx_cfg005_s cn56xx;
+	struct cvmx_pcieepx_cfg005_s cn56xxp1;
+	struct cvmx_pcieepx_cfg005_s cn61xx;
+	struct cvmx_pcieepx_cfg005_s cn63xx;
+	struct cvmx_pcieepx_cfg005_s cn63xxp1;
+	struct cvmx_pcieepx_cfg005_s cn66xx;
+	struct cvmx_pcieepx_cfg005_s cn68xx;
+	struct cvmx_pcieepx_cfg005_s cn68xxp1;
+	struct cvmx_pcieepx_cfg005_s cn70xx;
+	struct cvmx_pcieepx_cfg005_s cn70xxp1;
+	struct cvmx_pcieepx_cfg005_s cn73xx;
+	struct cvmx_pcieepx_cfg005_s cn78xx;
+	struct cvmx_pcieepx_cfg005_s cn78xxp1;
+	struct cvmx_pcieepx_cfg005_s cnf71xx;
+	struct cvmx_pcieepx_cfg005_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg005 cvmx_pcieepx_cfg005_t;
+
+/**
+ * cvmx_pcieep#_cfg005_mask
+ *
+ * The BAR 0 mask register is invisible to host software and not readable from the application.
+ * The BAR 0 mask register is only writable through PEM()_CFG_WR.
+ */
+union cvmx_pcieepx_cfg005_mask {
+	u32 u32;
+	struct cvmx_pcieepx_cfg005_mask_s {
+		u32 umask : 32;
+	} s;
+	struct cvmx_pcieepx_cfg005_mask_s cn52xx;
+	struct cvmx_pcieepx_cfg005_mask_s cn52xxp1;
+	struct cvmx_pcieepx_cfg005_mask_s cn56xx;
+	struct cvmx_pcieepx_cfg005_mask_s cn56xxp1;
+	struct cvmx_pcieepx_cfg005_mask_s cn61xx;
+	struct cvmx_pcieepx_cfg005_mask_s cn63xx;
+	struct cvmx_pcieepx_cfg005_mask_s cn63xxp1;
+	struct cvmx_pcieepx_cfg005_mask_s cn66xx;
+	struct cvmx_pcieepx_cfg005_mask_s cn68xx;
+	struct cvmx_pcieepx_cfg005_mask_s cn68xxp1;
+	struct cvmx_pcieepx_cfg005_mask_s cn70xx;
+	struct cvmx_pcieepx_cfg005_mask_s cn70xxp1;
+	struct cvmx_pcieepx_cfg005_mask_s cn73xx;
+	struct cvmx_pcieepx_cfg005_mask_s cn78xx;
+	struct cvmx_pcieepx_cfg005_mask_s cn78xxp1;
+	struct cvmx_pcieepx_cfg005_mask_s cnf71xx;
+	struct cvmx_pcieepx_cfg005_mask_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg005_mask cvmx_pcieepx_cfg005_mask_t;
+
+/**
+ * cvmx_pcieep#_cfg006
+ *
+ * This register contains the seventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg006 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg006_s {
+		u32 lbab : 6;
+		u32 reserved_4_25 : 22;
+		u32 pf : 1;
+		u32 typ : 2;
+		u32 mspc : 1;
+	} s;
+	struct cvmx_pcieepx_cfg006_s cn52xx;
+	struct cvmx_pcieepx_cfg006_s cn52xxp1;
+	struct cvmx_pcieepx_cfg006_s cn56xx;
+	struct cvmx_pcieepx_cfg006_s cn56xxp1;
+	struct cvmx_pcieepx_cfg006_s cn61xx;
+	struct cvmx_pcieepx_cfg006_s cn63xx;
+	struct cvmx_pcieepx_cfg006_s cn63xxp1;
+	struct cvmx_pcieepx_cfg006_s cn66xx;
+	struct cvmx_pcieepx_cfg006_s cn68xx;
+	struct cvmx_pcieepx_cfg006_s cn68xxp1;
+	struct cvmx_pcieepx_cfg006_s cn70xx;
+	struct cvmx_pcieepx_cfg006_s cn70xxp1;
+	struct cvmx_pcieepx_cfg006_s cn73xx;
+	struct cvmx_pcieepx_cfg006_s cn78xx;
+	struct cvmx_pcieepx_cfg006_s cn78xxp1;
+	struct cvmx_pcieepx_cfg006_s cnf71xx;
+	struct cvmx_pcieepx_cfg006_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg006 cvmx_pcieepx_cfg006_t;
+
+/**
+ * cvmx_pcieep#_cfg006_mask
+ *
+ * The BAR 1 mask register is invisible to host software and not readable from the application.
+ * The BAR 1 mask register is only writable through PEM()_CFG_WR.
+ */
+union cvmx_pcieepx_cfg006_mask {
+	u32 u32;
+	struct cvmx_pcieepx_cfg006_mask_s {
+		u32 lmask : 31;
+		u32 enb : 1;
+	} s;
+	struct cvmx_pcieepx_cfg006_mask_s cn52xx;
+	struct cvmx_pcieepx_cfg006_mask_s cn52xxp1;
+	struct cvmx_pcieepx_cfg006_mask_s cn56xx;
+	struct cvmx_pcieepx_cfg006_mask_s cn56xxp1;
+	struct cvmx_pcieepx_cfg006_mask_s cn61xx;
+	struct cvmx_pcieepx_cfg006_mask_s cn63xx;
+	struct cvmx_pcieepx_cfg006_mask_s cn63xxp1;
+	struct cvmx_pcieepx_cfg006_mask_s cn66xx;
+	struct cvmx_pcieepx_cfg006_mask_s cn68xx;
+	struct cvmx_pcieepx_cfg006_mask_s cn68xxp1;
+	struct cvmx_pcieepx_cfg006_mask_s cn70xx;
+	struct cvmx_pcieepx_cfg006_mask_s cn70xxp1;
+	struct cvmx_pcieepx_cfg006_mask_s cn73xx;
+	struct cvmx_pcieepx_cfg006_mask_s cn78xx;
+	struct cvmx_pcieepx_cfg006_mask_s cn78xxp1;
+	struct cvmx_pcieepx_cfg006_mask_s cnf71xx;
+	struct cvmx_pcieepx_cfg006_mask_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg006_mask cvmx_pcieepx_cfg006_mask_t;
+
+/**
+ * cvmx_pcieep#_cfg007
+ *
+ * This register contains the eighth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg007 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg007_s {
+		u32 ubab : 32;
+	} s;
+	struct cvmx_pcieepx_cfg007_s cn52xx;
+	struct cvmx_pcieepx_cfg007_s cn52xxp1;
+	struct cvmx_pcieepx_cfg007_s cn56xx;
+	struct cvmx_pcieepx_cfg007_s cn56xxp1;
+	struct cvmx_pcieepx_cfg007_s cn61xx;
+	struct cvmx_pcieepx_cfg007_s cn63xx;
+	struct cvmx_pcieepx_cfg007_s cn63xxp1;
+	struct cvmx_pcieepx_cfg007_s cn66xx;
+	struct cvmx_pcieepx_cfg007_s cn68xx;
+	struct cvmx_pcieepx_cfg007_s cn68xxp1;
+	struct cvmx_pcieepx_cfg007_s cn70xx;
+	struct cvmx_pcieepx_cfg007_s cn70xxp1;
+	struct cvmx_pcieepx_cfg007_s cn73xx;
+	struct cvmx_pcieepx_cfg007_s cn78xx;
+	struct cvmx_pcieepx_cfg007_s cn78xxp1;
+	struct cvmx_pcieepx_cfg007_s cnf71xx;
+	struct cvmx_pcieepx_cfg007_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg007 cvmx_pcieepx_cfg007_t;
+
+/**
+ * cvmx_pcieep#_cfg007_mask
+ *
+ * The BAR 1 mask register is invisible to host software and not readable from the application.
+ * The BAR 1 mask register is only writable through PEM()_CFG_WR.
+ */
+union cvmx_pcieepx_cfg007_mask {
+	u32 u32;
+	struct cvmx_pcieepx_cfg007_mask_s {
+		u32 umask : 32;
+	} s;
+	struct cvmx_pcieepx_cfg007_mask_s cn52xx;
+	struct cvmx_pcieepx_cfg007_mask_s cn52xxp1;
+	struct cvmx_pcieepx_cfg007_mask_s cn56xx;
+	struct cvmx_pcieepx_cfg007_mask_s cn56xxp1;
+	struct cvmx_pcieepx_cfg007_mask_s cn61xx;
+	struct cvmx_pcieepx_cfg007_mask_s cn63xx;
+	struct cvmx_pcieepx_cfg007_mask_s cn63xxp1;
+	struct cvmx_pcieepx_cfg007_mask_s cn66xx;
+	struct cvmx_pcieepx_cfg007_mask_s cn68xx;
+	struct cvmx_pcieepx_cfg007_mask_s cn68xxp1;
+	struct cvmx_pcieepx_cfg007_mask_s cn70xx;
+	struct cvmx_pcieepx_cfg007_mask_s cn70xxp1;
+	struct cvmx_pcieepx_cfg007_mask_s cn73xx;
+	struct cvmx_pcieepx_cfg007_mask_s cn78xx;
+	struct cvmx_pcieepx_cfg007_mask_s cn78xxp1;
+	struct cvmx_pcieepx_cfg007_mask_s cnf71xx;
+	struct cvmx_pcieepx_cfg007_mask_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg007_mask cvmx_pcieepx_cfg007_mask_t;
+
+/**
+ * cvmx_pcieep#_cfg008
+ *
+ * This register contains the ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg008 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg008_s {
+		u32 lbab : 12;
+		u32 reserved_4_19 : 16;
+		u32 pf : 1;
+		u32 typ : 2;
+		u32 mspc : 1;
+	} s;
+	struct cvmx_pcieepx_cfg008_cn52xx {
+		u32 reserved_4_31 : 28;
+		u32 pf : 1;
+		u32 typ : 2;
+		u32 mspc : 1;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg008_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg008_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg008_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg008_cn52xx cn61xx;
+	struct cvmx_pcieepx_cfg008_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg008_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg008_cn52xx cn66xx;
+	struct cvmx_pcieepx_cfg008_cn52xx cn68xx;
+	struct cvmx_pcieepx_cfg008_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg008_s cn70xx;
+	struct cvmx_pcieepx_cfg008_s cn70xxp1;
+	struct cvmx_pcieepx_cfg008_s cn73xx;
+	struct cvmx_pcieepx_cfg008_s cn78xx;
+	struct cvmx_pcieepx_cfg008_s cn78xxp1;
+	struct cvmx_pcieepx_cfg008_cn52xx cnf71xx;
+	struct cvmx_pcieepx_cfg008_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg008 cvmx_pcieepx_cfg008_t;
+
+/**
+ * cvmx_pcieep#_cfg008_mask
+ *
+ * The BAR 2 mask register is invisible to host software and not readable from the application.
+ * The BAR 2 mask register is only writable through PEM()_CFG_WR.
+ */
+union cvmx_pcieepx_cfg008_mask {
+	u32 u32;
+	struct cvmx_pcieepx_cfg008_mask_s {
+		u32 lmask : 31;
+		u32 enb : 1;
+	} s;
+	struct cvmx_pcieepx_cfg008_mask_s cn52xx;
+	struct cvmx_pcieepx_cfg008_mask_s cn52xxp1;
+	struct cvmx_pcieepx_cfg008_mask_s cn56xx;
+	struct cvmx_pcieepx_cfg008_mask_s cn56xxp1;
+	struct cvmx_pcieepx_cfg008_mask_s cn61xx;
+	struct cvmx_pcieepx_cfg008_mask_s cn63xx;
+	struct cvmx_pcieepx_cfg008_mask_s cn63xxp1;
+	struct cvmx_pcieepx_cfg008_mask_s cn66xx;
+	struct cvmx_pcieepx_cfg008_mask_s cn68xx;
+	struct cvmx_pcieepx_cfg008_mask_s cn68xxp1;
+	struct cvmx_pcieepx_cfg008_mask_s cn70xx;
+	struct cvmx_pcieepx_cfg008_mask_s cn70xxp1;
+	struct cvmx_pcieepx_cfg008_mask_s cn73xx;
+	struct cvmx_pcieepx_cfg008_mask_s cn78xx;
+	struct cvmx_pcieepx_cfg008_mask_s cn78xxp1;
+	struct cvmx_pcieepx_cfg008_mask_s cnf71xx;
+	struct cvmx_pcieepx_cfg008_mask_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg008_mask cvmx_pcieepx_cfg008_mask_t;
+
+/**
+ * cvmx_pcieep#_cfg009
+ *
+ * This register contains the tenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg009 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg009_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg009_cn52xx {
+		u32 ubab : 25;
+		u32 reserved_0_6 : 7;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg009_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg009_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg009_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg009_cn61xx {
+		u32 ubab : 23;
+		u32 reserved_0_8 : 9;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg009_cn61xx cn63xx;
+	struct cvmx_pcieepx_cfg009_cn61xx cn63xxp1;
+	struct cvmx_pcieepx_cfg009_cn61xx cn66xx;
+	struct cvmx_pcieepx_cfg009_cn61xx cn68xx;
+	struct cvmx_pcieepx_cfg009_cn61xx cn68xxp1;
+	struct cvmx_pcieepx_cfg009_cn70xx {
+		u32 ubab : 32;
+	} cn70xx;
+	struct cvmx_pcieepx_cfg009_cn70xx cn70xxp1;
+	struct cvmx_pcieepx_cfg009_cn70xx cn73xx;
+	struct cvmx_pcieepx_cfg009_cn70xx cn78xx;
+	struct cvmx_pcieepx_cfg009_cn70xx cn78xxp1;
+	struct cvmx_pcieepx_cfg009_cn61xx cnf71xx;
+	struct cvmx_pcieepx_cfg009_cn70xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg009 cvmx_pcieepx_cfg009_t;
+
+/**
+ * cvmx_pcieep#_cfg009_mask
+ *
+ * The BAR 2 mask register is invisible to host software and not readable from the application.
+ * The BAR 2 mask register is only writable through PEM()_CFG_WR.
+ */
+union cvmx_pcieepx_cfg009_mask {
+	u32 u32;
+	struct cvmx_pcieepx_cfg009_mask_s {
+		u32 umask : 32;
+	} s;
+	struct cvmx_pcieepx_cfg009_mask_s cn52xx;
+	struct cvmx_pcieepx_cfg009_mask_s cn52xxp1;
+	struct cvmx_pcieepx_cfg009_mask_s cn56xx;
+	struct cvmx_pcieepx_cfg009_mask_s cn56xxp1;
+	struct cvmx_pcieepx_cfg009_mask_s cn61xx;
+	struct cvmx_pcieepx_cfg009_mask_s cn63xx;
+	struct cvmx_pcieepx_cfg009_mask_s cn63xxp1;
+	struct cvmx_pcieepx_cfg009_mask_s cn66xx;
+	struct cvmx_pcieepx_cfg009_mask_s cn68xx;
+	struct cvmx_pcieepx_cfg009_mask_s cn68xxp1;
+	struct cvmx_pcieepx_cfg009_mask_s cn70xx;
+	struct cvmx_pcieepx_cfg009_mask_s cn70xxp1;
+	struct cvmx_pcieepx_cfg009_mask_s cn73xx;
+	struct cvmx_pcieepx_cfg009_mask_s cn78xx;
+	struct cvmx_pcieepx_cfg009_mask_s cn78xxp1;
+	struct cvmx_pcieepx_cfg009_mask_s cnf71xx;
+	struct cvmx_pcieepx_cfg009_mask_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg009_mask cvmx_pcieepx_cfg009_mask_t;
+
+/**
+ * cvmx_pcieep#_cfg010
+ *
+ * This register contains the eleventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg010 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg010_s {
+		u32 cisp : 32;
+	} s;
+	struct cvmx_pcieepx_cfg010_s cn52xx;
+	struct cvmx_pcieepx_cfg010_s cn52xxp1;
+	struct cvmx_pcieepx_cfg010_s cn56xx;
+	struct cvmx_pcieepx_cfg010_s cn56xxp1;
+	struct cvmx_pcieepx_cfg010_s cn61xx;
+	struct cvmx_pcieepx_cfg010_s cn63xx;
+	struct cvmx_pcieepx_cfg010_s cn63xxp1;
+	struct cvmx_pcieepx_cfg010_s cn66xx;
+	struct cvmx_pcieepx_cfg010_s cn68xx;
+	struct cvmx_pcieepx_cfg010_s cn68xxp1;
+	struct cvmx_pcieepx_cfg010_s cn70xx;
+	struct cvmx_pcieepx_cfg010_s cn70xxp1;
+	struct cvmx_pcieepx_cfg010_s cn73xx;
+	struct cvmx_pcieepx_cfg010_s cn78xx;
+	struct cvmx_pcieepx_cfg010_s cn78xxp1;
+	struct cvmx_pcieepx_cfg010_s cnf71xx;
+	struct cvmx_pcieepx_cfg010_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg010 cvmx_pcieepx_cfg010_t;
+
+/**
+ * cvmx_pcieep#_cfg011
+ *
+ * This register contains the twelfth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg011 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg011_s {
+		u32 ssid : 16;
+		u32 ssvid : 16;
+	} s;
+	struct cvmx_pcieepx_cfg011_s cn52xx;
+	struct cvmx_pcieepx_cfg011_s cn52xxp1;
+	struct cvmx_pcieepx_cfg011_s cn56xx;
+	struct cvmx_pcieepx_cfg011_s cn56xxp1;
+	struct cvmx_pcieepx_cfg011_s cn61xx;
+	struct cvmx_pcieepx_cfg011_s cn63xx;
+	struct cvmx_pcieepx_cfg011_s cn63xxp1;
+	struct cvmx_pcieepx_cfg011_s cn66xx;
+	struct cvmx_pcieepx_cfg011_s cn68xx;
+	struct cvmx_pcieepx_cfg011_s cn68xxp1;
+	struct cvmx_pcieepx_cfg011_s cn70xx;
+	struct cvmx_pcieepx_cfg011_s cn70xxp1;
+	struct cvmx_pcieepx_cfg011_s cn73xx;
+	struct cvmx_pcieepx_cfg011_s cn78xx;
+	struct cvmx_pcieepx_cfg011_s cn78xxp1;
+	struct cvmx_pcieepx_cfg011_s cnf71xx;
+	struct cvmx_pcieepx_cfg011_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg011 cvmx_pcieepx_cfg011_t;
+
+/**
+ * cvmx_pcieep#_cfg012
+ *
+ * This register contains the thirteenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg012 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg012_s {
+		u32 eraddr : 16;
+		u32 reserved_1_15 : 15;
+		u32 er_en : 1;
+	} s;
+	struct cvmx_pcieepx_cfg012_s cn52xx;
+	struct cvmx_pcieepx_cfg012_s cn52xxp1;
+	struct cvmx_pcieepx_cfg012_s cn56xx;
+	struct cvmx_pcieepx_cfg012_s cn56xxp1;
+	struct cvmx_pcieepx_cfg012_s cn61xx;
+	struct cvmx_pcieepx_cfg012_s cn63xx;
+	struct cvmx_pcieepx_cfg012_s cn63xxp1;
+	struct cvmx_pcieepx_cfg012_s cn66xx;
+	struct cvmx_pcieepx_cfg012_s cn68xx;
+	struct cvmx_pcieepx_cfg012_s cn68xxp1;
+	struct cvmx_pcieepx_cfg012_s cn70xx;
+	struct cvmx_pcieepx_cfg012_s cn70xxp1;
+	struct cvmx_pcieepx_cfg012_s cn73xx;
+	struct cvmx_pcieepx_cfg012_s cn78xx;
+	struct cvmx_pcieepx_cfg012_s cn78xxp1;
+	struct cvmx_pcieepx_cfg012_s cnf71xx;
+	struct cvmx_pcieepx_cfg012_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg012 cvmx_pcieepx_cfg012_t;
+
+/**
+ * cvmx_pcieep#_cfg012_mask
+ *
+ * The ROM mask register is invisible to host software and not readable from the application. The
+ * ROM mask register is only writable through PEM()_CFG_WR.
+ */
+union cvmx_pcieepx_cfg012_mask {
+	u32 u32;
+	struct cvmx_pcieepx_cfg012_mask_s {
+		u32 mask : 31;
+		u32 enb : 1;
+	} s;
+	struct cvmx_pcieepx_cfg012_mask_s cn52xx;
+	struct cvmx_pcieepx_cfg012_mask_s cn52xxp1;
+	struct cvmx_pcieepx_cfg012_mask_s cn56xx;
+	struct cvmx_pcieepx_cfg012_mask_s cn56xxp1;
+	struct cvmx_pcieepx_cfg012_mask_s cn61xx;
+	struct cvmx_pcieepx_cfg012_mask_s cn63xx;
+	struct cvmx_pcieepx_cfg012_mask_s cn63xxp1;
+	struct cvmx_pcieepx_cfg012_mask_s cn66xx;
+	struct cvmx_pcieepx_cfg012_mask_s cn68xx;
+	struct cvmx_pcieepx_cfg012_mask_s cn68xxp1;
+	struct cvmx_pcieepx_cfg012_mask_s cn70xx;
+	struct cvmx_pcieepx_cfg012_mask_s cn70xxp1;
+	struct cvmx_pcieepx_cfg012_mask_s cn73xx;
+	struct cvmx_pcieepx_cfg012_mask_s cn78xx;
+	struct cvmx_pcieepx_cfg012_mask_s cn78xxp1;
+	struct cvmx_pcieepx_cfg012_mask_s cnf71xx;
+	struct cvmx_pcieepx_cfg012_mask_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg012_mask cvmx_pcieepx_cfg012_mask_t;
+
+/**
+ * cvmx_pcieep#_cfg013
+ *
+ * This register contains the fourteenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg013 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg013_s {
+		u32 reserved_8_31 : 24;
+		u32 cp : 8;
+	} s;
+	struct cvmx_pcieepx_cfg013_s cn52xx;
+	struct cvmx_pcieepx_cfg013_s cn52xxp1;
+	struct cvmx_pcieepx_cfg013_s cn56xx;
+	struct cvmx_pcieepx_cfg013_s cn56xxp1;
+	struct cvmx_pcieepx_cfg013_s cn61xx;
+	struct cvmx_pcieepx_cfg013_s cn63xx;
+	struct cvmx_pcieepx_cfg013_s cn63xxp1;
+	struct cvmx_pcieepx_cfg013_s cn66xx;
+	struct cvmx_pcieepx_cfg013_s cn68xx;
+	struct cvmx_pcieepx_cfg013_s cn68xxp1;
+	struct cvmx_pcieepx_cfg013_s cn70xx;
+	struct cvmx_pcieepx_cfg013_s cn70xxp1;
+	struct cvmx_pcieepx_cfg013_s cn73xx;
+	struct cvmx_pcieepx_cfg013_s cn78xx;
+	struct cvmx_pcieepx_cfg013_s cn78xxp1;
+	struct cvmx_pcieepx_cfg013_s cnf71xx;
+	struct cvmx_pcieepx_cfg013_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg013 cvmx_pcieepx_cfg013_t;
+
+/**
+ * cvmx_pcieep#_cfg015
+ *
+ * This register contains the sixteenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg015 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg015_s {
+		u32 ml : 8;
+		u32 mg : 8;
+		u32 inta : 8;
+		u32 il : 8;
+	} s;
+	struct cvmx_pcieepx_cfg015_s cn52xx;
+	struct cvmx_pcieepx_cfg015_s cn52xxp1;
+	struct cvmx_pcieepx_cfg015_s cn56xx;
+	struct cvmx_pcieepx_cfg015_s cn56xxp1;
+	struct cvmx_pcieepx_cfg015_s cn61xx;
+	struct cvmx_pcieepx_cfg015_s cn63xx;
+	struct cvmx_pcieepx_cfg015_s cn63xxp1;
+	struct cvmx_pcieepx_cfg015_s cn66xx;
+	struct cvmx_pcieepx_cfg015_s cn68xx;
+	struct cvmx_pcieepx_cfg015_s cn68xxp1;
+	struct cvmx_pcieepx_cfg015_s cn70xx;
+	struct cvmx_pcieepx_cfg015_s cn70xxp1;
+	struct cvmx_pcieepx_cfg015_s cn73xx;
+	struct cvmx_pcieepx_cfg015_s cn78xx;
+	struct cvmx_pcieepx_cfg015_s cn78xxp1;
+	struct cvmx_pcieepx_cfg015_s cnf71xx;
+	struct cvmx_pcieepx_cfg015_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg015 cvmx_pcieepx_cfg015_t;
+
+/**
+ * cvmx_pcieep#_cfg016
+ *
+ * This register contains the seventeenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg016 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg016_s {
+		u32 pmes : 5;
+		u32 d2s : 1;
+		u32 d1s : 1;
+		u32 auxc : 3;
+		u32 dsi : 1;
+		u32 reserved_20_20 : 1;
+		u32 pme_clock : 1;
+		u32 pmsv : 3;
+		u32 ncp : 8;
+		u32 pmcid : 8;
+	} s;
+	struct cvmx_pcieepx_cfg016_s cn52xx;
+	struct cvmx_pcieepx_cfg016_s cn52xxp1;
+	struct cvmx_pcieepx_cfg016_s cn56xx;
+	struct cvmx_pcieepx_cfg016_s cn56xxp1;
+	struct cvmx_pcieepx_cfg016_s cn61xx;
+	struct cvmx_pcieepx_cfg016_s cn63xx;
+	struct cvmx_pcieepx_cfg016_s cn63xxp1;
+	struct cvmx_pcieepx_cfg016_s cn66xx;
+	struct cvmx_pcieepx_cfg016_s cn68xx;
+	struct cvmx_pcieepx_cfg016_s cn68xxp1;
+	struct cvmx_pcieepx_cfg016_s cn70xx;
+	struct cvmx_pcieepx_cfg016_s cn70xxp1;
+	struct cvmx_pcieepx_cfg016_s cn73xx;
+	struct cvmx_pcieepx_cfg016_s cn78xx;
+	struct cvmx_pcieepx_cfg016_s cn78xxp1;
+	struct cvmx_pcieepx_cfg016_s cnf71xx;
+	struct cvmx_pcieepx_cfg016_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg016 cvmx_pcieepx_cfg016_t;
+
+/**
+ * cvmx_pcieep#_cfg017
+ *
+ * This register contains the eighteenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg017 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg017_s {
+		u32 pmdia : 8;
+		u32 bpccee : 1;
+		u32 bd3h : 1;
+		u32 reserved_16_21 : 6;
+		u32 pmess : 1;
+		u32 pmedsia : 2;
+		u32 pmds : 4;
+		u32 pmeens : 1;
+		u32 reserved_4_7 : 4;
+		u32 nsr : 1;
+		u32 reserved_2_2 : 1;
+		u32 ps : 2;
+	} s;
+	struct cvmx_pcieepx_cfg017_s cn52xx;
+	struct cvmx_pcieepx_cfg017_s cn52xxp1;
+	struct cvmx_pcieepx_cfg017_s cn56xx;
+	struct cvmx_pcieepx_cfg017_s cn56xxp1;
+	struct cvmx_pcieepx_cfg017_s cn61xx;
+	struct cvmx_pcieepx_cfg017_s cn63xx;
+	struct cvmx_pcieepx_cfg017_s cn63xxp1;
+	struct cvmx_pcieepx_cfg017_s cn66xx;
+	struct cvmx_pcieepx_cfg017_s cn68xx;
+	struct cvmx_pcieepx_cfg017_s cn68xxp1;
+	struct cvmx_pcieepx_cfg017_s cn70xx;
+	struct cvmx_pcieepx_cfg017_s cn70xxp1;
+	struct cvmx_pcieepx_cfg017_s cn73xx;
+	struct cvmx_pcieepx_cfg017_s cn78xx;
+	struct cvmx_pcieepx_cfg017_s cn78xxp1;
+	struct cvmx_pcieepx_cfg017_s cnf71xx;
+	struct cvmx_pcieepx_cfg017_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg017 cvmx_pcieepx_cfg017_t;
+
+/**
+ * cvmx_pcieep#_cfg020
+ *
+ * This register contains the twenty-first 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg020 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg020_s {
+		u32 reserved_25_31 : 7;
+		u32 pvm : 1;
+		u32 m64 : 1;
+		u32 mme : 3;
+		u32 mmc : 3;
+		u32 msien : 1;
+		u32 ncp : 8;
+		u32 msicid : 8;
+	} s;
+	struct cvmx_pcieepx_cfg020_cn52xx {
+		u32 reserved_24_31 : 8;
+		u32 m64 : 1;
+		u32 mme : 3;
+		u32 mmc : 3;
+		u32 msien : 1;
+		u32 ncp : 8;
+		u32 msicid : 8;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg020_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg020_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg020_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg020_s cn61xx;
+	struct cvmx_pcieepx_cfg020_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg020_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg020_s cn66xx;
+	struct cvmx_pcieepx_cfg020_s cn68xx;
+	struct cvmx_pcieepx_cfg020_s cn68xxp1;
+	struct cvmx_pcieepx_cfg020_s cn70xx;
+	struct cvmx_pcieepx_cfg020_s cn70xxp1;
+	struct cvmx_pcieepx_cfg020_s cn73xx;
+	struct cvmx_pcieepx_cfg020_s cn78xx;
+	struct cvmx_pcieepx_cfg020_s cn78xxp1;
+	struct cvmx_pcieepx_cfg020_s cnf71xx;
+	struct cvmx_pcieepx_cfg020_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg020 cvmx_pcieepx_cfg020_t;
+
+/**
+ * cvmx_pcieep#_cfg021
+ *
+ * This register contains the twenty-second 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg021 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg021_s {
+		u32 lmsi : 30;
+		u32 reserved_0_1 : 2;
+	} s;
+	struct cvmx_pcieepx_cfg021_s cn52xx;
+	struct cvmx_pcieepx_cfg021_s cn52xxp1;
+	struct cvmx_pcieepx_cfg021_s cn56xx;
+	struct cvmx_pcieepx_cfg021_s cn56xxp1;
+	struct cvmx_pcieepx_cfg021_s cn61xx;
+	struct cvmx_pcieepx_cfg021_s cn63xx;
+	struct cvmx_pcieepx_cfg021_s cn63xxp1;
+	struct cvmx_pcieepx_cfg021_s cn66xx;
+	struct cvmx_pcieepx_cfg021_s cn68xx;
+	struct cvmx_pcieepx_cfg021_s cn68xxp1;
+	struct cvmx_pcieepx_cfg021_s cn70xx;
+	struct cvmx_pcieepx_cfg021_s cn70xxp1;
+	struct cvmx_pcieepx_cfg021_s cn73xx;
+	struct cvmx_pcieepx_cfg021_s cn78xx;
+	struct cvmx_pcieepx_cfg021_s cn78xxp1;
+	struct cvmx_pcieepx_cfg021_s cnf71xx;
+	struct cvmx_pcieepx_cfg021_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg021 cvmx_pcieepx_cfg021_t;
+
+/**
+ * cvmx_pcieep#_cfg022
+ *
+ * This register contains the twenty-third 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg022 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg022_s {
+		u32 umsi : 32;
+	} s;
+	struct cvmx_pcieepx_cfg022_s cn52xx;
+	struct cvmx_pcieepx_cfg022_s cn52xxp1;
+	struct cvmx_pcieepx_cfg022_s cn56xx;
+	struct cvmx_pcieepx_cfg022_s cn56xxp1;
+	struct cvmx_pcieepx_cfg022_s cn61xx;
+	struct cvmx_pcieepx_cfg022_s cn63xx;
+	struct cvmx_pcieepx_cfg022_s cn63xxp1;
+	struct cvmx_pcieepx_cfg022_s cn66xx;
+	struct cvmx_pcieepx_cfg022_s cn68xx;
+	struct cvmx_pcieepx_cfg022_s cn68xxp1;
+	struct cvmx_pcieepx_cfg022_s cn70xx;
+	struct cvmx_pcieepx_cfg022_s cn70xxp1;
+	struct cvmx_pcieepx_cfg022_s cn73xx;
+	struct cvmx_pcieepx_cfg022_s cn78xx;
+	struct cvmx_pcieepx_cfg022_s cn78xxp1;
+	struct cvmx_pcieepx_cfg022_s cnf71xx;
+	struct cvmx_pcieepx_cfg022_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg022 cvmx_pcieepx_cfg022_t;
+
+/**
+ * cvmx_pcieep#_cfg023
+ *
+ * This register contains the twenty-fourth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg023 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg023_s {
+		u32 reserved_16_31 : 16;
+		u32 msimd : 16;
+	} s;
+	struct cvmx_pcieepx_cfg023_s cn52xx;
+	struct cvmx_pcieepx_cfg023_s cn52xxp1;
+	struct cvmx_pcieepx_cfg023_s cn56xx;
+	struct cvmx_pcieepx_cfg023_s cn56xxp1;
+	struct cvmx_pcieepx_cfg023_s cn61xx;
+	struct cvmx_pcieepx_cfg023_s cn63xx;
+	struct cvmx_pcieepx_cfg023_s cn63xxp1;
+	struct cvmx_pcieepx_cfg023_s cn66xx;
+	struct cvmx_pcieepx_cfg023_s cn68xx;
+	struct cvmx_pcieepx_cfg023_s cn68xxp1;
+	struct cvmx_pcieepx_cfg023_s cn70xx;
+	struct cvmx_pcieepx_cfg023_s cn70xxp1;
+	struct cvmx_pcieepx_cfg023_s cn73xx;
+	struct cvmx_pcieepx_cfg023_s cn78xx;
+	struct cvmx_pcieepx_cfg023_s cn78xxp1;
+	struct cvmx_pcieepx_cfg023_s cnf71xx;
+	struct cvmx_pcieepx_cfg023_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg023 cvmx_pcieepx_cfg023_t;
+
+/**
+ * cvmx_pcieep#_cfg024
+ *
+ * This register contains the twenty-fifth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg024 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg024_s {
+		u32 msimm : 32;
+	} s;
+	struct cvmx_pcieepx_cfg024_s cn70xx;
+	struct cvmx_pcieepx_cfg024_s cn70xxp1;
+	struct cvmx_pcieepx_cfg024_s cn73xx;
+	struct cvmx_pcieepx_cfg024_s cn78xx;
+	struct cvmx_pcieepx_cfg024_s cn78xxp1;
+	struct cvmx_pcieepx_cfg024_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg024 cvmx_pcieepx_cfg024_t;
+
+/**
+ * cvmx_pcieep#_cfg025
+ *
+ * This register contains the twenty-sixth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg025 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg025_s {
+		u32 msimp : 32;
+	} s;
+	struct cvmx_pcieepx_cfg025_s cn70xx;
+	struct cvmx_pcieepx_cfg025_s cn70xxp1;
+	struct cvmx_pcieepx_cfg025_s cn73xx;
+	struct cvmx_pcieepx_cfg025_s cn78xx;
+	struct cvmx_pcieepx_cfg025_s cn78xxp1;
+	struct cvmx_pcieepx_cfg025_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg025 cvmx_pcieepx_cfg025_t;
+
+/**
+ * cvmx_pcieep#_cfg028
+ *
+ * This register contains the twenty-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg028 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg028_s {
+		u32 reserved_30_31 : 2;
+		u32 imn : 5;
+		u32 si : 1;
+		u32 dpt : 4;
+		u32 pciecv : 4;
+		u32 ncp : 8;
+		u32 pcieid : 8;
+	} s;
+	struct cvmx_pcieepx_cfg028_s cn52xx;
+	struct cvmx_pcieepx_cfg028_s cn52xxp1;
+	struct cvmx_pcieepx_cfg028_s cn56xx;
+	struct cvmx_pcieepx_cfg028_s cn56xxp1;
+	struct cvmx_pcieepx_cfg028_s cn61xx;
+	struct cvmx_pcieepx_cfg028_s cn63xx;
+	struct cvmx_pcieepx_cfg028_s cn63xxp1;
+	struct cvmx_pcieepx_cfg028_s cn66xx;
+	struct cvmx_pcieepx_cfg028_s cn68xx;
+	struct cvmx_pcieepx_cfg028_s cn68xxp1;
+	struct cvmx_pcieepx_cfg028_s cn70xx;
+	struct cvmx_pcieepx_cfg028_s cn70xxp1;
+	struct cvmx_pcieepx_cfg028_s cn73xx;
+	struct cvmx_pcieepx_cfg028_s cn78xx;
+	struct cvmx_pcieepx_cfg028_s cn78xxp1;
+	struct cvmx_pcieepx_cfg028_s cnf71xx;
+	struct cvmx_pcieepx_cfg028_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg028 cvmx_pcieepx_cfg028_t;
+
+/**
+ * cvmx_pcieep#_cfg029
+ *
+ * This register contains the thirtieth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg029 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg029_s {
+		u32 reserved_28_31 : 4;
+		u32 cspls : 2;
+		u32 csplv : 8;
+		u32 reserved_16_17 : 2;
+		u32 rber : 1;
+		u32 reserved_12_14 : 3;
+		u32 el1al : 3;
+		u32 el0al : 3;
+		u32 etfs : 1;
+		u32 pfs : 2;
+		u32 mpss : 3;
+	} s;
+	struct cvmx_pcieepx_cfg029_s cn52xx;
+	struct cvmx_pcieepx_cfg029_s cn52xxp1;
+	struct cvmx_pcieepx_cfg029_s cn56xx;
+	struct cvmx_pcieepx_cfg029_s cn56xxp1;
+	struct cvmx_pcieepx_cfg029_cn61xx {
+		u32 reserved_29_31 : 3;
+		u32 flr_cap : 1;
+		u32 cspls : 2;
+		u32 csplv : 8;
+		u32 reserved_16_17 : 2;
+		u32 rber : 1;
+		u32 reserved_12_14 : 3;
+		u32 el1al : 3;
+		u32 el0al : 3;
+		u32 etfs : 1;
+		u32 pfs : 2;
+		u32 mpss : 3;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg029_s cn63xx;
+	struct cvmx_pcieepx_cfg029_s cn63xxp1;
+	struct cvmx_pcieepx_cfg029_cn66xx {
+		u32 reserved_29_31 : 3;
+		u32 flr : 1;
+		u32 cspls : 2;
+		u32 csplv : 8;
+		u32 reserved_16_17 : 2;
+		u32 rber : 1;
+		u32 reserved_12_14 : 3;
+		u32 el1al : 3;
+		u32 el0al : 3;
+		u32 etfs : 1;
+		u32 pfs : 2;
+		u32 mpss : 3;
+	} cn66xx;
+	struct cvmx_pcieepx_cfg029_cn66xx cn68xx;
+	struct cvmx_pcieepx_cfg029_cn66xx cn68xxp1;
+	struct cvmx_pcieepx_cfg029_cn61xx cn70xx;
+	struct cvmx_pcieepx_cfg029_cn61xx cn70xxp1;
+	struct cvmx_pcieepx_cfg029_cn61xx cn73xx;
+	struct cvmx_pcieepx_cfg029_cn61xx cn78xx;
+	struct cvmx_pcieepx_cfg029_cn61xx cn78xxp1;
+	struct cvmx_pcieepx_cfg029_cn61xx cnf71xx;
+	struct cvmx_pcieepx_cfg029_cn61xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg029 cvmx_pcieepx_cfg029_t;
+
+/**
+ * cvmx_pcieep#_cfg030
+ *
+ * This register contains the thirty-first 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg030 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg030_s {
+		u32 reserved_22_31 : 10;
+		u32 tp : 1;
+		u32 ap_d : 1;
+		u32 ur_d : 1;
+		u32 fe_d : 1;
+		u32 nfe_d : 1;
+		u32 ce_d : 1;
+		u32 i_flr : 1;
+		u32 mrrs : 3;
+		u32 ns_en : 1;
+		u32 ap_en : 1;
+		u32 pf_en : 1;
+		u32 etf_en : 1;
+		u32 mps : 3;
+		u32 ro_en : 1;
+		u32 ur_en : 1;
+		u32 fe_en : 1;
+		u32 nfe_en : 1;
+		u32 ce_en : 1;
+	} s;
+	struct cvmx_pcieepx_cfg030_cn52xx {
+		u32 reserved_22_31 : 10;
+		u32 tp : 1;
+		u32 ap_d : 1;
+		u32 ur_d : 1;
+		u32 fe_d : 1;
+		u32 nfe_d : 1;
+		u32 ce_d : 1;
+		u32 reserved_15_15 : 1;
+		u32 mrrs : 3;
+		u32 ns_en : 1;
+		u32 ap_en : 1;
+		u32 pf_en : 1;
+		u32 etf_en : 1;
+		u32 mps : 3;
+		u32 ro_en : 1;
+		u32 ur_en : 1;
+		u32 fe_en : 1;
+		u32 nfe_en : 1;
+		u32 ce_en : 1;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg030_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg030_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg030_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg030_s cn61xx;
+	struct cvmx_pcieepx_cfg030_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg030_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg030_s cn66xx;
+	struct cvmx_pcieepx_cfg030_s cn68xx;
+	struct cvmx_pcieepx_cfg030_s cn68xxp1;
+	struct cvmx_pcieepx_cfg030_s cn70xx;
+	struct cvmx_pcieepx_cfg030_s cn70xxp1;
+	struct cvmx_pcieepx_cfg030_s cn73xx;
+	struct cvmx_pcieepx_cfg030_s cn78xx;
+	struct cvmx_pcieepx_cfg030_s cn78xxp1;
+	struct cvmx_pcieepx_cfg030_s cnf71xx;
+	struct cvmx_pcieepx_cfg030_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg030 cvmx_pcieepx_cfg030_t;
+
+/**
+ * cvmx_pcieep#_cfg031
+ *
+ * This register contains the thirty-second 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg031 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg031_s {
+		u32 pnum : 8;
+		u32 reserved_23_23 : 1;
+		u32 aspm : 1;
+		u32 lbnc : 1;
+		u32 dllarc : 1;
+		u32 sderc : 1;
+		u32 cpm : 1;
+		u32 l1el : 3;
+		u32 l0el : 3;
+		u32 aslpms : 2;
+		u32 mlw : 6;
+		u32 mls : 4;
+	} s;
+	struct cvmx_pcieepx_cfg031_cn52xx {
+		u32 pnum : 8;
+		u32 reserved_22_23 : 2;
+		u32 lbnc : 1;
+		u32 dllarc : 1;
+		u32 sderc : 1;
+		u32 cpm : 1;
+		u32 l1el : 3;
+		u32 l0el : 3;
+		u32 aslpms : 2;
+		u32 mlw : 6;
+		u32 mls : 4;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg031_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg031_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg031_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg031_s cn61xx;
+	struct cvmx_pcieepx_cfg031_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg031_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg031_s cn66xx;
+	struct cvmx_pcieepx_cfg031_s cn68xx;
+	struct cvmx_pcieepx_cfg031_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg031_s cn70xx;
+	struct cvmx_pcieepx_cfg031_s cn70xxp1;
+	struct cvmx_pcieepx_cfg031_s cn73xx;
+	struct cvmx_pcieepx_cfg031_s cn78xx;
+	struct cvmx_pcieepx_cfg031_s cn78xxp1;
+	struct cvmx_pcieepx_cfg031_s cnf71xx;
+	struct cvmx_pcieepx_cfg031_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg031 cvmx_pcieepx_cfg031_t;
+
+/**
+ * cvmx_pcieep#_cfg032
+ *
+ * This register contains the thirty-third 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg032 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg032_s {
+		u32 lab : 1;
+		u32 lbm : 1;
+		u32 dlla : 1;
+		u32 scc : 1;
+		u32 lt : 1;
+		u32 reserved_26_26 : 1;
+		u32 nlw : 6;
+		u32 ls : 4;
+		u32 reserved_12_15 : 4;
+		u32 lab_int_enb : 1;
+		u32 lbm_int_enb : 1;
+		u32 hawd : 1;
+		u32 ecpm : 1;
+		u32 es : 1;
+		u32 ccc : 1;
+		u32 rl : 1;
+		u32 ld : 1;
+		u32 rcb : 1;
+		u32 reserved_2_2 : 1;
+		u32 aslpc : 2;
+	} s;
+	struct cvmx_pcieepx_cfg032_cn52xx {
+		u32 reserved_30_31 : 2;
+		u32 dlla : 1;
+		u32 scc : 1;
+		u32 lt : 1;
+		u32 reserved_26_26 : 1;
+		u32 nlw : 6;
+		u32 ls : 4;
+		u32 reserved_10_15 : 6;
+		u32 hawd : 1;
+		u32 ecpm : 1;
+		u32 es : 1;
+		u32 ccc : 1;
+		u32 rl : 1;
+		u32 ld : 1;
+		u32 rcb : 1;
+		u32 reserved_2_2 : 1;
+		u32 aslpc : 2;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg032_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg032_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg032_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg032_s cn61xx;
+	struct cvmx_pcieepx_cfg032_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg032_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg032_s cn66xx;
+	struct cvmx_pcieepx_cfg032_s cn68xx;
+	struct cvmx_pcieepx_cfg032_cn68xxp1 {
+		u32 reserved_30_31 : 2;
+		u32 dlla : 1;
+		u32 scc : 1;
+		u32 lt : 1;
+		u32 reserved_26_26 : 1;
+		u32 nlw : 6;
+		u32 ls : 4;
+		u32 reserved_12_15 : 4;
+		u32 lab_int_enb : 1;
+		u32 lbm_int_enb : 1;
+		u32 hawd : 1;
+		u32 ecpm : 1;
+		u32 es : 1;
+		u32 ccc : 1;
+		u32 rl : 1;
+		u32 ld : 1;
+		u32 rcb : 1;
+		u32 reserved_2_2 : 1;
+		u32 aslpc : 2;
+	} cn68xxp1;
+	struct cvmx_pcieepx_cfg032_s cn70xx;
+	struct cvmx_pcieepx_cfg032_s cn70xxp1;
+	struct cvmx_pcieepx_cfg032_s cn73xx;
+	struct cvmx_pcieepx_cfg032_s cn78xx;
+	struct cvmx_pcieepx_cfg032_s cn78xxp1;
+	struct cvmx_pcieepx_cfg032_s cnf71xx;
+	struct cvmx_pcieepx_cfg032_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg032 cvmx_pcieepx_cfg032_t;
+
+/**
+ * cvmx_pcieep#_cfg033
+ *
+ * PCIE_CFG033 = Thirty-fourth 32-bits of PCIE type 0 config space
+ * (Slot Capabilities Register)
+ */
+union cvmx_pcieepx_cfg033 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg033_s {
+		u32 ps_num : 13;
+		u32 nccs : 1;
+		u32 emip : 1;
+		u32 sp_ls : 2;
+		u32 sp_lv : 8;
+		u32 hp_c : 1;
+		u32 hp_s : 1;
+		u32 pip : 1;
+		u32 aip : 1;
+		u32 mrlsp : 1;
+		u32 pcp : 1;
+		u32 abp : 1;
+	} s;
+	struct cvmx_pcieepx_cfg033_s cn52xx;
+	struct cvmx_pcieepx_cfg033_s cn52xxp1;
+	struct cvmx_pcieepx_cfg033_s cn56xx;
+	struct cvmx_pcieepx_cfg033_s cn56xxp1;
+	struct cvmx_pcieepx_cfg033_s cn63xx;
+	struct cvmx_pcieepx_cfg033_s cn63xxp1;
+};
+
+typedef union cvmx_pcieepx_cfg033 cvmx_pcieepx_cfg033_t;
+
+/**
+ * cvmx_pcieep#_cfg034
+ *
+ * PCIE_CFG034 = Thirty-fifth 32-bits of PCIE type 0 config space
+ * (Slot Control Register/Slot Status Register)
+ */
+union cvmx_pcieepx_cfg034 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg034_s {
+		u32 reserved_25_31 : 7;
+		u32 dlls_c : 1;
+		u32 emis : 1;
+		u32 pds : 1;
+		u32 mrlss : 1;
+		u32 ccint_d : 1;
+		u32 pd_c : 1;
+		u32 mrls_c : 1;
+		u32 pf_d : 1;
+		u32 abp_d : 1;
+		u32 reserved_13_15 : 3;
+		u32 dlls_en : 1;
+		u32 emic : 1;
+		u32 pcc : 1;
+		u32 pic : 2;
+		u32 aic : 2;
+		u32 hpint_en : 1;
+		u32 ccint_en : 1;
+		u32 pd_en : 1;
+		u32 mrls_en : 1;
+		u32 pf_en : 1;
+		u32 abp_en : 1;
+	} s;
+	struct cvmx_pcieepx_cfg034_s cn52xx;
+	struct cvmx_pcieepx_cfg034_s cn52xxp1;
+	struct cvmx_pcieepx_cfg034_s cn56xx;
+	struct cvmx_pcieepx_cfg034_s cn56xxp1;
+	struct cvmx_pcieepx_cfg034_s cn63xx;
+	struct cvmx_pcieepx_cfg034_s cn63xxp1;
+};
+
+typedef union cvmx_pcieepx_cfg034 cvmx_pcieepx_cfg034_t;
+
+/**
+ * cvmx_pcieep#_cfg037
+ *
+ * This register contains the thirty-eighth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg037 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg037_s {
+		u32 reserved_24_31 : 8;
+		u32 meetp : 2;
+		u32 eetps : 1;
+		u32 effs : 1;
+		u32 obffs : 2;
+		u32 reserved_12_17 : 6;
+		u32 ltrs : 1;
+		u32 noroprpr : 1;
+		u32 atom128s : 1;
+		u32 atom64s : 1;
+		u32 atom32s : 1;
+		u32 atom_ops : 1;
+		u32 ari : 1;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} s;
+	struct cvmx_pcieepx_cfg037_cn52xx {
+		u32 reserved_5_31 : 27;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg037_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg037_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg037_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg037_cn61xx {
+		u32 reserved_14_31 : 18;
+		u32 tph : 2;
+		u32 reserved_11_11 : 1;
+		u32 noroprpr : 1;
+		u32 atom128s : 1;
+		u32 atom64s : 1;
+		u32 atom32s : 1;
+		u32 atom_ops : 1;
+		u32 ari : 1;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg037_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg037_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg037_cn61xx cn66xx;
+	struct cvmx_pcieepx_cfg037_cn61xx cn68xx;
+	struct cvmx_pcieepx_cfg037_cn61xx cn68xxp1;
+	struct cvmx_pcieepx_cfg037_cn61xx cn70xx;
+	struct cvmx_pcieepx_cfg037_cn61xx cn70xxp1;
+	struct cvmx_pcieepx_cfg037_cn73xx {
+		u32 reserved_24_31 : 8;
+		u32 meetp : 2;
+		u32 eetps : 1;
+		u32 effs : 1;
+		u32 obffs : 2;
+		u32 reserved_14_17 : 4;
+		u32 tphs : 2;
+		u32 ltrs : 1;
+		u32 noroprpr : 1;
+		u32 atom128s : 1;
+		u32 atom64s : 1;
+		u32 atom32s : 1;
+		u32 atom_ops : 1;
+		u32 ari : 1;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg037_cn73xx cn78xx;
+	struct cvmx_pcieepx_cfg037_cn73xx cn78xxp1;
+	struct cvmx_pcieepx_cfg037_cnf71xx {
+		u32 reserved_20_31 : 12;
+		u32 obffs : 2;
+		u32 reserved_14_17 : 4;
+		u32 tphs : 2;
+		u32 ltrs : 1;
+		u32 noroprpr : 1;
+		u32 atom128s : 1;
+		u32 atom64s : 1;
+		u32 atom32s : 1;
+		u32 atom_ops : 1;
+		u32 ari : 1;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} cnf71xx;
+	struct cvmx_pcieepx_cfg037_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg037 cvmx_pcieepx_cfg037_t;
+
+/**
+ * cvmx_pcieep#_cfg038
+ *
+ * This register contains the thirty-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg038 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg038_s {
+		u32 reserved_16_31 : 16;
+		u32 eetpb : 1;
+		u32 obffe : 2;
+		u32 reserved_11_12 : 2;
+		u32 ltre : 1;
+		u32 id0_cp : 1;
+		u32 id0_rq : 1;
+		u32 atom_op_eb : 1;
+		u32 atom_op : 1;
+		u32 ari : 1;
+		u32 ctd : 1;
+		u32 ctv : 4;
+	} s;
+	struct cvmx_pcieepx_cfg038_cn52xx {
+		u32 reserved_5_31 : 27;
+		u32 ctd : 1;
+		u32 ctv : 4;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg038_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg038_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg038_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg038_cn61xx {
+		u32 reserved_10_31 : 22;
+		u32 id0_cp : 1;
+		u32 id0_rq : 1;
+		u32 atom_op_eb : 1;
+		u32 atom_op : 1;
+		u32 ari : 1;
+		u32 ctd : 1;
+		u32 ctv : 4;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg038_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg038_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg038_cn61xx cn66xx;
+	struct cvmx_pcieepx_cfg038_cn61xx cn68xx;
+	struct cvmx_pcieepx_cfg038_cn61xx cn68xxp1;
+	struct cvmx_pcieepx_cfg038_cn61xx cn70xx;
+	struct cvmx_pcieepx_cfg038_cn61xx cn70xxp1;
+	struct cvmx_pcieepx_cfg038_s cn73xx;
+	struct cvmx_pcieepx_cfg038_s cn78xx;
+	struct cvmx_pcieepx_cfg038_s cn78xxp1;
+	struct cvmx_pcieepx_cfg038_cnf71xx {
+		u32 reserved_15_31 : 17;
+		u32 obffe : 2;
+		u32 reserved_11_12 : 2;
+		u32 ltre : 1;
+		u32 id0_cp : 1;
+		u32 id0_rq : 1;
+		u32 atom_op_eb : 1;
+		u32 atom_op : 1;
+		u32 ari : 1;
+		u32 ctd : 1;
+		u32 ctv : 4;
+	} cnf71xx;
+	struct cvmx_pcieepx_cfg038_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg038 cvmx_pcieepx_cfg038_t;
+
+/**
+ * cvmx_pcieep#_cfg039
+ *
+ * This register contains the fortieth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg039 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg039_s {
+		u32 reserved_9_31 : 23;
+		u32 cls : 1;
+		u32 slsv : 7;
+		u32 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pcieepx_cfg039_cn52xx {
+		u32 reserved_0_31 : 32;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg039_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg039_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg039_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg039_s cn61xx;
+	struct cvmx_pcieepx_cfg039_s cn63xx;
+	struct cvmx_pcieepx_cfg039_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg039_s cn66xx;
+	struct cvmx_pcieepx_cfg039_s cn68xx;
+	struct cvmx_pcieepx_cfg039_s cn68xxp1;
+	struct cvmx_pcieepx_cfg039_s cn70xx;
+	struct cvmx_pcieepx_cfg039_s cn70xxp1;
+	struct cvmx_pcieepx_cfg039_s cn73xx;
+	struct cvmx_pcieepx_cfg039_s cn78xx;
+	struct cvmx_pcieepx_cfg039_s cn78xxp1;
+	struct cvmx_pcieepx_cfg039_s cnf71xx;
+	struct cvmx_pcieepx_cfg039_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg039 cvmx_pcieepx_cfg039_t;
+
+/**
+ * cvmx_pcieep#_cfg040
+ *
+ * This register contains the forty-first 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg040 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg040_s {
+		u32 reserved_22_31 : 10;
+		u32 ler : 1;
+		u32 ep3s : 1;
+		u32 ep2s : 1;
+		u32 ep1s : 1;
+		u32 eqc : 1;
+		u32 cdl : 1;
+		u32 cde : 4;
+		u32 csos : 1;
+		u32 emc : 1;
+		u32 tm : 3;
+		u32 sde : 1;
+		u32 hasd : 1;
+		u32 ec : 1;
+		u32 tls : 4;
+	} s;
+	struct cvmx_pcieepx_cfg040_cn52xx {
+		u32 reserved_0_31 : 32;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg040_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg040_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg040_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg040_cn61xx {
+		u32 reserved_17_31 : 15;
+		u32 cdl : 1;
+		u32 reserved_13_15 : 3;
+		u32 cde : 1;
+		u32 csos : 1;
+		u32 emc : 1;
+		u32 tm : 3;
+		u32 sde : 1;
+		u32 hasd : 1;
+		u32 ec : 1;
+		u32 tls : 4;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg040_cn61xx cn63xx;
+	struct cvmx_pcieepx_cfg040_cn61xx cn63xxp1;
+	struct cvmx_pcieepx_cfg040_cn61xx cn66xx;
+	struct cvmx_pcieepx_cfg040_cn61xx cn68xx;
+	struct cvmx_pcieepx_cfg040_cn61xx cn68xxp1;
+	struct cvmx_pcieepx_cfg040_cn61xx cn70xx;
+	struct cvmx_pcieepx_cfg040_cn61xx cn70xxp1;
+	struct cvmx_pcieepx_cfg040_s cn73xx;
+	struct cvmx_pcieepx_cfg040_s cn78xx;
+	struct cvmx_pcieepx_cfg040_s cn78xxp1;
+	struct cvmx_pcieepx_cfg040_cn61xx cnf71xx;
+	struct cvmx_pcieepx_cfg040_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg040 cvmx_pcieepx_cfg040_t;
+
+/**
+ * cvmx_pcieep#_cfg041
+ *
+ * PCIE_CFG041 = Fourty-second 32-bits of PCIE type 0 config space
+ * (Slot Capabilities 2 Register)
+ */
+union cvmx_pcieepx_cfg041 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg041_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg041_s cn52xx;
+	struct cvmx_pcieepx_cfg041_s cn52xxp1;
+	struct cvmx_pcieepx_cfg041_s cn56xx;
+	struct cvmx_pcieepx_cfg041_s cn56xxp1;
+	struct cvmx_pcieepx_cfg041_s cn63xx;
+	struct cvmx_pcieepx_cfg041_s cn63xxp1;
+};
+
+typedef union cvmx_pcieepx_cfg041 cvmx_pcieepx_cfg041_t;
+
+/**
+ * cvmx_pcieep#_cfg042
+ *
+ * PCIE_CFG042 = Fourty-third 32-bits of PCIE type 0 config space
+ * (Slot Control 2 Register/Slot Status 2 Register)
+ */
+union cvmx_pcieepx_cfg042 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg042_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg042_s cn52xx;
+	struct cvmx_pcieepx_cfg042_s cn52xxp1;
+	struct cvmx_pcieepx_cfg042_s cn56xx;
+	struct cvmx_pcieepx_cfg042_s cn56xxp1;
+	struct cvmx_pcieepx_cfg042_s cn63xx;
+	struct cvmx_pcieepx_cfg042_s cn63xxp1;
+};
+
+typedef union cvmx_pcieepx_cfg042 cvmx_pcieepx_cfg042_t;
+
+/**
+ * cvmx_pcieep#_cfg044
+ *
+ * This register contains the forty-fifth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg044 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg044_s {
+		u32 msixen : 1;
+		u32 funm : 1;
+		u32 reserved_27_29 : 3;
+		u32 msixts : 11;
+		u32 ncp : 8;
+		u32 msixcid : 8;
+	} s;
+	struct cvmx_pcieepx_cfg044_s cn73xx;
+	struct cvmx_pcieepx_cfg044_s cn78xx;
+	struct cvmx_pcieepx_cfg044_s cn78xxp1;
+	struct cvmx_pcieepx_cfg044_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg044 cvmx_pcieepx_cfg044_t;
+
+/**
+ * cvmx_pcieep#_cfg045
+ *
+ * This register contains the forty-sixth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg045 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg045_s {
+		u32 msixtoffs : 29;
+		u32 msixtbir : 3;
+	} s;
+	struct cvmx_pcieepx_cfg045_s cn73xx;
+	struct cvmx_pcieepx_cfg045_s cn78xx;
+	struct cvmx_pcieepx_cfg045_s cn78xxp1;
+	struct cvmx_pcieepx_cfg045_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg045 cvmx_pcieepx_cfg045_t;
+
+/**
+ * cvmx_pcieep#_cfg046
+ *
+ * This register contains the forty-seventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg046 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg046_s {
+		u32 msixpoffs : 29;
+		u32 msixpbir : 3;
+	} s;
+	struct cvmx_pcieepx_cfg046_s cn73xx;
+	struct cvmx_pcieepx_cfg046_s cn78xx;
+	struct cvmx_pcieepx_cfg046_s cn78xxp1;
+	struct cvmx_pcieepx_cfg046_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg046 cvmx_pcieepx_cfg046_t;
+
+/**
+ * cvmx_pcieep#_cfg064
+ *
+ * This register contains the sixty-fifth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg064 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg064_s {
+		u32 nco : 12;
+		u32 cv : 4;
+		u32 pcieec : 16;
+	} s;
+	struct cvmx_pcieepx_cfg064_s cn52xx;
+	struct cvmx_pcieepx_cfg064_s cn52xxp1;
+	struct cvmx_pcieepx_cfg064_s cn56xx;
+	struct cvmx_pcieepx_cfg064_s cn56xxp1;
+	struct cvmx_pcieepx_cfg064_s cn61xx;
+	struct cvmx_pcieepx_cfg064_s cn63xx;
+	struct cvmx_pcieepx_cfg064_s cn63xxp1;
+	struct cvmx_pcieepx_cfg064_s cn66xx;
+	struct cvmx_pcieepx_cfg064_s cn68xx;
+	struct cvmx_pcieepx_cfg064_s cn68xxp1;
+	struct cvmx_pcieepx_cfg064_s cn70xx;
+	struct cvmx_pcieepx_cfg064_s cn70xxp1;
+	struct cvmx_pcieepx_cfg064_s cn73xx;
+	struct cvmx_pcieepx_cfg064_s cn78xx;
+	struct cvmx_pcieepx_cfg064_s cn78xxp1;
+	struct cvmx_pcieepx_cfg064_s cnf71xx;
+	struct cvmx_pcieepx_cfg064_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg064 cvmx_pcieepx_cfg064_t;
+
+/**
+ * cvmx_pcieep#_cfg065
+ *
+ * This register contains the sixty-sixth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg065 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg065_s {
+		u32 reserved_26_31 : 6;
+		u32 tpbes : 1;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} s;
+	struct cvmx_pcieepx_cfg065_cn52xx {
+		u32 reserved_21_31 : 11;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg065_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg065_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg065_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg065_cn61xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombs : 1;
+		u32 reserved_21_23 : 3;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg065_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg065_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg065_cn61xx cn66xx;
+	struct cvmx_pcieepx_cfg065_cn61xx cn68xx;
+	struct cvmx_pcieepx_cfg065_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg065_cn70xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_pcieepx_cfg065_cn70xx cn70xxp1;
+	struct cvmx_pcieepx_cfg065_cn73xx {
+		u32 reserved_26_31 : 6;
+		u32 tpbes : 1;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_5_11 : 7;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg065_cn73xx cn78xx;
+	struct cvmx_pcieepx_cfg065_cn73xx cn78xxp1;
+	struct cvmx_pcieepx_cfg065_cnf71xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_5_11 : 7;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cnf71xx;
+	struct cvmx_pcieepx_cfg065_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg065 cvmx_pcieepx_cfg065_t;
+
+/**
+ * cvmx_pcieep#_cfg066
+ *
+ * This register contains the sixty-seventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg066 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg066_s {
+		u32 reserved_26_31 : 6;
+		u32 tpbem : 1;
+		u32 uatombm : 1;
+		u32 reserved_23_23 : 1;
+		u32 uciem : 1;
+		u32 reserved_21_21 : 1;
+		u32 urem : 1;
+		u32 ecrcem : 1;
+		u32 mtlpm : 1;
+		u32 rom : 1;
+		u32 ucm : 1;
+		u32 cam : 1;
+		u32 ctm : 1;
+		u32 fcpem : 1;
+		u32 ptlpm : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdem : 1;
+		u32 dlpem : 1;
+		u32 reserved_0_3 : 4;
+	} s;
+	struct cvmx_pcieepx_cfg066_cn52xx {
+		u32 reserved_21_31 : 11;
+		u32 urem : 1;
+		u32 ecrcem : 1;
+		u32 mtlpm : 1;
+		u32 rom : 1;
+		u32 ucm : 1;
+		u32 cam : 1;
+		u32 ctm : 1;
+		u32 fcpem : 1;
+		u32 ptlpm : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdem : 1;
+		u32 dlpem : 1;
+		u32 reserved_0_3 : 4;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg066_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg066_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg066_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg066_cn61xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombm : 1;
+		u32 reserved_21_23 : 3;
+		u32 urem : 1;
+		u32 ecrcem : 1;
+		u32 mtlpm : 1;
+		u32 rom : 1;
+		u32 ucm : 1;
+		u32 cam : 1;
+		u32 ctm : 1;
+		u32 fcpem : 1;
+		u32 ptlpm : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdem : 1;
+		u32 dlpem : 1;
+		u32 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg066_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg066_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg066_cn61xx cn66xx;
+	struct cvmx_pcieepx_cfg066_cn61xx cn68xx;
+	struct cvmx_pcieepx_cfg066_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg066_cn70xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombm : 1;
+		u32 reserved_23_23 : 1;
+		u32 uciem : 1;
+		u32 reserved_21_21 : 1;
+		u32 urem : 1;
+		u32 ecrcem : 1;
+		u32 mtlpm : 1;
+		u32 rom : 1;
+		u32 ucm : 1;
+		u32 cam : 1;
+		u32 ctm : 1;
+		u32 fcpem : 1;
+		u32 ptlpm : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdem : 1;
+		u32 dlpem : 1;
+		u32 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_pcieepx_cfg066_cn70xx cn70xxp1;
+	struct cvmx_pcieepx_cfg066_cn73xx {
+		u32 reserved_26_31 : 6;
+		u32 tpbem : 1;
+		u32 uatombm : 1;
+		u32 reserved_23_23 : 1;
+		u32 uciem : 1;
+		u32 reserved_21_21 : 1;
+		u32 urem : 1;
+		u32 ecrcem : 1;
+		u32 mtlpm : 1;
+		u32 rom : 1;
+		u32 ucm : 1;
+		u32 cam : 1;
+		u32 ctm : 1;
+		u32 fcpem : 1;
+		u32 ptlpm : 1;
+		u32 reserved_5_11 : 7;
+		u32 dlpem : 1;
+		u32 reserved_0_3 : 4;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg066_cn73xx cn78xx;
+	struct cvmx_pcieepx_cfg066_cn73xx cn78xxp1;
+	struct cvmx_pcieepx_cfg066_cnf71xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombm : 1;
+		u32 reserved_23_23 : 1;
+		u32 uciem : 1;
+		u32 reserved_21_21 : 1;
+		u32 urem : 1;
+		u32 ecrcem : 1;
+		u32 mtlpm : 1;
+		u32 rom : 1;
+		u32 ucm : 1;
+		u32 cam : 1;
+		u32 ctm : 1;
+		u32 fcpem : 1;
+		u32 ptlpm : 1;
+		u32 reserved_5_11 : 7;
+		u32 dlpem : 1;
+		u32 reserved_0_3 : 4;
+	} cnf71xx;
+	struct cvmx_pcieepx_cfg066_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg066 cvmx_pcieepx_cfg066_t;
+
+/**
+ * cvmx_pcieep#_cfg067
+ *
+ * This register contains the sixty-eighth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg067 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg067_s {
+		u32 reserved_26_31 : 6;
+		u32 tpbes : 1;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} s;
+	struct cvmx_pcieepx_cfg067_cn52xx {
+		u32 reserved_21_31 : 11;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg067_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg067_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg067_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg067_cn61xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombs : 1;
+		u32 reserved_21_23 : 3;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg067_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg067_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg067_cn61xx cn66xx;
+	struct cvmx_pcieepx_cfg067_cn61xx cn68xx;
+	struct cvmx_pcieepx_cfg067_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg067_cn70xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_pcieepx_cfg067_cn70xx cn70xxp1;
+	struct cvmx_pcieepx_cfg067_cn73xx {
+		u32 reserved_26_31 : 6;
+		u32 tpbes : 1;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_11_5 : 7;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg067_cn73xx cn78xx;
+	struct cvmx_pcieepx_cfg067_cn73xx cn78xxp1;
+	struct cvmx_pcieepx_cfg067_cnf71xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_5_11 : 7;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cnf71xx;
+	struct cvmx_pcieepx_cfg067_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg067 cvmx_pcieepx_cfg067_t;
+
+/**
+ * cvmx_pcieep#_cfg068
+ *
+ * This register contains the sixty-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg068 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg068_s {
+		u32 reserved_15_31 : 17;
+		u32 cies : 1;
+		u32 anfes : 1;
+		u32 rtts : 1;
+		u32 reserved_9_11 : 3;
+		u32 rnrs : 1;
+		u32 bdllps : 1;
+		u32 btlps : 1;
+		u32 reserved_1_5 : 5;
+		u32 res : 1;
+	} s;
+	struct cvmx_pcieepx_cfg068_cn52xx {
+		u32 reserved_14_31 : 18;
+		u32 anfes : 1;
+		u32 rtts : 1;
+		u32 reserved_9_11 : 3;
+		u32 rnrs : 1;
+		u32 bdllps : 1;
+		u32 btlps : 1;
+		u32 reserved_1_5 : 5;
+		u32 res : 1;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg068_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg068_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg068_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg068_cn52xx cn61xx;
+	struct cvmx_pcieepx_cfg068_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg068_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg068_cn52xx cn66xx;
+	struct cvmx_pcieepx_cfg068_cn52xx cn68xx;
+	struct cvmx_pcieepx_cfg068_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg068_s cn70xx;
+	struct cvmx_pcieepx_cfg068_s cn70xxp1;
+	struct cvmx_pcieepx_cfg068_s cn73xx;
+	struct cvmx_pcieepx_cfg068_s cn78xx;
+	struct cvmx_pcieepx_cfg068_s cn78xxp1;
+	struct cvmx_pcieepx_cfg068_s cnf71xx;
+	struct cvmx_pcieepx_cfg068_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg068 cvmx_pcieepx_cfg068_t;
+
+/**
+ * cvmx_pcieep#_cfg069
+ *
+ * This register contains the seventieth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg069 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg069_s {
+		u32 reserved_15_31 : 17;
+		u32 ciem : 1;
+		u32 anfem : 1;
+		u32 rttm : 1;
+		u32 reserved_9_11 : 3;
+		u32 rnrm : 1;
+		u32 bdllpm : 1;
+		u32 btlpm : 1;
+		u32 reserved_1_5 : 5;
+		u32 rem : 1;
+	} s;
+	struct cvmx_pcieepx_cfg069_cn52xx {
+		u32 reserved_14_31 : 18;
+		u32 anfem : 1;
+		u32 rttm : 1;
+		u32 reserved_9_11 : 3;
+		u32 rnrm : 1;
+		u32 bdllpm : 1;
+		u32 btlpm : 1;
+		u32 reserved_1_5 : 5;
+		u32 rem : 1;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg069_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg069_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg069_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg069_cn52xx cn61xx;
+	struct cvmx_pcieepx_cfg069_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg069_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg069_cn52xx cn66xx;
+	struct cvmx_pcieepx_cfg069_cn52xx cn68xx;
+	struct cvmx_pcieepx_cfg069_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg069_s cn70xx;
+	struct cvmx_pcieepx_cfg069_s cn70xxp1;
+	struct cvmx_pcieepx_cfg069_s cn73xx;
+	struct cvmx_pcieepx_cfg069_s cn78xx;
+	struct cvmx_pcieepx_cfg069_s cn78xxp1;
+	struct cvmx_pcieepx_cfg069_s cnf71xx;
+	struct cvmx_pcieepx_cfg069_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg069 cvmx_pcieepx_cfg069_t;
+
+/**
+ * cvmx_pcieep#_cfg070
+ *
+ * This register contains the seventy-first 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg070 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg070_s {
+		u32 reserved_12_31 : 20;
+		u32 tlp_plp : 1;
+		u32 reserved_9_10 : 2;
+		u32 ce : 1;
+		u32 cc : 1;
+		u32 ge : 1;
+		u32 gc : 1;
+		u32 fep : 5;
+	} s;
+	struct cvmx_pcieepx_cfg070_cn52xx {
+		u32 reserved_9_31 : 23;
+		u32 ce : 1;
+		u32 cc : 1;
+		u32 ge : 1;
+		u32 gc : 1;
+		u32 fep : 5;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg070_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg070_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg070_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg070_cn52xx cn61xx;
+	struct cvmx_pcieepx_cfg070_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg070_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg070_cn52xx cn66xx;
+	struct cvmx_pcieepx_cfg070_cn52xx cn68xx;
+	struct cvmx_pcieepx_cfg070_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg070_cn52xx cn70xx;
+	struct cvmx_pcieepx_cfg070_cn52xx cn70xxp1;
+	struct cvmx_pcieepx_cfg070_s cn73xx;
+	struct cvmx_pcieepx_cfg070_s cn78xx;
+	struct cvmx_pcieepx_cfg070_s cn78xxp1;
+	struct cvmx_pcieepx_cfg070_cn52xx cnf71xx;
+	struct cvmx_pcieepx_cfg070_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg070 cvmx_pcieepx_cfg070_t;
+
+/**
+ * cvmx_pcieep#_cfg071
+ *
+ * This register contains the seventy-second 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg071 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg071_s {
+		u32 dword1 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg071_s cn52xx;
+	struct cvmx_pcieepx_cfg071_s cn52xxp1;
+	struct cvmx_pcieepx_cfg071_s cn56xx;
+	struct cvmx_pcieepx_cfg071_s cn56xxp1;
+	struct cvmx_pcieepx_cfg071_s cn61xx;
+	struct cvmx_pcieepx_cfg071_s cn63xx;
+	struct cvmx_pcieepx_cfg071_s cn63xxp1;
+	struct cvmx_pcieepx_cfg071_s cn66xx;
+	struct cvmx_pcieepx_cfg071_s cn68xx;
+	struct cvmx_pcieepx_cfg071_s cn68xxp1;
+	struct cvmx_pcieepx_cfg071_s cn70xx;
+	struct cvmx_pcieepx_cfg071_s cn70xxp1;
+	struct cvmx_pcieepx_cfg071_s cn73xx;
+	struct cvmx_pcieepx_cfg071_s cn78xx;
+	struct cvmx_pcieepx_cfg071_s cn78xxp1;
+	struct cvmx_pcieepx_cfg071_s cnf71xx;
+	struct cvmx_pcieepx_cfg071_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg071 cvmx_pcieepx_cfg071_t;
+
+/**
+ * cvmx_pcieep#_cfg072
+ *
+ * This register contains the seventy-third 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg072 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg072_s {
+		u32 dword2 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg072_s cn52xx;
+	struct cvmx_pcieepx_cfg072_s cn52xxp1;
+	struct cvmx_pcieepx_cfg072_s cn56xx;
+	struct cvmx_pcieepx_cfg072_s cn56xxp1;
+	struct cvmx_pcieepx_cfg072_s cn61xx;
+	struct cvmx_pcieepx_cfg072_s cn63xx;
+	struct cvmx_pcieepx_cfg072_s cn63xxp1;
+	struct cvmx_pcieepx_cfg072_s cn66xx;
+	struct cvmx_pcieepx_cfg072_s cn68xx;
+	struct cvmx_pcieepx_cfg072_s cn68xxp1;
+	struct cvmx_pcieepx_cfg072_s cn70xx;
+	struct cvmx_pcieepx_cfg072_s cn70xxp1;
+	struct cvmx_pcieepx_cfg072_s cn73xx;
+	struct cvmx_pcieepx_cfg072_s cn78xx;
+	struct cvmx_pcieepx_cfg072_s cn78xxp1;
+	struct cvmx_pcieepx_cfg072_s cnf71xx;
+	struct cvmx_pcieepx_cfg072_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg072 cvmx_pcieepx_cfg072_t;
+
+/**
+ * cvmx_pcieep#_cfg073
+ *
+ * This register contains the seventy-fourth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg073 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg073_s {
+		u32 dword3 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg073_s cn52xx;
+	struct cvmx_pcieepx_cfg073_s cn52xxp1;
+	struct cvmx_pcieepx_cfg073_s cn56xx;
+	struct cvmx_pcieepx_cfg073_s cn56xxp1;
+	struct cvmx_pcieepx_cfg073_s cn61xx;
+	struct cvmx_pcieepx_cfg073_s cn63xx;
+	struct cvmx_pcieepx_cfg073_s cn63xxp1;
+	struct cvmx_pcieepx_cfg073_s cn66xx;
+	struct cvmx_pcieepx_cfg073_s cn68xx;
+	struct cvmx_pcieepx_cfg073_s cn68xxp1;
+	struct cvmx_pcieepx_cfg073_s cn70xx;
+	struct cvmx_pcieepx_cfg073_s cn70xxp1;
+	struct cvmx_pcieepx_cfg073_s cn73xx;
+	struct cvmx_pcieepx_cfg073_s cn78xx;
+	struct cvmx_pcieepx_cfg073_s cn78xxp1;
+	struct cvmx_pcieepx_cfg073_s cnf71xx;
+	struct cvmx_pcieepx_cfg073_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg073 cvmx_pcieepx_cfg073_t;
+
+/**
+ * cvmx_pcieep#_cfg074
+ *
+ * This register contains the seventy-fifth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg074 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg074_s {
+		u32 dword4 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg074_s cn52xx;
+	struct cvmx_pcieepx_cfg074_s cn52xxp1;
+	struct cvmx_pcieepx_cfg074_s cn56xx;
+	struct cvmx_pcieepx_cfg074_s cn56xxp1;
+	struct cvmx_pcieepx_cfg074_s cn61xx;
+	struct cvmx_pcieepx_cfg074_s cn63xx;
+	struct cvmx_pcieepx_cfg074_s cn63xxp1;
+	struct cvmx_pcieepx_cfg074_s cn66xx;
+	struct cvmx_pcieepx_cfg074_s cn68xx;
+	struct cvmx_pcieepx_cfg074_s cn68xxp1;
+	struct cvmx_pcieepx_cfg074_s cn70xx;
+	struct cvmx_pcieepx_cfg074_s cn70xxp1;
+	struct cvmx_pcieepx_cfg074_s cn73xx;
+	struct cvmx_pcieepx_cfg074_s cn78xx;
+	struct cvmx_pcieepx_cfg074_s cn78xxp1;
+	struct cvmx_pcieepx_cfg074_s cnf71xx;
+	struct cvmx_pcieepx_cfg074_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg074 cvmx_pcieepx_cfg074_t;
+
+/**
+ * cvmx_pcieep#_cfg078
+ *
+ * This register contains the seventy-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg078 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg078_s {
+		u32 tlp_pfx_log : 32;
+	} s;
+	struct cvmx_pcieepx_cfg078_s cn73xx;
+	struct cvmx_pcieepx_cfg078_s cn78xx;
+	struct cvmx_pcieepx_cfg078_s cn78xxp1;
+	struct cvmx_pcieepx_cfg078_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg078 cvmx_pcieepx_cfg078_t;
+
+/**
+ * cvmx_pcieep#_cfg082
+ *
+ * This register contains the eighty-third 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg082 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg082_s {
+		u32 nco : 12;
+		u32 cv : 4;
+		u32 reserved_0_15 : 16;
+	} s;
+	struct cvmx_pcieepx_cfg082_cn70xx {
+		u32 nco : 12;
+		u32 cv : 4;
+		u32 pcieec : 16;
+	} cn70xx;
+	struct cvmx_pcieepx_cfg082_cn70xx cn70xxp1;
+	struct cvmx_pcieepx_cfg082_cn73xx {
+		u32 nco : 12;
+		u32 cv : 4;
+		u32 ariid : 16;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg082_cn73xx cn78xx;
+	struct cvmx_pcieepx_cfg082_cn73xx cn78xxp1;
+	struct cvmx_pcieepx_cfg082_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg082 cvmx_pcieepx_cfg082_t;
+
+/**
+ * cvmx_pcieep#_cfg083
+ *
+ * This register contains the eighty-fourth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg083 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg083_s {
+		u32 reserved_2_31 : 30;
+		u32 acsfgc : 1;
+		u32 mfvcfgc : 1;
+	} s;
+	struct cvmx_pcieepx_cfg083_cn70xx {
+		u32 reserved_26_31 : 6;
+		u32 srs : 22;
+		u32 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_pcieepx_cfg083_cn70xx cn70xxp1;
+	struct cvmx_pcieepx_cfg083_cn73xx {
+		u32 reserved_23_31 : 9;
+		u32 fg : 3;
+		u32 reserved_18_19 : 2;
+		u32 acsfge : 1;
+		u32 mfvcfge : 1;
+		u32 nfn : 8;
+		u32 reserved_2_7 : 6;
+		u32 acsfgc : 1;
+		u32 mfvcfgc : 1;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg083_cn73xx cn78xx;
+	struct cvmx_pcieepx_cfg083_cn73xx cn78xxp1;
+	struct cvmx_pcieepx_cfg083_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg083 cvmx_pcieepx_cfg083_t;
+
+/**
+ * cvmx_pcieep#_cfg084
+ *
+ * PCIE_CFG084 = Eighty-fifth 32-bits of PCIE type 0 config space
+ * (PCI Express Resizable BAR (RBAR) Control Register)
+ */
+union cvmx_pcieepx_cfg084 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg084_s {
+		u32 reserved_13_31 : 19;
+		u32 rbars : 5;
+		u32 nrbar : 3;
+		u32 reserved_3_4 : 2;
+		u32 rbari : 3;
+	} s;
+	struct cvmx_pcieepx_cfg084_s cn70xx;
+	struct cvmx_pcieepx_cfg084_s cn70xxp1;
+};
+
+typedef union cvmx_pcieepx_cfg084 cvmx_pcieepx_cfg084_t;
+
+/**
+ * cvmx_pcieep#_cfg086
+ *
+ * This register contains the eighty-seventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg086 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg086_s {
+		u32 nco : 12;
+		u32 cv : 4;
+		u32 pcieec : 16;
+	} s;
+	struct cvmx_pcieepx_cfg086_s cn73xx;
+	struct cvmx_pcieepx_cfg086_s cn78xx;
+	struct cvmx_pcieepx_cfg086_s cn78xxp1;
+	struct cvmx_pcieepx_cfg086_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg086 cvmx_pcieepx_cfg086_t;
+
+/**
+ * cvmx_pcieep#_cfg087
+ *
+ * This register contains the eighty-eighth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg087 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg087_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg087_s cn73xx;
+	struct cvmx_pcieepx_cfg087_s cn78xx;
+	struct cvmx_pcieepx_cfg087_s cn78xxp1;
+	struct cvmx_pcieepx_cfg087_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg087 cvmx_pcieepx_cfg087_t;
+
+/**
+ * cvmx_pcieep#_cfg088
+ *
+ * This register contains the eighty-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg088 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg088_s {
+		u32 reserved_8_31 : 24;
+		u32 les : 8;
+	} s;
+	struct cvmx_pcieepx_cfg088_s cn73xx;
+	struct cvmx_pcieepx_cfg088_s cn78xx;
+	struct cvmx_pcieepx_cfg088_s cn78xxp1;
+	struct cvmx_pcieepx_cfg088_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg088 cvmx_pcieepx_cfg088_t;
+
+/**
+ * cvmx_pcieep#_cfg089
+ *
+ * This register contains the ninetieth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg089 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg089_s {
+		u32 reserved_31_31 : 1;
+		u32 l1dph : 3;
+		u32 l1dtp : 4;
+		u32 reserved_15_23 : 9;
+		u32 l0dph : 3;
+		u32 l0dtp : 4;
+		u32 reserved_0_7 : 8;
+	} s;
+	struct cvmx_pcieepx_cfg089_s cn73xx;
+	struct cvmx_pcieepx_cfg089_s cn78xx;
+	struct cvmx_pcieepx_cfg089_s cn78xxp1;
+	struct cvmx_pcieepx_cfg089_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg089 cvmx_pcieepx_cfg089_t;
+
+/**
+ * cvmx_pcieep#_cfg090
+ *
+ * This register contains the ninety-first 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg090 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg090_s {
+		u32 reserved_31_31 : 1;
+		u32 l3dph : 3;
+		u32 l3dtp : 4;
+		u32 reserved_15_23 : 9;
+		u32 l2dph : 3;
+		u32 l2dtp : 4;
+		u32 reserved_0_7 : 8;
+	} s;
+	struct cvmx_pcieepx_cfg090_s cn73xx;
+	struct cvmx_pcieepx_cfg090_s cn78xx;
+	struct cvmx_pcieepx_cfg090_s cn78xxp1;
+	struct cvmx_pcieepx_cfg090_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg090 cvmx_pcieepx_cfg090_t;
+
+/**
+ * cvmx_pcieep#_cfg091
+ *
+ * This register contains the ninety-second 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg091 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg091_s {
+		u32 reserved_31_31 : 1;
+		u32 l5dph : 3;
+		u32 l5dtp : 4;
+		u32 reserved_15_23 : 9;
+		u32 l4dph : 3;
+		u32 l4dtp : 4;
+		u32 reserved_0_7 : 8;
+	} s;
+	struct cvmx_pcieepx_cfg091_s cn73xx;
+	struct cvmx_pcieepx_cfg091_s cn78xx;
+	struct cvmx_pcieepx_cfg091_s cn78xxp1;
+	struct cvmx_pcieepx_cfg091_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg091 cvmx_pcieepx_cfg091_t;
+
+/**
+ * cvmx_pcieep#_cfg092
+ *
+ * This register contains the ninety-fourth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg092 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg092_s {
+		u32 reserved_31_31 : 1;
+		u32 l7dph : 3;
+		u32 l7dtp : 4;
+		u32 reserved_15_23 : 9;
+		u32 l6dph : 3;
+		u32 l6dtp : 4;
+		u32 reserved_0_7 : 8;
+	} s;
+	struct cvmx_pcieepx_cfg092_s cn73xx;
+	struct cvmx_pcieepx_cfg092_s cn78xx;
+	struct cvmx_pcieepx_cfg092_s cn78xxp1;
+	struct cvmx_pcieepx_cfg092_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg092 cvmx_pcieepx_cfg092_t;
+
+/**
+ * cvmx_pcieep#_cfg094
+ *
+ * This register contains the ninety-fifth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg094 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg094_s {
+		u32 nco : 12;
+		u32 cv : 4;
+		u32 pcieec : 16;
+	} s;
+	struct cvmx_pcieepx_cfg094_s cn73xx;
+	struct cvmx_pcieepx_cfg094_s cn78xx;
+	struct cvmx_pcieepx_cfg094_s cn78xxp1;
+	struct cvmx_pcieepx_cfg094_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg094 cvmx_pcieepx_cfg094_t;
+
+/**
+ * cvmx_pcieep#_cfg095
+ *
+ * This register contains the ninety-sixth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg095 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg095_s {
+		u32 vfmimn : 11;
+		u32 reserved_2_20 : 19;
+		u32 arichp : 1;
+		u32 vfmc : 1;
+	} s;
+	struct cvmx_pcieepx_cfg095_s cn73xx;
+	struct cvmx_pcieepx_cfg095_s cn78xx;
+	struct cvmx_pcieepx_cfg095_s cn78xxp1;
+	struct cvmx_pcieepx_cfg095_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg095 cvmx_pcieepx_cfg095_t;
+
+/**
+ * cvmx_pcieep#_cfg096
+ *
+ * This register contains the ninety-seventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg096 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg096_s {
+		u32 reserved_17_31 : 15;
+		u32 ms : 1;
+		u32 reserved_5_15 : 11;
+		u32 ach : 1;
+		u32 mse : 1;
+		u32 mie : 1;
+		u32 me : 1;
+		u32 vfe : 1;
+	} s;
+	struct cvmx_pcieepx_cfg096_s cn73xx;
+	struct cvmx_pcieepx_cfg096_s cn78xx;
+	struct cvmx_pcieepx_cfg096_s cn78xxp1;
+	struct cvmx_pcieepx_cfg096_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg096 cvmx_pcieepx_cfg096_t;
+
+/**
+ * cvmx_pcieep#_cfg097
+ *
+ * This register contains the ninety-eighth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg097 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg097_s {
+		u32 tvf : 16;
+		u32 ivf : 16;
+	} s;
+	struct cvmx_pcieepx_cfg097_s cn73xx;
+	struct cvmx_pcieepx_cfg097_s cn78xx;
+	struct cvmx_pcieepx_cfg097_s cn78xxp1;
+	struct cvmx_pcieepx_cfg097_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg097 cvmx_pcieepx_cfg097_t;
+
+/**
+ * cvmx_pcieep#_cfg098
+ *
+ * This register contains the ninety-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg098 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg098_s {
+		u32 reserved_24_31 : 8;
+		u32 fdl : 8;
+		u32 nvf : 16;
+	} s;
+	struct cvmx_pcieepx_cfg098_s cn73xx;
+	struct cvmx_pcieepx_cfg098_s cn78xx;
+	struct cvmx_pcieepx_cfg098_s cn78xxp1;
+	struct cvmx_pcieepx_cfg098_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg098 cvmx_pcieepx_cfg098_t;
+
+/**
+ * cvmx_pcieep#_cfg099
+ *
+ * This register contains the one hundredth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg099 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg099_s {
+		u32 vfs : 16;
+		u32 fo : 16;
+	} s;
+	struct cvmx_pcieepx_cfg099_s cn73xx;
+	struct cvmx_pcieepx_cfg099_s cn78xx;
+	struct cvmx_pcieepx_cfg099_s cn78xxp1;
+	struct cvmx_pcieepx_cfg099_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg099 cvmx_pcieepx_cfg099_t;
+
+/**
+ * cvmx_pcieep#_cfg100
+ *
+ * This register contains the one hundred first 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg100 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg100_s {
+		u32 vfdev : 16;
+		u32 reserved_0_15 : 16;
+	} s;
+	struct cvmx_pcieepx_cfg100_s cn73xx;
+	struct cvmx_pcieepx_cfg100_s cn78xx;
+	struct cvmx_pcieepx_cfg100_s cn78xxp1;
+	struct cvmx_pcieepx_cfg100_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg100 cvmx_pcieepx_cfg100_t;
+
+/**
+ * cvmx_pcieep#_cfg101
+ *
+ * This register contains the one hundred second 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg101 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg101_s {
+		u32 supps : 32;
+	} s;
+	struct cvmx_pcieepx_cfg101_s cn73xx;
+	struct cvmx_pcieepx_cfg101_s cn78xx;
+	struct cvmx_pcieepx_cfg101_s cn78xxp1;
+	struct cvmx_pcieepx_cfg101_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg101 cvmx_pcieepx_cfg101_t;
+
+/**
+ * cvmx_pcieep#_cfg102
+ *
+ * This register contains the one hundred third 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg102 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg102_s {
+		u32 ps : 32;
+	} s;
+	struct cvmx_pcieepx_cfg102_s cn73xx;
+	struct cvmx_pcieepx_cfg102_s cn78xx;
+	struct cvmx_pcieepx_cfg102_s cn78xxp1;
+	struct cvmx_pcieepx_cfg102_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg102 cvmx_pcieepx_cfg102_t;
+
+/**
+ * cvmx_pcieep#_cfg103
+ *
+ * This register contains the one hundred fourth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg103 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg103_s {
+		u32 reserved_4_31 : 28;
+		u32 pf : 1;
+		u32 typ : 2;
+		u32 mspc : 1;
+	} s;
+	struct cvmx_pcieepx_cfg103_cn73xx {
+		u32 lbab : 12;
+		u32 reserved_4_19 : 16;
+		u32 pf : 1;
+		u32 typ : 2;
+		u32 mspc : 1;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg103_cn73xx cn78xx;
+	struct cvmx_pcieepx_cfg103_cn78xxp1 {
+		u32 lbab : 17;
+		u32 reserved_4_14 : 11;
+		u32 pf : 1;
+		u32 typ : 2;
+		u32 mspc : 1;
+	} cn78xxp1;
+	struct cvmx_pcieepx_cfg103_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg103 cvmx_pcieepx_cfg103_t;
+
+/**
+ * cvmx_pcieep#_cfg104
+ *
+ * This register contains the one hundred seventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg104 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg104_s {
+		u32 ubab : 32;
+	} s;
+	struct cvmx_pcieepx_cfg104_s cn73xx;
+	struct cvmx_pcieepx_cfg104_s cn78xx;
+	struct cvmx_pcieepx_cfg104_s cn78xxp1;
+	struct cvmx_pcieepx_cfg104_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg104 cvmx_pcieepx_cfg104_t;
+
+/**
+ * cvmx_pcieep#_cfg105
+ *
+ * This register contains the one hundred sixth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg105 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg105_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg105_s cn73xx;
+	struct cvmx_pcieepx_cfg105_s cn78xx;
+	struct cvmx_pcieepx_cfg105_s cn78xxp1;
+	struct cvmx_pcieepx_cfg105_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg105 cvmx_pcieepx_cfg105_t;
+
+/**
+ * cvmx_pcieep#_cfg106
+ *
+ * This register contains the one hundred seventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg106 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg106_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg106_s cn73xx;
+	struct cvmx_pcieepx_cfg106_s cn78xx;
+	struct cvmx_pcieepx_cfg106_s cn78xxp1;
+	struct cvmx_pcieepx_cfg106_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg106 cvmx_pcieepx_cfg106_t;
+
+/**
+ * cvmx_pcieep#_cfg107
+ *
+ * This register contains the one hundred eighth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg107 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg107_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg107_s cn73xx;
+	struct cvmx_pcieepx_cfg107_s cn78xx;
+	struct cvmx_pcieepx_cfg107_s cn78xxp1;
+	struct cvmx_pcieepx_cfg107_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg107 cvmx_pcieepx_cfg107_t;
+
+/**
+ * cvmx_pcieep#_cfg108
+ *
+ * This register contains the one hundred ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg108 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg108_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg108_s cn73xx;
+	struct cvmx_pcieepx_cfg108_s cn78xx;
+	struct cvmx_pcieepx_cfg108_s cn78xxp1;
+	struct cvmx_pcieepx_cfg108_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg108 cvmx_pcieepx_cfg108_t;
+
+/**
+ * cvmx_pcieep#_cfg109
+ *
+ * This register contains the one hundred tenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg109 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg109_s {
+		u32 mso : 29;
+		u32 msbir : 3;
+	} s;
+	struct cvmx_pcieepx_cfg109_s cn73xx;
+	struct cvmx_pcieepx_cfg109_s cn78xx;
+	struct cvmx_pcieepx_cfg109_s cn78xxp1;
+	struct cvmx_pcieepx_cfg109_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg109 cvmx_pcieepx_cfg109_t;
+
+/**
+ * cvmx_pcieep#_cfg110
+ *
+ * This register contains the one hundred eleventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg110 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg110_s {
+		u32 nco : 12;
+		u32 cv : 4;
+		u32 pcieec : 16;
+	} s;
+	struct cvmx_pcieepx_cfg110_s cn73xx;
+	struct cvmx_pcieepx_cfg110_s cn78xx;
+	struct cvmx_pcieepx_cfg110_s cn78xxp1;
+	struct cvmx_pcieepx_cfg110_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg110 cvmx_pcieepx_cfg110_t;
+
+/**
+ * cvmx_pcieep#_cfg111
+ *
+ * This register contains the one hundred twelfth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg111 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg111_s {
+		u32 reserved_30_31 : 2;
+		u32 srs : 26;
+		u32 reserved_0_3 : 4;
+	} s;
+	struct cvmx_pcieepx_cfg111_s cn73xx;
+	struct cvmx_pcieepx_cfg111_s cn78xx;
+	struct cvmx_pcieepx_cfg111_s cn78xxp1;
+	struct cvmx_pcieepx_cfg111_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg111 cvmx_pcieepx_cfg111_t;
+
+/**
+ * cvmx_pcieep#_cfg112
+ *
+ * This register contains the one hundred thirteenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg112 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg112_s {
+		u32 reserved_13_31 : 19;
+		u32 rbars : 5;
+		u32 nrbar : 3;
+		u32 reserved_3_4 : 2;
+		u32 rbari : 3;
+	} s;
+	struct cvmx_pcieepx_cfg112_s cn73xx;
+	struct cvmx_pcieepx_cfg112_s cn78xx;
+	struct cvmx_pcieepx_cfg112_s cn78xxp1;
+	struct cvmx_pcieepx_cfg112_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg112 cvmx_pcieepx_cfg112_t;
+
+/**
+ * cvmx_pcieep#_cfg448
+ *
+ * This register contains the four hundred forty-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg448 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg448_s {
+		u32 rtl : 16;
+		u32 rtltl : 16;
+	} s;
+	struct cvmx_pcieepx_cfg448_s cn52xx;
+	struct cvmx_pcieepx_cfg448_s cn52xxp1;
+	struct cvmx_pcieepx_cfg448_s cn56xx;
+	struct cvmx_pcieepx_cfg448_s cn56xxp1;
+	struct cvmx_pcieepx_cfg448_s cn61xx;
+	struct cvmx_pcieepx_cfg448_s cn63xx;
+	struct cvmx_pcieepx_cfg448_s cn63xxp1;
+	struct cvmx_pcieepx_cfg448_s cn66xx;
+	struct cvmx_pcieepx_cfg448_s cn68xx;
+	struct cvmx_pcieepx_cfg448_s cn68xxp1;
+	struct cvmx_pcieepx_cfg448_s cn70xx;
+	struct cvmx_pcieepx_cfg448_s cn70xxp1;
+	struct cvmx_pcieepx_cfg448_s cn73xx;
+	struct cvmx_pcieepx_cfg448_s cn78xx;
+	struct cvmx_pcieepx_cfg448_s cn78xxp1;
+	struct cvmx_pcieepx_cfg448_s cnf71xx;
+	struct cvmx_pcieepx_cfg448_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg448 cvmx_pcieepx_cfg448_t;
+
+/**
+ * cvmx_pcieep#_cfg449
+ *
+ * This register contains the four hundred fiftieth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg449 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg449_s {
+		u32 omr : 32;
+	} s;
+	struct cvmx_pcieepx_cfg449_s cn52xx;
+	struct cvmx_pcieepx_cfg449_s cn52xxp1;
+	struct cvmx_pcieepx_cfg449_s cn56xx;
+	struct cvmx_pcieepx_cfg449_s cn56xxp1;
+	struct cvmx_pcieepx_cfg449_s cn61xx;
+	struct cvmx_pcieepx_cfg449_s cn63xx;
+	struct cvmx_pcieepx_cfg449_s cn63xxp1;
+	struct cvmx_pcieepx_cfg449_s cn66xx;
+	struct cvmx_pcieepx_cfg449_s cn68xx;
+	struct cvmx_pcieepx_cfg449_s cn68xxp1;
+	struct cvmx_pcieepx_cfg449_s cn70xx;
+	struct cvmx_pcieepx_cfg449_s cn70xxp1;
+	struct cvmx_pcieepx_cfg449_s cn73xx;
+	struct cvmx_pcieepx_cfg449_s cn78xx;
+	struct cvmx_pcieepx_cfg449_s cn78xxp1;
+	struct cvmx_pcieepx_cfg449_s cnf71xx;
+	struct cvmx_pcieepx_cfg449_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg449 cvmx_pcieepx_cfg449_t;
+
+/**
+ * cvmx_pcieep#_cfg450
+ *
+ * This register contains the four hundred fifty-first 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg450 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg450_s {
+		u32 lpec : 8;
+		u32 reserved_22_23 : 2;
+		u32 link_state : 6;
+		u32 force_link : 1;
+		u32 reserved_8_14 : 7;
+		u32 link_num : 8;
+	} s;
+	struct cvmx_pcieepx_cfg450_s cn52xx;
+	struct cvmx_pcieepx_cfg450_s cn52xxp1;
+	struct cvmx_pcieepx_cfg450_s cn56xx;
+	struct cvmx_pcieepx_cfg450_s cn56xxp1;
+	struct cvmx_pcieepx_cfg450_s cn61xx;
+	struct cvmx_pcieepx_cfg450_s cn63xx;
+	struct cvmx_pcieepx_cfg450_s cn63xxp1;
+	struct cvmx_pcieepx_cfg450_s cn66xx;
+	struct cvmx_pcieepx_cfg450_s cn68xx;
+	struct cvmx_pcieepx_cfg450_s cn68xxp1;
+	struct cvmx_pcieepx_cfg450_cn70xx {
+		u32 lpec : 8;
+		u32 reserved_22_23 : 2;
+		u32 link_state : 6;
+		u32 force_link : 1;
+		u32 reserved_12_14 : 3;
+		u32 link_cmd : 4;
+		u32 link_num : 8;
+	} cn70xx;
+	struct cvmx_pcieepx_cfg450_cn70xx cn70xxp1;
+	struct cvmx_pcieepx_cfg450_cn73xx {
+		u32 lpec : 8;
+		u32 reserved_22_23 : 2;
+		u32 link_state : 6;
+		u32 force_link : 1;
+		u32 reserved_12_14 : 3;
+		u32 forced_ltssm : 4;
+		u32 link_num : 8;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg450_cn73xx cn78xx;
+	struct cvmx_pcieepx_cfg450_cn73xx cn78xxp1;
+	struct cvmx_pcieepx_cfg450_s cnf71xx;
+	struct cvmx_pcieepx_cfg450_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg450 cvmx_pcieepx_cfg450_t;
+
+/**
+ * cvmx_pcieep#_cfg451
+ *
+ * This register contains the four hundred fifty-second 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg451 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg451_s {
+		u32 reserved_31_31 : 1;
+		u32 easpml1 : 1;
+		u32 l1el : 3;
+		u32 l0el : 3;
+		u32 n_fts_cc : 8;
+		u32 n_fts : 8;
+		u32 ack_freq : 8;
+	} s;
+	struct cvmx_pcieepx_cfg451_cn52xx {
+		u32 reserved_30_31 : 2;
+		u32 l1el : 3;
+		u32 l0el : 3;
+		u32 n_fts_cc : 8;
+		u32 n_fts : 8;
+		u32 ack_freq : 8;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg451_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg451_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg451_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg451_s cn61xx;
+	struct cvmx_pcieepx_cfg451_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg451_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg451_s cn66xx;
+	struct cvmx_pcieepx_cfg451_s cn68xx;
+	struct cvmx_pcieepx_cfg451_s cn68xxp1;
+	struct cvmx_pcieepx_cfg451_s cn70xx;
+	struct cvmx_pcieepx_cfg451_s cn70xxp1;
+	struct cvmx_pcieepx_cfg451_s cn73xx;
+	struct cvmx_pcieepx_cfg451_s cn78xx;
+	struct cvmx_pcieepx_cfg451_s cn78xxp1;
+	struct cvmx_pcieepx_cfg451_s cnf71xx;
+	struct cvmx_pcieepx_cfg451_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg451 cvmx_pcieepx_cfg451_t;
+
+/**
+ * cvmx_pcieep#_cfg452
+ *
+ * This register contains the four hundred fifty-third 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg452 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg452_s {
+		u32 reserved_26_31 : 6;
+		u32 eccrc : 1;
+		u32 reserved_22_24 : 3;
+		u32 lme : 6;
+		u32 reserved_12_15 : 4;
+		u32 link_rate : 4;
+		u32 flm : 1;
+		u32 reserved_6_6 : 1;
+		u32 dllle : 1;
+		u32 reserved_4_4 : 1;
+		u32 ra : 1;
+		u32 le : 1;
+		u32 sd : 1;
+		u32 omr : 1;
+	} s;
+	struct cvmx_pcieepx_cfg452_cn52xx {
+		u32 reserved_26_31 : 6;
+		u32 eccrc : 1;
+		u32 reserved_22_24 : 3;
+		u32 lme : 6;
+		u32 reserved_8_15 : 8;
+		u32 flm : 1;
+		u32 reserved_6_6 : 1;
+		u32 dllle : 1;
+		u32 reserved_4_4 : 1;
+		u32 ra : 1;
+		u32 le : 1;
+		u32 sd : 1;
+		u32 omr : 1;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg452_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg452_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg452_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg452_cn61xx {
+		u32 reserved_22_31 : 10;
+		u32 lme : 6;
+		u32 reserved_8_15 : 8;
+		u32 flm : 1;
+		u32 reserved_6_6 : 1;
+		u32 dllle : 1;
+		u32 reserved_4_4 : 1;
+		u32 ra : 1;
+		u32 le : 1;
+		u32 sd : 1;
+		u32 omr : 1;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg452_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg452_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg452_cn61xx cn66xx;
+	struct cvmx_pcieepx_cfg452_cn61xx cn68xx;
+	struct cvmx_pcieepx_cfg452_cn61xx cn68xxp1;
+	struct cvmx_pcieepx_cfg452_cn70xx {
+		u32 reserved_22_31 : 10;
+		u32 lme : 6;
+		u32 reserved_12_15 : 4;
+		u32 link_rate : 4;
+		u32 flm : 1;
+		u32 reserved_6_6 : 1;
+		u32 dllle : 1;
+		u32 reserved_4_4 : 1;
+		u32 ra : 1;
+		u32 le : 1;
+		u32 sd : 1;
+		u32 omr : 1;
+	} cn70xx;
+	struct cvmx_pcieepx_cfg452_cn70xx cn70xxp1;
+	struct cvmx_pcieepx_cfg452_cn70xx cn73xx;
+	struct cvmx_pcieepx_cfg452_cn70xx cn78xx;
+	struct cvmx_pcieepx_cfg452_cn70xx cn78xxp1;
+	struct cvmx_pcieepx_cfg452_cn61xx cnf71xx;
+	struct cvmx_pcieepx_cfg452_cn70xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg452 cvmx_pcieepx_cfg452_t;
+
+/**
+ * cvmx_pcieep#_cfg453
+ *
+ * This register contains the four hundred fifty-fourth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg453 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg453_s {
+		u32 dlld : 1;
+		u32 reserved_26_30 : 5;
+		u32 ack_nak : 1;
+		u32 fcd : 1;
+		u32 ilst : 24;
+	} s;
+	struct cvmx_pcieepx_cfg453_s cn52xx;
+	struct cvmx_pcieepx_cfg453_s cn52xxp1;
+	struct cvmx_pcieepx_cfg453_s cn56xx;
+	struct cvmx_pcieepx_cfg453_s cn56xxp1;
+	struct cvmx_pcieepx_cfg453_s cn61xx;
+	struct cvmx_pcieepx_cfg453_s cn63xx;
+	struct cvmx_pcieepx_cfg453_s cn63xxp1;
+	struct cvmx_pcieepx_cfg453_s cn66xx;
+	struct cvmx_pcieepx_cfg453_s cn68xx;
+	struct cvmx_pcieepx_cfg453_s cn68xxp1;
+	struct cvmx_pcieepx_cfg453_s cn70xx;
+	struct cvmx_pcieepx_cfg453_s cn70xxp1;
+	struct cvmx_pcieepx_cfg453_s cn73xx;
+	struct cvmx_pcieepx_cfg453_s cn78xx;
+	struct cvmx_pcieepx_cfg453_s cn78xxp1;
+	struct cvmx_pcieepx_cfg453_s cnf71xx;
+	struct cvmx_pcieepx_cfg453_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg453 cvmx_pcieepx_cfg453_t;
+
+/**
+ * cvmx_pcieep#_cfg454
+ *
+ * This register contains the four hundred fifty-fifth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg454 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg454_s {
+		u32 cx_nfunc : 3;
+		u32 tmfcwt : 5;
+		u32 tmanlt : 5;
+		u32 tmrt : 5;
+		u32 reserved_11_13 : 3;
+		u32 nskps : 3;
+		u32 reserved_0_7 : 8;
+	} s;
+	struct cvmx_pcieepx_cfg454_cn52xx {
+		u32 reserved_29_31 : 3;
+		u32 tmfcwt : 5;
+		u32 tmanlt : 5;
+		u32 tmrt : 5;
+		u32 reserved_11_13 : 3;
+		u32 nskps : 3;
+		u32 reserved_4_7 : 4;
+		u32 ntss : 4;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg454_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg454_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg454_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg454_cn61xx {
+		u32 cx_nfunc : 3;
+		u32 tmfcwt : 5;
+		u32 tmanlt : 5;
+		u32 tmrt : 5;
+		u32 reserved_8_13 : 6;
+		u32 mfuncn : 8;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg454_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg454_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg454_cn61xx cn66xx;
+	struct cvmx_pcieepx_cfg454_cn61xx cn68xx;
+	struct cvmx_pcieepx_cfg454_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg454_cn70xx {
+		u32 reserved_24_31 : 8;
+		u32 tmanlt : 5;
+		u32 tmrt : 5;
+		u32 reserved_8_13 : 6;
+		u32 mfuncn : 8;
+	} cn70xx;
+	struct cvmx_pcieepx_cfg454_cn70xx cn70xxp1;
+	struct cvmx_pcieepx_cfg454_cn73xx {
+		u32 reserved_29_31 : 3;
+		u32 tmfcwt : 5;
+		u32 tmanlt : 5;
+		u32 tmrt : 5;
+		u32 reserved_8_13 : 6;
+		u32 mfuncn : 8;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg454_cn73xx cn78xx;
+	struct cvmx_pcieepx_cfg454_cn73xx cn78xxp1;
+	struct cvmx_pcieepx_cfg454_cn61xx cnf71xx;
+	struct cvmx_pcieepx_cfg454_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg454 cvmx_pcieepx_cfg454_t;
+
+/**
+ * cvmx_pcieep#_cfg455
+ *
+ * This register contains the four hundred fifty-sixth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg455 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg455_s {
+		u32 m_cfg0_filt : 1;
+		u32 m_io_filt : 1;
+		u32 msg_ctrl : 1;
+		u32 m_cpl_ecrc_filt : 1;
+		u32 m_ecrc_filt : 1;
+		u32 m_cpl_len_err : 1;
+		u32 m_cpl_attr_err : 1;
+		u32 m_cpl_tc_err : 1;
+		u32 m_cpl_fun_err : 1;
+		u32 m_cpl_rid_err : 1;
+		u32 m_cpl_tag_err : 1;
+		u32 m_lk_filt : 1;
+		u32 m_cfg1_filt : 1;
+		u32 m_bar_match : 1;
+		u32 m_pois_filt : 1;
+		u32 m_fun : 1;
+		u32 dfcwt : 1;
+		u32 reserved_11_14 : 4;
+		u32 skpiv : 11;
+	} s;
+	struct cvmx_pcieepx_cfg455_s cn52xx;
+	struct cvmx_pcieepx_cfg455_s cn52xxp1;
+	struct cvmx_pcieepx_cfg455_s cn56xx;
+	struct cvmx_pcieepx_cfg455_s cn56xxp1;
+	struct cvmx_pcieepx_cfg455_s cn61xx;
+	struct cvmx_pcieepx_cfg455_s cn63xx;
+	struct cvmx_pcieepx_cfg455_s cn63xxp1;
+	struct cvmx_pcieepx_cfg455_s cn66xx;
+	struct cvmx_pcieepx_cfg455_s cn68xx;
+	struct cvmx_pcieepx_cfg455_s cn68xxp1;
+	struct cvmx_pcieepx_cfg455_s cn70xx;
+	struct cvmx_pcieepx_cfg455_s cn70xxp1;
+	struct cvmx_pcieepx_cfg455_s cn73xx;
+	struct cvmx_pcieepx_cfg455_s cn78xx;
+	struct cvmx_pcieepx_cfg455_s cn78xxp1;
+	struct cvmx_pcieepx_cfg455_s cnf71xx;
+	struct cvmx_pcieepx_cfg455_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg455 cvmx_pcieepx_cfg455_t;
+
+/**
+ * cvmx_pcieep#_cfg456
+ *
+ * This register contains the four hundred fifty-seventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg456 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg456_s {
+		u32 reserved_4_31 : 28;
+		u32 m_handle_flush : 1;
+		u32 m_dabort_4ucpl : 1;
+		u32 m_vend1_drp : 1;
+		u32 m_vend0_drp : 1;
+	} s;
+	struct cvmx_pcieepx_cfg456_cn52xx {
+		u32 reserved_2_31 : 30;
+		u32 m_vend1_drp : 1;
+		u32 m_vend0_drp : 1;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg456_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg456_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg456_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg456_s cn61xx;
+	struct cvmx_pcieepx_cfg456_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg456_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg456_s cn66xx;
+	struct cvmx_pcieepx_cfg456_s cn68xx;
+	struct cvmx_pcieepx_cfg456_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg456_s cn70xx;
+	struct cvmx_pcieepx_cfg456_s cn70xxp1;
+	struct cvmx_pcieepx_cfg456_s cn73xx;
+	struct cvmx_pcieepx_cfg456_s cn78xx;
+	struct cvmx_pcieepx_cfg456_s cn78xxp1;
+	struct cvmx_pcieepx_cfg456_s cnf71xx;
+	struct cvmx_pcieepx_cfg456_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg456 cvmx_pcieepx_cfg456_t;
+
+/**
+ * cvmx_pcieep#_cfg458
+ *
+ * This register contains the four hundred fifty-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg458 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg458_s {
+		u32 dbg_info_l32 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg458_s cn52xx;
+	struct cvmx_pcieepx_cfg458_s cn52xxp1;
+	struct cvmx_pcieepx_cfg458_s cn56xx;
+	struct cvmx_pcieepx_cfg458_s cn56xxp1;
+	struct cvmx_pcieepx_cfg458_s cn61xx;
+	struct cvmx_pcieepx_cfg458_s cn63xx;
+	struct cvmx_pcieepx_cfg458_s cn63xxp1;
+	struct cvmx_pcieepx_cfg458_s cn66xx;
+	struct cvmx_pcieepx_cfg458_s cn68xx;
+	struct cvmx_pcieepx_cfg458_s cn68xxp1;
+	struct cvmx_pcieepx_cfg458_s cn70xx;
+	struct cvmx_pcieepx_cfg458_s cn70xxp1;
+	struct cvmx_pcieepx_cfg458_s cn73xx;
+	struct cvmx_pcieepx_cfg458_s cn78xx;
+	struct cvmx_pcieepx_cfg458_s cn78xxp1;
+	struct cvmx_pcieepx_cfg458_s cnf71xx;
+	struct cvmx_pcieepx_cfg458_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg458 cvmx_pcieepx_cfg458_t;
+
+/**
+ * cvmx_pcieep#_cfg459
+ *
+ * This register contains the four hundred sixtieth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg459 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg459_s {
+		u32 dbg_info_u32 : 32;
+	} s;
+	struct cvmx_pcieepx_cfg459_s cn52xx;
+	struct cvmx_pcieepx_cfg459_s cn52xxp1;
+	struct cvmx_pcieepx_cfg459_s cn56xx;
+	struct cvmx_pcieepx_cfg459_s cn56xxp1;
+	struct cvmx_pcieepx_cfg459_s cn61xx;
+	struct cvmx_pcieepx_cfg459_s cn63xx;
+	struct cvmx_pcieepx_cfg459_s cn63xxp1;
+	struct cvmx_pcieepx_cfg459_s cn66xx;
+	struct cvmx_pcieepx_cfg459_s cn68xx;
+	struct cvmx_pcieepx_cfg459_s cn68xxp1;
+	struct cvmx_pcieepx_cfg459_s cn70xx;
+	struct cvmx_pcieepx_cfg459_s cn70xxp1;
+	struct cvmx_pcieepx_cfg459_s cn73xx;
+	struct cvmx_pcieepx_cfg459_s cn78xx;
+	struct cvmx_pcieepx_cfg459_s cn78xxp1;
+	struct cvmx_pcieepx_cfg459_s cnf71xx;
+	struct cvmx_pcieepx_cfg459_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg459 cvmx_pcieepx_cfg459_t;
+
+/**
+ * cvmx_pcieep#_cfg460
+ *
+ * This register contains the four hundred sixty-first 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg460 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg460_s {
+		u32 reserved_20_31 : 12;
+		u32 tphfcc : 8;
+		u32 tpdfcc : 12;
+	} s;
+	struct cvmx_pcieepx_cfg460_s cn52xx;
+	struct cvmx_pcieepx_cfg460_s cn52xxp1;
+	struct cvmx_pcieepx_cfg460_s cn56xx;
+	struct cvmx_pcieepx_cfg460_s cn56xxp1;
+	struct cvmx_pcieepx_cfg460_s cn61xx;
+	struct cvmx_pcieepx_cfg460_s cn63xx;
+	struct cvmx_pcieepx_cfg460_s cn63xxp1;
+	struct cvmx_pcieepx_cfg460_s cn66xx;
+	struct cvmx_pcieepx_cfg460_s cn68xx;
+	struct cvmx_pcieepx_cfg460_s cn68xxp1;
+	struct cvmx_pcieepx_cfg460_s cn70xx;
+	struct cvmx_pcieepx_cfg460_s cn70xxp1;
+	struct cvmx_pcieepx_cfg460_s cn73xx;
+	struct cvmx_pcieepx_cfg460_s cn78xx;
+	struct cvmx_pcieepx_cfg460_s cn78xxp1;
+	struct cvmx_pcieepx_cfg460_s cnf71xx;
+	struct cvmx_pcieepx_cfg460_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg460 cvmx_pcieepx_cfg460_t;
+
+/**
+ * cvmx_pcieep#_cfg461
+ *
+ * This register contains the four hundred sixty-second 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg461 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg461_s {
+		u32 reserved_20_31 : 12;
+		u32 tchfcc : 8;
+		u32 tcdfcc : 12;
+	} s;
+	struct cvmx_pcieepx_cfg461_s cn52xx;
+	struct cvmx_pcieepx_cfg461_s cn52xxp1;
+	struct cvmx_pcieepx_cfg461_s cn56xx;
+	struct cvmx_pcieepx_cfg461_s cn56xxp1;
+	struct cvmx_pcieepx_cfg461_s cn61xx;
+	struct cvmx_pcieepx_cfg461_s cn63xx;
+	struct cvmx_pcieepx_cfg461_s cn63xxp1;
+	struct cvmx_pcieepx_cfg461_s cn66xx;
+	struct cvmx_pcieepx_cfg461_s cn68xx;
+	struct cvmx_pcieepx_cfg461_s cn68xxp1;
+	struct cvmx_pcieepx_cfg461_s cn70xx;
+	struct cvmx_pcieepx_cfg461_s cn70xxp1;
+	struct cvmx_pcieepx_cfg461_s cn73xx;
+	struct cvmx_pcieepx_cfg461_s cn78xx;
+	struct cvmx_pcieepx_cfg461_s cn78xxp1;
+	struct cvmx_pcieepx_cfg461_s cnf71xx;
+	struct cvmx_pcieepx_cfg461_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg461 cvmx_pcieepx_cfg461_t;
+
+/**
+ * cvmx_pcieep#_cfg462
+ *
+ * This register contains the four hundred sixty-third 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg462 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg462_s {
+		u32 reserved_20_31 : 12;
+		u32 tchfcc : 8;
+		u32 tcdfcc : 12;
+	} s;
+	struct cvmx_pcieepx_cfg462_s cn52xx;
+	struct cvmx_pcieepx_cfg462_s cn52xxp1;
+	struct cvmx_pcieepx_cfg462_s cn56xx;
+	struct cvmx_pcieepx_cfg462_s cn56xxp1;
+	struct cvmx_pcieepx_cfg462_s cn61xx;
+	struct cvmx_pcieepx_cfg462_s cn63xx;
+	struct cvmx_pcieepx_cfg462_s cn63xxp1;
+	struct cvmx_pcieepx_cfg462_s cn66xx;
+	struct cvmx_pcieepx_cfg462_s cn68xx;
+	struct cvmx_pcieepx_cfg462_s cn68xxp1;
+	struct cvmx_pcieepx_cfg462_s cn70xx;
+	struct cvmx_pcieepx_cfg462_s cn70xxp1;
+	struct cvmx_pcieepx_cfg462_s cn73xx;
+	struct cvmx_pcieepx_cfg462_s cn78xx;
+	struct cvmx_pcieepx_cfg462_s cn78xxp1;
+	struct cvmx_pcieepx_cfg462_s cnf71xx;
+	struct cvmx_pcieepx_cfg462_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg462 cvmx_pcieepx_cfg462_t;
+
+/**
+ * cvmx_pcieep#_cfg463
+ *
+ * This register contains the four hundred sixty-fourth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg463 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg463_s {
+		u32 fcltoe : 1;
+		u32 reserved_29_30 : 2;
+		u32 fcltov : 13;
+		u32 reserved_3_15 : 13;
+		u32 rqne : 1;
+		u32 trbne : 1;
+		u32 rtlpfccnr : 1;
+	} s;
+	struct cvmx_pcieepx_cfg463_cn52xx {
+		u32 reserved_3_31 : 29;
+		u32 rqne : 1;
+		u32 trbne : 1;
+		u32 rtlpfccnr : 1;
+	} cn52xx;
+	struct cvmx_pcieepx_cfg463_cn52xx cn52xxp1;
+	struct cvmx_pcieepx_cfg463_cn52xx cn56xx;
+	struct cvmx_pcieepx_cfg463_cn52xx cn56xxp1;
+	struct cvmx_pcieepx_cfg463_cn52xx cn61xx;
+	struct cvmx_pcieepx_cfg463_cn52xx cn63xx;
+	struct cvmx_pcieepx_cfg463_cn52xx cn63xxp1;
+	struct cvmx_pcieepx_cfg463_cn52xx cn66xx;
+	struct cvmx_pcieepx_cfg463_cn52xx cn68xx;
+	struct cvmx_pcieepx_cfg463_cn52xx cn68xxp1;
+	struct cvmx_pcieepx_cfg463_cn52xx cn70xx;
+	struct cvmx_pcieepx_cfg463_cn52xx cn70xxp1;
+	struct cvmx_pcieepx_cfg463_s cn73xx;
+	struct cvmx_pcieepx_cfg463_s cn78xx;
+	struct cvmx_pcieepx_cfg463_s cn78xxp1;
+	struct cvmx_pcieepx_cfg463_cn52xx cnf71xx;
+	struct cvmx_pcieepx_cfg463_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg463 cvmx_pcieepx_cfg463_t;
+
+/**
+ * cvmx_pcieep#_cfg464
+ *
+ * This register contains the four hundred sixty-fifth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg464 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg464_s {
+		u32 wrr_vc3 : 8;
+		u32 wrr_vc2 : 8;
+		u32 wrr_vc1 : 8;
+		u32 wrr_vc0 : 8;
+	} s;
+	struct cvmx_pcieepx_cfg464_s cn52xx;
+	struct cvmx_pcieepx_cfg464_s cn52xxp1;
+	struct cvmx_pcieepx_cfg464_s cn56xx;
+	struct cvmx_pcieepx_cfg464_s cn56xxp1;
+	struct cvmx_pcieepx_cfg464_s cn61xx;
+	struct cvmx_pcieepx_cfg464_s cn63xx;
+	struct cvmx_pcieepx_cfg464_s cn63xxp1;
+	struct cvmx_pcieepx_cfg464_s cn66xx;
+	struct cvmx_pcieepx_cfg464_s cn68xx;
+	struct cvmx_pcieepx_cfg464_s cn68xxp1;
+	struct cvmx_pcieepx_cfg464_s cn70xx;
+	struct cvmx_pcieepx_cfg464_s cn70xxp1;
+	struct cvmx_pcieepx_cfg464_s cn73xx;
+	struct cvmx_pcieepx_cfg464_s cn78xx;
+	struct cvmx_pcieepx_cfg464_s cn78xxp1;
+	struct cvmx_pcieepx_cfg464_s cnf71xx;
+	struct cvmx_pcieepx_cfg464_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg464 cvmx_pcieepx_cfg464_t;
+
+/**
+ * cvmx_pcieep#_cfg465
+ *
+ * This register contains the four hundred sixty-sixth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg465 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg465_s {
+		u32 wrr_vc7 : 8;
+		u32 wrr_vc6 : 8;
+		u32 wrr_vc5 : 8;
+		u32 wrr_vc4 : 8;
+	} s;
+	struct cvmx_pcieepx_cfg465_s cn52xx;
+	struct cvmx_pcieepx_cfg465_s cn52xxp1;
+	struct cvmx_pcieepx_cfg465_s cn56xx;
+	struct cvmx_pcieepx_cfg465_s cn56xxp1;
+	struct cvmx_pcieepx_cfg465_s cn61xx;
+	struct cvmx_pcieepx_cfg465_s cn63xx;
+	struct cvmx_pcieepx_cfg465_s cn63xxp1;
+	struct cvmx_pcieepx_cfg465_s cn66xx;
+	struct cvmx_pcieepx_cfg465_s cn68xx;
+	struct cvmx_pcieepx_cfg465_s cn68xxp1;
+	struct cvmx_pcieepx_cfg465_s cn70xx;
+	struct cvmx_pcieepx_cfg465_s cn70xxp1;
+	struct cvmx_pcieepx_cfg465_s cn73xx;
+	struct cvmx_pcieepx_cfg465_s cn78xx;
+	struct cvmx_pcieepx_cfg465_s cn78xxp1;
+	struct cvmx_pcieepx_cfg465_s cnf71xx;
+	struct cvmx_pcieepx_cfg465_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg465 cvmx_pcieepx_cfg465_t;
+
+/**
+ * cvmx_pcieep#_cfg466
+ *
+ * This register contains the four hundred sixty-seventh 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg466 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg466_s {
+		u32 rx_queue_order : 1;
+		u32 type_ordering : 1;
+		u32 reserved_24_29 : 6;
+		u32 queue_mode : 3;
+		u32 reserved_20_20 : 1;
+		u32 header_credits : 8;
+		u32 data_credits : 12;
+	} s;
+	struct cvmx_pcieepx_cfg466_s cn52xx;
+	struct cvmx_pcieepx_cfg466_s cn52xxp1;
+	struct cvmx_pcieepx_cfg466_s cn56xx;
+	struct cvmx_pcieepx_cfg466_s cn56xxp1;
+	struct cvmx_pcieepx_cfg466_s cn61xx;
+	struct cvmx_pcieepx_cfg466_s cn63xx;
+	struct cvmx_pcieepx_cfg466_s cn63xxp1;
+	struct cvmx_pcieepx_cfg466_s cn66xx;
+	struct cvmx_pcieepx_cfg466_s cn68xx;
+	struct cvmx_pcieepx_cfg466_s cn68xxp1;
+	struct cvmx_pcieepx_cfg466_s cn70xx;
+	struct cvmx_pcieepx_cfg466_s cn70xxp1;
+	struct cvmx_pcieepx_cfg466_s cn73xx;
+	struct cvmx_pcieepx_cfg466_s cn78xx;
+	struct cvmx_pcieepx_cfg466_s cn78xxp1;
+	struct cvmx_pcieepx_cfg466_s cnf71xx;
+	struct cvmx_pcieepx_cfg466_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg466 cvmx_pcieepx_cfg466_t;
+
+/**
+ * cvmx_pcieep#_cfg467
+ *
+ * This register contains the four hundred sixty-eighth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg467 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg467_s {
+		u32 reserved_24_31 : 8;
+		u32 queue_mode : 3;
+		u32 reserved_20_20 : 1;
+		u32 header_credits : 8;
+		u32 data_credits : 12;
+	} s;
+	struct cvmx_pcieepx_cfg467_s cn52xx;
+	struct cvmx_pcieepx_cfg467_s cn52xxp1;
+	struct cvmx_pcieepx_cfg467_s cn56xx;
+	struct cvmx_pcieepx_cfg467_s cn56xxp1;
+	struct cvmx_pcieepx_cfg467_s cn61xx;
+	struct cvmx_pcieepx_cfg467_s cn63xx;
+	struct cvmx_pcieepx_cfg467_s cn63xxp1;
+	struct cvmx_pcieepx_cfg467_s cn66xx;
+	struct cvmx_pcieepx_cfg467_s cn68xx;
+	struct cvmx_pcieepx_cfg467_s cn68xxp1;
+	struct cvmx_pcieepx_cfg467_s cn70xx;
+	struct cvmx_pcieepx_cfg467_s cn70xxp1;
+	struct cvmx_pcieepx_cfg467_s cn73xx;
+	struct cvmx_pcieepx_cfg467_s cn78xx;
+	struct cvmx_pcieepx_cfg467_s cn78xxp1;
+	struct cvmx_pcieepx_cfg467_s cnf71xx;
+	struct cvmx_pcieepx_cfg467_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg467 cvmx_pcieepx_cfg467_t;
+
+/**
+ * cvmx_pcieep#_cfg468
+ *
+ * This register contains the four hundred sixty-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg468 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg468_s {
+		u32 reserved_24_31 : 8;
+		u32 queue_mode : 3;
+		u32 reserved_20_20 : 1;
+		u32 header_credits : 8;
+		u32 data_credits : 12;
+	} s;
+	struct cvmx_pcieepx_cfg468_s cn52xx;
+	struct cvmx_pcieepx_cfg468_s cn52xxp1;
+	struct cvmx_pcieepx_cfg468_s cn56xx;
+	struct cvmx_pcieepx_cfg468_s cn56xxp1;
+	struct cvmx_pcieepx_cfg468_s cn61xx;
+	struct cvmx_pcieepx_cfg468_s cn63xx;
+	struct cvmx_pcieepx_cfg468_s cn63xxp1;
+	struct cvmx_pcieepx_cfg468_s cn66xx;
+	struct cvmx_pcieepx_cfg468_s cn68xx;
+	struct cvmx_pcieepx_cfg468_s cn68xxp1;
+	struct cvmx_pcieepx_cfg468_s cn70xx;
+	struct cvmx_pcieepx_cfg468_s cn70xxp1;
+	struct cvmx_pcieepx_cfg468_s cn73xx;
+	struct cvmx_pcieepx_cfg468_s cn78xx;
+	struct cvmx_pcieepx_cfg468_s cn78xxp1;
+	struct cvmx_pcieepx_cfg468_s cnf71xx;
+	struct cvmx_pcieepx_cfg468_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg468 cvmx_pcieepx_cfg468_t;
+
+/**
+ * cvmx_pcieep#_cfg490
+ *
+ * PCIE_CFG490 = Four hundred ninety-first 32-bits of PCIE type 0 config space
+ * (VC0 Posted Buffer Depth)
+ */
+union cvmx_pcieepx_cfg490 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg490_s {
+		u32 reserved_26_31 : 6;
+		u32 header_depth : 10;
+		u32 reserved_14_15 : 2;
+		u32 data_depth : 14;
+	} s;
+	struct cvmx_pcieepx_cfg490_s cn52xx;
+	struct cvmx_pcieepx_cfg490_s cn52xxp1;
+	struct cvmx_pcieepx_cfg490_s cn56xx;
+	struct cvmx_pcieepx_cfg490_s cn56xxp1;
+	struct cvmx_pcieepx_cfg490_s cn61xx;
+	struct cvmx_pcieepx_cfg490_s cn63xx;
+	struct cvmx_pcieepx_cfg490_s cn63xxp1;
+	struct cvmx_pcieepx_cfg490_s cn66xx;
+	struct cvmx_pcieepx_cfg490_s cn68xx;
+	struct cvmx_pcieepx_cfg490_s cn68xxp1;
+	struct cvmx_pcieepx_cfg490_s cn70xx;
+	struct cvmx_pcieepx_cfg490_s cn70xxp1;
+	struct cvmx_pcieepx_cfg490_s cnf71xx;
+};
+
+typedef union cvmx_pcieepx_cfg490 cvmx_pcieepx_cfg490_t;
+
+/**
+ * cvmx_pcieep#_cfg491
+ *
+ * PCIE_CFG491 = Four hundred ninety-second 32-bits of PCIE type 0 config space
+ * (VC0 Non-Posted Buffer Depth)
+ */
+union cvmx_pcieepx_cfg491 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg491_s {
+		u32 reserved_26_31 : 6;
+		u32 header_depth : 10;
+		u32 reserved_14_15 : 2;
+		u32 data_depth : 14;
+	} s;
+	struct cvmx_pcieepx_cfg491_s cn52xx;
+	struct cvmx_pcieepx_cfg491_s cn52xxp1;
+	struct cvmx_pcieepx_cfg491_s cn56xx;
+	struct cvmx_pcieepx_cfg491_s cn56xxp1;
+	struct cvmx_pcieepx_cfg491_s cn61xx;
+	struct cvmx_pcieepx_cfg491_s cn63xx;
+	struct cvmx_pcieepx_cfg491_s cn63xxp1;
+	struct cvmx_pcieepx_cfg491_s cn66xx;
+	struct cvmx_pcieepx_cfg491_s cn68xx;
+	struct cvmx_pcieepx_cfg491_s cn68xxp1;
+	struct cvmx_pcieepx_cfg491_s cn70xx;
+	struct cvmx_pcieepx_cfg491_s cn70xxp1;
+	struct cvmx_pcieepx_cfg491_s cnf71xx;
+};
+
+typedef union cvmx_pcieepx_cfg491 cvmx_pcieepx_cfg491_t;
+
+/**
+ * cvmx_pcieep#_cfg492
+ *
+ * PCIE_CFG492 = Four hundred ninety-third 32-bits of PCIE type 0 config space
+ * (VC0 Completion Buffer Depth)
+ */
+union cvmx_pcieepx_cfg492 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg492_s {
+		u32 reserved_26_31 : 6;
+		u32 header_depth : 10;
+		u32 reserved_14_15 : 2;
+		u32 data_depth : 14;
+	} s;
+	struct cvmx_pcieepx_cfg492_s cn52xx;
+	struct cvmx_pcieepx_cfg492_s cn52xxp1;
+	struct cvmx_pcieepx_cfg492_s cn56xx;
+	struct cvmx_pcieepx_cfg492_s cn56xxp1;
+	struct cvmx_pcieepx_cfg492_s cn61xx;
+	struct cvmx_pcieepx_cfg492_s cn63xx;
+	struct cvmx_pcieepx_cfg492_s cn63xxp1;
+	struct cvmx_pcieepx_cfg492_s cn66xx;
+	struct cvmx_pcieepx_cfg492_s cn68xx;
+	struct cvmx_pcieepx_cfg492_s cn68xxp1;
+	struct cvmx_pcieepx_cfg492_s cn70xx;
+	struct cvmx_pcieepx_cfg492_s cn70xxp1;
+	struct cvmx_pcieepx_cfg492_s cnf71xx;
+};
+
+typedef union cvmx_pcieepx_cfg492 cvmx_pcieepx_cfg492_t;
+
+/**
+ * cvmx_pcieep#_cfg515
+ *
+ * This register contains the five hundred sixteenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg515 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg515_s {
+		u32 reserved_21_31 : 11;
+		u32 s_d_e : 1;
+		u32 ctcrb : 1;
+		u32 cpyts : 1;
+		u32 dsc : 1;
+		u32 reserved_8_16 : 9;
+		u32 n_fts : 8;
+	} s;
+	struct cvmx_pcieepx_cfg515_cn61xx {
+		u32 reserved_21_31 : 11;
+		u32 s_d_e : 1;
+		u32 ctcrb : 1;
+		u32 cpyts : 1;
+		u32 dsc : 1;
+		u32 le : 9;
+		u32 n_fts : 8;
+	} cn61xx;
+	struct cvmx_pcieepx_cfg515_cn61xx cn63xx;
+	struct cvmx_pcieepx_cfg515_cn61xx cn63xxp1;
+	struct cvmx_pcieepx_cfg515_cn61xx cn66xx;
+	struct cvmx_pcieepx_cfg515_cn61xx cn68xx;
+	struct cvmx_pcieepx_cfg515_cn61xx cn68xxp1;
+	struct cvmx_pcieepx_cfg515_cn61xx cn70xx;
+	struct cvmx_pcieepx_cfg515_cn61xx cn70xxp1;
+	struct cvmx_pcieepx_cfg515_cn61xx cn73xx;
+	struct cvmx_pcieepx_cfg515_cn78xx {
+		u32 reserved_21_31 : 11;
+		u32 s_d_e : 1;
+		u32 ctcrb : 1;
+		u32 cpyts : 1;
+		u32 dsc : 1;
+		u32 alaneflip : 1;
+		u32 pdetlane : 3;
+		u32 nlanes : 5;
+		u32 n_fts : 8;
+	} cn78xx;
+	struct cvmx_pcieepx_cfg515_cn61xx cn78xxp1;
+	struct cvmx_pcieepx_cfg515_cn61xx cnf71xx;
+	struct cvmx_pcieepx_cfg515_cn78xx cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg515 cvmx_pcieepx_cfg515_t;
+
+/**
+ * cvmx_pcieep#_cfg516
+ *
+ * This register contains the five hundred seventeenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg516 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg516_s {
+		u32 phy_stat : 32;
+	} s;
+	struct cvmx_pcieepx_cfg516_s cn52xx;
+	struct cvmx_pcieepx_cfg516_s cn52xxp1;
+	struct cvmx_pcieepx_cfg516_s cn56xx;
+	struct cvmx_pcieepx_cfg516_s cn56xxp1;
+	struct cvmx_pcieepx_cfg516_s cn61xx;
+	struct cvmx_pcieepx_cfg516_s cn63xx;
+	struct cvmx_pcieepx_cfg516_s cn63xxp1;
+	struct cvmx_pcieepx_cfg516_s cn66xx;
+	struct cvmx_pcieepx_cfg516_s cn68xx;
+	struct cvmx_pcieepx_cfg516_s cn68xxp1;
+	struct cvmx_pcieepx_cfg516_s cn70xx;
+	struct cvmx_pcieepx_cfg516_s cn70xxp1;
+	struct cvmx_pcieepx_cfg516_s cn73xx;
+	struct cvmx_pcieepx_cfg516_s cn78xx;
+	struct cvmx_pcieepx_cfg516_s cn78xxp1;
+	struct cvmx_pcieepx_cfg516_s cnf71xx;
+	struct cvmx_pcieepx_cfg516_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg516 cvmx_pcieepx_cfg516_t;
+
+/**
+ * cvmx_pcieep#_cfg517
+ *
+ * This register contains the five hundred eighteenth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg517 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg517_s {
+		u32 phy_ctrl : 32;
+	} s;
+	struct cvmx_pcieepx_cfg517_s cn52xx;
+	struct cvmx_pcieepx_cfg517_s cn52xxp1;
+	struct cvmx_pcieepx_cfg517_s cn56xx;
+	struct cvmx_pcieepx_cfg517_s cn56xxp1;
+	struct cvmx_pcieepx_cfg517_s cn61xx;
+	struct cvmx_pcieepx_cfg517_s cn63xx;
+	struct cvmx_pcieepx_cfg517_s cn63xxp1;
+	struct cvmx_pcieepx_cfg517_s cn66xx;
+	struct cvmx_pcieepx_cfg517_s cn68xx;
+	struct cvmx_pcieepx_cfg517_s cn68xxp1;
+	struct cvmx_pcieepx_cfg517_s cn70xx;
+	struct cvmx_pcieepx_cfg517_s cn70xxp1;
+	struct cvmx_pcieepx_cfg517_s cn73xx;
+	struct cvmx_pcieepx_cfg517_s cn78xx;
+	struct cvmx_pcieepx_cfg517_s cn78xxp1;
+	struct cvmx_pcieepx_cfg517_s cnf71xx;
+	struct cvmx_pcieepx_cfg517_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg517 cvmx_pcieepx_cfg517_t;
+
+/**
+ * cvmx_pcieep#_cfg548
+ *
+ * This register contains the five hundred forty-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg548 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg548_s {
+		u32 reserved_26_31 : 6;
+		u32 rss : 2;
+		u32 eiedd : 1;
+		u32 reserved_19_22 : 4;
+		u32 dcbd : 1;
+		u32 dtdd : 1;
+		u32 ed : 1;
+		u32 reserved_13_15 : 3;
+		u32 rxeq_ph01_en : 1;
+		u32 erd : 1;
+		u32 ecrd : 1;
+		u32 ep2p3d : 1;
+		u32 dsg3 : 1;
+		u32 reserved_1_7 : 7;
+		u32 grizdnc : 1;
+	} s;
+	struct cvmx_pcieepx_cfg548_s cn73xx;
+	struct cvmx_pcieepx_cfg548_s cn78xx;
+	struct cvmx_pcieepx_cfg548_s cn78xxp1;
+	struct cvmx_pcieepx_cfg548_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg548 cvmx_pcieepx_cfg548_t;
+
+/**
+ * cvmx_pcieep#_cfg554
+ *
+ * This register contains the five hundred fifty-fifth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg554 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg554_s {
+		u32 reserved_27_31 : 5;
+		u32 scefpm : 1;
+		u32 reserved_25_25 : 1;
+		u32 iif : 1;
+		u32 prv : 16;
+		u32 reserved_6_7 : 2;
+		u32 p23td : 1;
+		u32 bt : 1;
+		u32 fm : 4;
+	} s;
+	struct cvmx_pcieepx_cfg554_cn73xx {
+		u32 reserved_25_31 : 7;
+		u32 iif : 1;
+		u32 prv : 16;
+		u32 reserved_6_7 : 2;
+		u32 p23td : 1;
+		u32 bt : 1;
+		u32 fm : 4;
+	} cn73xx;
+	struct cvmx_pcieepx_cfg554_s cn78xx;
+	struct cvmx_pcieepx_cfg554_s cn78xxp1;
+	struct cvmx_pcieepx_cfg554_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg554 cvmx_pcieepx_cfg554_t;
+
+/**
+ * cvmx_pcieep#_cfg558
+ *
+ * This register contains the five hundred fifty-ninth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg558 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg558_s {
+		u32 ple : 1;
+		u32 rxstatus : 31;
+	} s;
+	struct cvmx_pcieepx_cfg558_s cn73xx;
+	struct cvmx_pcieepx_cfg558_s cn78xx;
+	struct cvmx_pcieepx_cfg558_s cn78xxp1;
+	struct cvmx_pcieepx_cfg558_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg558 cvmx_pcieepx_cfg558_t;
+
+/**
+ * cvmx_pcieep#_cfg559
+ *
+ * This register contains the five hundred sixtieth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pcieepx_cfg559 {
+	u32 u32;
+	struct cvmx_pcieepx_cfg559_s {
+		u32 reserved_1_31 : 31;
+		u32 dbi_ro_wr_en : 1;
+	} s;
+	struct cvmx_pcieepx_cfg559_s cn73xx;
+	struct cvmx_pcieepx_cfg559_s cn78xx;
+	struct cvmx_pcieepx_cfg559_s cn78xxp1;
+	struct cvmx_pcieepx_cfg559_s cnf75xx;
+};
+
+typedef union cvmx_pcieepx_cfg559 cvmx_pcieepx_cfg559_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pciercx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-pciercx-defs.h
new file mode 100644
index 0000000..1e3e045
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pciercx-defs.h
@@ -0,0 +1,5586 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon pciercx.
+ */
+
+#ifndef __CVMX_PCIERCX_DEFS_H__
+#define __CVMX_PCIERCX_DEFS_H__
+
+static inline u64 CVMX_PCIERCX_CFG000(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000000ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000000ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000000ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000000ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000000ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000000ull;
+	}
+	return 0x0000020000000000ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG001(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000004ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000004ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000004ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000004ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000004ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000004ull;
+	}
+	return 0x0000020000000004ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG002(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000008ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000008ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000008ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000008ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000008ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000008ull;
+	}
+	return 0x0000020000000008ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG003(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000000Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000000Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000000Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000000Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000000Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000000Cull;
+	}
+	return 0x000002000000000Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG004(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000010ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000010ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000010ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000010ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000010ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000010ull;
+	}
+	return 0x0000020000000010ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG005(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000014ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000014ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000014ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000014ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000014ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000014ull;
+	}
+	return 0x0000020000000014ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG006(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000018ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000018ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000018ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000018ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000018ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000018ull;
+	}
+	return 0x0000020000000018ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG007(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000001Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000001Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000001Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000001Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000001Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000001Cull;
+	}
+	return 0x000002000000001Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG008(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000020ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000020ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000020ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000020ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000020ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000020ull;
+	}
+	return 0x0000020000000020ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG009(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000024ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000024ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000024ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000024ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000024ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000024ull;
+	}
+	return 0x0000020000000024ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG010(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000028ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000028ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000028ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000028ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000028ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000028ull;
+	}
+	return 0x0000020000000028ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG011(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000002Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000002Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000002Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000002Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000002Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000002Cull;
+	}
+	return 0x000002000000002Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG012(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000030ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000030ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000030ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000030ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000030ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000030ull;
+	}
+	return 0x0000020000000030ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG013(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000034ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000034ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000034ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000034ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000034ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000034ull;
+	}
+	return 0x0000020000000034ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG014(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000038ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000038ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000038ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000038ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000038ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000038ull;
+	}
+	return 0x0000020000000038ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG015(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000003Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000003Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000003Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000003Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000003Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000003Cull;
+	}
+	return 0x000002000000003Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG016(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000040ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000040ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000040ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000040ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000040ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000040ull;
+	}
+	return 0x0000020000000040ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG017(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000044ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000044ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000044ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000044ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000044ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000044ull;
+	}
+	return 0x0000020000000044ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG020(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000050ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000050ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000050ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000050ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000050ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000050ull;
+	}
+	return 0x0000020000000050ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG021(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000054ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000054ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000054ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000054ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000054ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000054ull;
+	}
+	return 0x0000020000000054ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG022(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000058ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000058ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000058ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000058ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000058ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000058ull;
+	}
+	return 0x0000020000000058ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG023(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000005Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000005Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000005Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000005Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000005Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000005Cull;
+	}
+	return 0x000002000000005Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG028(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000070ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000070ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000070ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000070ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000070ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000070ull;
+	}
+	return 0x0000020000000070ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG029(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000074ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000074ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000074ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000074ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000074ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000074ull;
+	}
+	return 0x0000020000000074ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG030(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000078ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000078ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000078ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000078ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000078ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000078ull;
+	}
+	return 0x0000020000000078ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG031(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000007Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000007Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000007Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000007Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000007Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000007Cull;
+	}
+	return 0x000002000000007Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG032(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000080ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000080ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000080ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000080ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000080ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000080ull;
+	}
+	return 0x0000020000000080ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG033(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000084ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000084ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000084ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000084ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000084ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000084ull;
+	}
+	return 0x0000020000000084ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG034(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000088ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000088ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000088ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000088ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000088ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000088ull;
+	}
+	return 0x0000020000000088ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG035(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000008Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000008Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000008Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000008Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000008Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000008Cull;
+	}
+	return 0x000002000000008Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG036(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000090ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000090ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000090ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000090ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000090ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000090ull;
+	}
+	return 0x0000020000000090ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG037(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000094ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000094ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000094ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000094ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000094ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000094ull;
+	}
+	return 0x0000020000000094ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG038(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000098ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000098ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000098ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000098ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000098ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000098ull;
+	}
+	return 0x0000020000000098ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG039(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000009Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000009Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000009Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000009Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000009Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000009Cull;
+	}
+	return 0x000002000000009Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG040(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000000A0ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000000A0ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000200000000A0ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000200000000A0ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000000A0ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000000A0ull;
+	}
+	return 0x00000200000000A0ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG041(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000000A4ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000000A4ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000200000000A4ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000200000000A4ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000000A4ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000000A4ull;
+	}
+	return 0x00000200000000A4ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG042(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000000A8ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000000A8ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000200000000A8ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000200000000A8ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000000A8ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000000A8ull;
+	}
+	return 0x00000200000000A8ull + (offset) * 0x100000000ull;
+}
+
+#define CVMX_PCIERCX_CFG044(offset) (0x00000200000000B0ull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG045(offset) (0x00000200000000B4ull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG046(offset) (0x00000200000000B8ull + ((offset) & 3) * 0x100000000ull)
+static inline u64 CVMX_PCIERCX_CFG064(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000100ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000100ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000100ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000100ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000100ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000100ull;
+	}
+	return 0x0000020000000100ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG065(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000104ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000104ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000104ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000104ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000104ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000104ull;
+	}
+	return 0x0000020000000104ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG066(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000108ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000108ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000108ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000108ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000108ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000108ull;
+	}
+	return 0x0000020000000108ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG067(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000010Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000010Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000010Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000010Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000010Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000010Cull;
+	}
+	return 0x000002000000010Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG068(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000110ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000110ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000110ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000110ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000110ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000110ull;
+	}
+	return 0x0000020000000110ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG069(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000114ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000114ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000114ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000114ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000114ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000114ull;
+	}
+	return 0x0000020000000114ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG070(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000118ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000118ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000118ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000118ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000118ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000118ull;
+	}
+	return 0x0000020000000118ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG071(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000011Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000011Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000011Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000011Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000011Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000011Cull;
+	}
+	return 0x000002000000011Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG072(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000120ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000120ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000120ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000120ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000120ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000120ull;
+	}
+	return 0x0000020000000120ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG073(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000124ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000124ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000124ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000124ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000124ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000124ull;
+	}
+	return 0x0000020000000124ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG074(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000128ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000128ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000128ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000128ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000128ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000128ull;
+	}
+	return 0x0000020000000128ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG075(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000012Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000012Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000012Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000012Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000012Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000012Cull;
+	}
+	return 0x000002000000012Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG076(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000130ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000130ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000130ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000130ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000130ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000130ull;
+	}
+	return 0x0000020000000130ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG077(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000134ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000134ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000134ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000134ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000134ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000134ull;
+	}
+	return 0x0000020000000134ull + (offset) * 0x100000000ull;
+}
+
+#define CVMX_PCIERCX_CFG086(offset) (0x0000020000000158ull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG087(offset) (0x000002000000015Cull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG088(offset) (0x0000020000000160ull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG089(offset) (0x0000020000000164ull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG090(offset) (0x0000020000000168ull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG091(offset) (0x000002000000016Cull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG092(offset) (0x0000020000000170ull + ((offset) & 3) * 0x100000000ull)
+static inline u64 CVMX_PCIERCX_CFG448(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000700ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000700ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000700ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000700ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000700ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000700ull;
+	}
+	return 0x0000020000000700ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG449(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000704ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000704ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000704ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000704ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000704ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000704ull;
+	}
+	return 0x0000020000000704ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG450(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000708ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000708ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000708ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000708ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000708ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000708ull;
+	}
+	return 0x0000020000000708ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG451(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000070Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000070Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000070Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000070Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000070Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000070Cull;
+	}
+	return 0x000002000000070Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG452(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000710ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000710ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000710ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000710ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000710ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000710ull;
+	}
+	return 0x0000020000000710ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG453(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000714ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000714ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000714ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000714ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000714ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000714ull;
+	}
+	return 0x0000020000000714ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG454(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000718ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000718ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000718ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000718ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000718ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000718ull;
+	}
+	return 0x0000020000000718ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG455(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000071Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000071Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000071Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000071Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000071Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000071Cull;
+	}
+	return 0x000002000000071Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG456(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000720ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000720ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000720ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000720ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000720ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000720ull;
+	}
+	return 0x0000020000000720ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG458(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000728ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000728ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000728ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000728ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000728ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000728ull;
+	}
+	return 0x0000020000000728ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG459(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000072Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000072Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000072Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000072Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000072Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000072Cull;
+	}
+	return 0x000002000000072Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG460(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000730ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000730ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000730ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000730ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000730ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000730ull;
+	}
+	return 0x0000020000000730ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG461(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000734ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000734ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000734ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000734ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000734ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000734ull;
+	}
+	return 0x0000020000000734ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG462(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000738ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000738ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000738ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000738ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000738ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000738ull;
+	}
+	return 0x0000020000000738ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG463(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000073Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000073Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000073Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000073Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000073Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000073Cull;
+	}
+	return 0x000002000000073Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG464(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000740ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000740ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000740ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000740ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000740ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000740ull;
+	}
+	return 0x0000020000000740ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG465(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000744ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000744ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000744ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000744ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000744ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000744ull;
+	}
+	return 0x0000020000000744ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG466(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000748ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000748ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000748ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000748ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000748ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000748ull;
+	}
+	return 0x0000020000000748ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG467(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000074Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000074Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000074Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000074Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000074Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000074Cull;
+	}
+	return 0x000002000000074Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG468(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000750ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000750ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000750ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000750ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000750ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000750ull;
+	}
+	return 0x0000020000000750ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG490(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000007A8ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000007A8ull + (offset) * 0x100000000ull;
+	}
+	return 0x00000000000007A8ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG491(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000007ACull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000007ACull + (offset) * 0x100000000ull;
+	}
+	return 0x00000000000007ACull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG492(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000007B0ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00000200000007B0ull + (offset) * 0x100000000ull;
+	}
+	return 0x00000000000007B0ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG515(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000080Cull + (offset) * 0x100000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000080Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x000002000000080Cull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x000002000000080Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x000002000000080Cull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x000000000000080Cull;
+	}
+	return 0x000002000000080Cull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG516(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000810ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000810ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000810ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000810ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000810ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000810ull;
+	}
+	return 0x0000020000000810ull + (offset) * 0x100000000ull;
+}
+
+static inline u64 CVMX_PCIERCX_CFG517(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000814ull + (offset) * 0x100000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000814ull + (offset) * 0x100000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000020000000814ull + (offset) * 0x100000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000020000000814ull + (offset) * 0x100000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000020000000814ull + (offset) * 0x100000000ull;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000814ull;
+	}
+	return 0x0000020000000814ull + (offset) * 0x100000000ull;
+}
+
+#define CVMX_PCIERCX_CFG548(offset) (0x0000020000000890ull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG554(offset) (0x00000200000008A8ull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG558(offset) (0x00000200000008B8ull + ((offset) & 3) * 0x100000000ull)
+#define CVMX_PCIERCX_CFG559(offset) (0x00000200000008BCull + ((offset) & 3) * 0x100000000ull)
+
+/**
+ * cvmx_pcierc#_cfg000
+ *
+ * This register contains the first 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg000 {
+	u32 u32;
+	struct cvmx_pciercx_cfg000_s {
+		u32 devid : 16;
+		u32 vendid : 16;
+	} s;
+	struct cvmx_pciercx_cfg000_s cn52xx;
+	struct cvmx_pciercx_cfg000_s cn52xxp1;
+	struct cvmx_pciercx_cfg000_s cn56xx;
+	struct cvmx_pciercx_cfg000_s cn56xxp1;
+	struct cvmx_pciercx_cfg000_s cn61xx;
+	struct cvmx_pciercx_cfg000_s cn63xx;
+	struct cvmx_pciercx_cfg000_s cn63xxp1;
+	struct cvmx_pciercx_cfg000_s cn66xx;
+	struct cvmx_pciercx_cfg000_s cn68xx;
+	struct cvmx_pciercx_cfg000_s cn68xxp1;
+	struct cvmx_pciercx_cfg000_s cn70xx;
+	struct cvmx_pciercx_cfg000_s cn70xxp1;
+	struct cvmx_pciercx_cfg000_s cn73xx;
+	struct cvmx_pciercx_cfg000_s cn78xx;
+	struct cvmx_pciercx_cfg000_s cn78xxp1;
+	struct cvmx_pciercx_cfg000_s cnf71xx;
+	struct cvmx_pciercx_cfg000_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg000 cvmx_pciercx_cfg000_t;
+
+/**
+ * cvmx_pcierc#_cfg001
+ *
+ * This register contains the second 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg001 {
+	u32 u32;
+	struct cvmx_pciercx_cfg001_s {
+		u32 dpe : 1;
+		u32 sse : 1;
+		u32 rma : 1;
+		u32 rta : 1;
+		u32 sta : 1;
+		u32 devt : 2;
+		u32 mdpe : 1;
+		u32 fbb : 1;
+		u32 reserved_22_22 : 1;
+		u32 m66 : 1;
+		u32 cl : 1;
+		u32 i_stat : 1;
+		u32 reserved_11_18 : 8;
+		u32 i_dis : 1;
+		u32 fbbe : 1;
+		u32 see : 1;
+		u32 ids_wcc : 1;
+		u32 per : 1;
+		u32 vps : 1;
+		u32 mwice : 1;
+		u32 scse : 1;
+		u32 me : 1;
+		u32 msae : 1;
+		u32 isae : 1;
+	} s;
+	struct cvmx_pciercx_cfg001_s cn52xx;
+	struct cvmx_pciercx_cfg001_s cn52xxp1;
+	struct cvmx_pciercx_cfg001_s cn56xx;
+	struct cvmx_pciercx_cfg001_s cn56xxp1;
+	struct cvmx_pciercx_cfg001_s cn61xx;
+	struct cvmx_pciercx_cfg001_s cn63xx;
+	struct cvmx_pciercx_cfg001_s cn63xxp1;
+	struct cvmx_pciercx_cfg001_s cn66xx;
+	struct cvmx_pciercx_cfg001_s cn68xx;
+	struct cvmx_pciercx_cfg001_s cn68xxp1;
+	struct cvmx_pciercx_cfg001_s cn70xx;
+	struct cvmx_pciercx_cfg001_s cn70xxp1;
+	struct cvmx_pciercx_cfg001_s cn73xx;
+	struct cvmx_pciercx_cfg001_s cn78xx;
+	struct cvmx_pciercx_cfg001_s cn78xxp1;
+	struct cvmx_pciercx_cfg001_s cnf71xx;
+	struct cvmx_pciercx_cfg001_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg001 cvmx_pciercx_cfg001_t;
+
+/**
+ * cvmx_pcierc#_cfg002
+ *
+ * This register contains the third 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg002 {
+	u32 u32;
+	struct cvmx_pciercx_cfg002_s {
+		u32 bcc : 8;
+		u32 sc : 8;
+		u32 pi : 8;
+		u32 rid : 8;
+	} s;
+	struct cvmx_pciercx_cfg002_s cn52xx;
+	struct cvmx_pciercx_cfg002_s cn52xxp1;
+	struct cvmx_pciercx_cfg002_s cn56xx;
+	struct cvmx_pciercx_cfg002_s cn56xxp1;
+	struct cvmx_pciercx_cfg002_s cn61xx;
+	struct cvmx_pciercx_cfg002_s cn63xx;
+	struct cvmx_pciercx_cfg002_s cn63xxp1;
+	struct cvmx_pciercx_cfg002_s cn66xx;
+	struct cvmx_pciercx_cfg002_s cn68xx;
+	struct cvmx_pciercx_cfg002_s cn68xxp1;
+	struct cvmx_pciercx_cfg002_s cn70xx;
+	struct cvmx_pciercx_cfg002_s cn70xxp1;
+	struct cvmx_pciercx_cfg002_s cn73xx;
+	struct cvmx_pciercx_cfg002_s cn78xx;
+	struct cvmx_pciercx_cfg002_s cn78xxp1;
+	struct cvmx_pciercx_cfg002_s cnf71xx;
+	struct cvmx_pciercx_cfg002_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg002 cvmx_pciercx_cfg002_t;
+
+/**
+ * cvmx_pcierc#_cfg003
+ *
+ * This register contains the fourth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg003 {
+	u32 u32;
+	struct cvmx_pciercx_cfg003_s {
+		u32 bist : 8;
+		u32 mfd : 1;
+		u32 chf : 7;
+		u32 lt : 8;
+		u32 cls : 8;
+	} s;
+	struct cvmx_pciercx_cfg003_s cn52xx;
+	struct cvmx_pciercx_cfg003_s cn52xxp1;
+	struct cvmx_pciercx_cfg003_s cn56xx;
+	struct cvmx_pciercx_cfg003_s cn56xxp1;
+	struct cvmx_pciercx_cfg003_s cn61xx;
+	struct cvmx_pciercx_cfg003_s cn63xx;
+	struct cvmx_pciercx_cfg003_s cn63xxp1;
+	struct cvmx_pciercx_cfg003_s cn66xx;
+	struct cvmx_pciercx_cfg003_s cn68xx;
+	struct cvmx_pciercx_cfg003_s cn68xxp1;
+	struct cvmx_pciercx_cfg003_s cn70xx;
+	struct cvmx_pciercx_cfg003_s cn70xxp1;
+	struct cvmx_pciercx_cfg003_s cn73xx;
+	struct cvmx_pciercx_cfg003_s cn78xx;
+	struct cvmx_pciercx_cfg003_s cn78xxp1;
+	struct cvmx_pciercx_cfg003_s cnf71xx;
+	struct cvmx_pciercx_cfg003_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg003 cvmx_pciercx_cfg003_t;
+
+/**
+ * cvmx_pcierc#_cfg004
+ *
+ * This register contains the fifth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg004 {
+	u32 u32;
+	struct cvmx_pciercx_cfg004_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pciercx_cfg004_s cn52xx;
+	struct cvmx_pciercx_cfg004_s cn52xxp1;
+	struct cvmx_pciercx_cfg004_s cn56xx;
+	struct cvmx_pciercx_cfg004_s cn56xxp1;
+	struct cvmx_pciercx_cfg004_s cn61xx;
+	struct cvmx_pciercx_cfg004_s cn63xx;
+	struct cvmx_pciercx_cfg004_s cn63xxp1;
+	struct cvmx_pciercx_cfg004_s cn66xx;
+	struct cvmx_pciercx_cfg004_s cn68xx;
+	struct cvmx_pciercx_cfg004_s cn68xxp1;
+	struct cvmx_pciercx_cfg004_cn70xx {
+		u32 reserved_31_0 : 32;
+	} cn70xx;
+	struct cvmx_pciercx_cfg004_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg004_cn70xx cn73xx;
+	struct cvmx_pciercx_cfg004_cn70xx cn78xx;
+	struct cvmx_pciercx_cfg004_cn70xx cn78xxp1;
+	struct cvmx_pciercx_cfg004_s cnf71xx;
+	struct cvmx_pciercx_cfg004_cn70xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg004 cvmx_pciercx_cfg004_t;
+
+/**
+ * cvmx_pcierc#_cfg005
+ *
+ * This register contains the sixth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg005 {
+	u32 u32;
+	struct cvmx_pciercx_cfg005_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pciercx_cfg005_s cn52xx;
+	struct cvmx_pciercx_cfg005_s cn52xxp1;
+	struct cvmx_pciercx_cfg005_s cn56xx;
+	struct cvmx_pciercx_cfg005_s cn56xxp1;
+	struct cvmx_pciercx_cfg005_s cn61xx;
+	struct cvmx_pciercx_cfg005_s cn63xx;
+	struct cvmx_pciercx_cfg005_s cn63xxp1;
+	struct cvmx_pciercx_cfg005_s cn66xx;
+	struct cvmx_pciercx_cfg005_s cn68xx;
+	struct cvmx_pciercx_cfg005_s cn68xxp1;
+	struct cvmx_pciercx_cfg005_cn70xx {
+		u32 reserved_31_0 : 32;
+	} cn70xx;
+	struct cvmx_pciercx_cfg005_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg005_cn70xx cn73xx;
+	struct cvmx_pciercx_cfg005_cn70xx cn78xx;
+	struct cvmx_pciercx_cfg005_cn70xx cn78xxp1;
+	struct cvmx_pciercx_cfg005_s cnf71xx;
+	struct cvmx_pciercx_cfg005_cn70xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg005 cvmx_pciercx_cfg005_t;
+
+/**
+ * cvmx_pcierc#_cfg006
+ *
+ * This register contains the seventh 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg006 {
+	u32 u32;
+	struct cvmx_pciercx_cfg006_s {
+		u32 slt : 8;
+		u32 subbnum : 8;
+		u32 sbnum : 8;
+		u32 pbnum : 8;
+	} s;
+	struct cvmx_pciercx_cfg006_s cn52xx;
+	struct cvmx_pciercx_cfg006_s cn52xxp1;
+	struct cvmx_pciercx_cfg006_s cn56xx;
+	struct cvmx_pciercx_cfg006_s cn56xxp1;
+	struct cvmx_pciercx_cfg006_s cn61xx;
+	struct cvmx_pciercx_cfg006_s cn63xx;
+	struct cvmx_pciercx_cfg006_s cn63xxp1;
+	struct cvmx_pciercx_cfg006_s cn66xx;
+	struct cvmx_pciercx_cfg006_s cn68xx;
+	struct cvmx_pciercx_cfg006_s cn68xxp1;
+	struct cvmx_pciercx_cfg006_s cn70xx;
+	struct cvmx_pciercx_cfg006_s cn70xxp1;
+	struct cvmx_pciercx_cfg006_s cn73xx;
+	struct cvmx_pciercx_cfg006_s cn78xx;
+	struct cvmx_pciercx_cfg006_s cn78xxp1;
+	struct cvmx_pciercx_cfg006_s cnf71xx;
+	struct cvmx_pciercx_cfg006_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg006 cvmx_pciercx_cfg006_t;
+
+/**
+ * cvmx_pcierc#_cfg007
+ *
+ * This register contains the eighth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg007 {
+	u32 u32;
+	struct cvmx_pciercx_cfg007_s {
+		u32 dpe : 1;
+		u32 sse : 1;
+		u32 rma : 1;
+		u32 rta : 1;
+		u32 sta : 1;
+		u32 devt : 2;
+		u32 mdpe : 1;
+		u32 fbb : 1;
+		u32 reserved_22_22 : 1;
+		u32 m66 : 1;
+		u32 reserved_16_20 : 5;
+		u32 lio_limi : 4;
+		u32 reserved_9_11 : 3;
+		u32 io32b : 1;
+		u32 lio_base : 4;
+		u32 reserved_1_3 : 3;
+		u32 io32a : 1;
+	} s;
+	struct cvmx_pciercx_cfg007_s cn52xx;
+	struct cvmx_pciercx_cfg007_s cn52xxp1;
+	struct cvmx_pciercx_cfg007_s cn56xx;
+	struct cvmx_pciercx_cfg007_s cn56xxp1;
+	struct cvmx_pciercx_cfg007_s cn61xx;
+	struct cvmx_pciercx_cfg007_s cn63xx;
+	struct cvmx_pciercx_cfg007_s cn63xxp1;
+	struct cvmx_pciercx_cfg007_s cn66xx;
+	struct cvmx_pciercx_cfg007_s cn68xx;
+	struct cvmx_pciercx_cfg007_s cn68xxp1;
+	struct cvmx_pciercx_cfg007_s cn70xx;
+	struct cvmx_pciercx_cfg007_s cn70xxp1;
+	struct cvmx_pciercx_cfg007_s cn73xx;
+	struct cvmx_pciercx_cfg007_s cn78xx;
+	struct cvmx_pciercx_cfg007_s cn78xxp1;
+	struct cvmx_pciercx_cfg007_s cnf71xx;
+	struct cvmx_pciercx_cfg007_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg007 cvmx_pciercx_cfg007_t;
+
+/**
+ * cvmx_pcierc#_cfg008
+ *
+ * This register contains the ninth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg008 {
+	u32 u32;
+	struct cvmx_pciercx_cfg008_s {
+		u32 ml_addr : 12;
+		u32 reserved_16_19 : 4;
+		u32 mb_addr : 12;
+		u32 reserved_0_3 : 4;
+	} s;
+	struct cvmx_pciercx_cfg008_s cn52xx;
+	struct cvmx_pciercx_cfg008_s cn52xxp1;
+	struct cvmx_pciercx_cfg008_s cn56xx;
+	struct cvmx_pciercx_cfg008_s cn56xxp1;
+	struct cvmx_pciercx_cfg008_s cn61xx;
+	struct cvmx_pciercx_cfg008_s cn63xx;
+	struct cvmx_pciercx_cfg008_s cn63xxp1;
+	struct cvmx_pciercx_cfg008_s cn66xx;
+	struct cvmx_pciercx_cfg008_s cn68xx;
+	struct cvmx_pciercx_cfg008_s cn68xxp1;
+	struct cvmx_pciercx_cfg008_cn70xx {
+		u32 ml_addr : 12;
+		u32 reserved_19_16 : 4;
+		u32 mb_addr : 12;
+		u32 reserved_3_0 : 4;
+	} cn70xx;
+	struct cvmx_pciercx_cfg008_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg008_cn70xx cn73xx;
+	struct cvmx_pciercx_cfg008_cn70xx cn78xx;
+	struct cvmx_pciercx_cfg008_cn70xx cn78xxp1;
+	struct cvmx_pciercx_cfg008_s cnf71xx;
+	struct cvmx_pciercx_cfg008_cn70xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg008 cvmx_pciercx_cfg008_t;
+
+/**
+ * cvmx_pcierc#_cfg009
+ *
+ * This register contains the tenth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg009 {
+	u32 u32;
+	struct cvmx_pciercx_cfg009_s {
+		u32 lmem_limit : 12;
+		u32 reserved_17_19 : 3;
+		u32 mem64b : 1;
+		u32 lmem_base : 12;
+		u32 reserved_1_3 : 3;
+		u32 mem64a : 1;
+	} s;
+	struct cvmx_pciercx_cfg009_s cn52xx;
+	struct cvmx_pciercx_cfg009_s cn52xxp1;
+	struct cvmx_pciercx_cfg009_s cn56xx;
+	struct cvmx_pciercx_cfg009_s cn56xxp1;
+	struct cvmx_pciercx_cfg009_s cn61xx;
+	struct cvmx_pciercx_cfg009_s cn63xx;
+	struct cvmx_pciercx_cfg009_s cn63xxp1;
+	struct cvmx_pciercx_cfg009_s cn66xx;
+	struct cvmx_pciercx_cfg009_s cn68xx;
+	struct cvmx_pciercx_cfg009_s cn68xxp1;
+	struct cvmx_pciercx_cfg009_cn70xx {
+		u32 lmem_limit : 12;
+		u32 reserved_19_17 : 3;
+		u32 mem64b : 1;
+		u32 lmem_base : 12;
+		u32 reserved_3_1 : 3;
+		u32 mem64a : 1;
+	} cn70xx;
+	struct cvmx_pciercx_cfg009_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg009_cn70xx cn73xx;
+	struct cvmx_pciercx_cfg009_cn70xx cn78xx;
+	struct cvmx_pciercx_cfg009_cn70xx cn78xxp1;
+	struct cvmx_pciercx_cfg009_s cnf71xx;
+	struct cvmx_pciercx_cfg009_cn70xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg009 cvmx_pciercx_cfg009_t;
+
+/**
+ * cvmx_pcierc#_cfg010
+ *
+ * This register contains the eleventh 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg010 {
+	u32 u32;
+	struct cvmx_pciercx_cfg010_s {
+		u32 umem_base : 32;
+	} s;
+	struct cvmx_pciercx_cfg010_s cn52xx;
+	struct cvmx_pciercx_cfg010_s cn52xxp1;
+	struct cvmx_pciercx_cfg010_s cn56xx;
+	struct cvmx_pciercx_cfg010_s cn56xxp1;
+	struct cvmx_pciercx_cfg010_s cn61xx;
+	struct cvmx_pciercx_cfg010_s cn63xx;
+	struct cvmx_pciercx_cfg010_s cn63xxp1;
+	struct cvmx_pciercx_cfg010_s cn66xx;
+	struct cvmx_pciercx_cfg010_s cn68xx;
+	struct cvmx_pciercx_cfg010_s cn68xxp1;
+	struct cvmx_pciercx_cfg010_s cn70xx;
+	struct cvmx_pciercx_cfg010_s cn70xxp1;
+	struct cvmx_pciercx_cfg010_s cn73xx;
+	struct cvmx_pciercx_cfg010_s cn78xx;
+	struct cvmx_pciercx_cfg010_s cn78xxp1;
+	struct cvmx_pciercx_cfg010_s cnf71xx;
+	struct cvmx_pciercx_cfg010_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg010 cvmx_pciercx_cfg010_t;
+
+/**
+ * cvmx_pcierc#_cfg011
+ *
+ * This register contains the twelfth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg011 {
+	u32 u32;
+	struct cvmx_pciercx_cfg011_s {
+		u32 umem_limit : 32;
+	} s;
+	struct cvmx_pciercx_cfg011_s cn52xx;
+	struct cvmx_pciercx_cfg011_s cn52xxp1;
+	struct cvmx_pciercx_cfg011_s cn56xx;
+	struct cvmx_pciercx_cfg011_s cn56xxp1;
+	struct cvmx_pciercx_cfg011_s cn61xx;
+	struct cvmx_pciercx_cfg011_s cn63xx;
+	struct cvmx_pciercx_cfg011_s cn63xxp1;
+	struct cvmx_pciercx_cfg011_s cn66xx;
+	struct cvmx_pciercx_cfg011_s cn68xx;
+	struct cvmx_pciercx_cfg011_s cn68xxp1;
+	struct cvmx_pciercx_cfg011_s cn70xx;
+	struct cvmx_pciercx_cfg011_s cn70xxp1;
+	struct cvmx_pciercx_cfg011_s cn73xx;
+	struct cvmx_pciercx_cfg011_s cn78xx;
+	struct cvmx_pciercx_cfg011_s cn78xxp1;
+	struct cvmx_pciercx_cfg011_s cnf71xx;
+	struct cvmx_pciercx_cfg011_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg011 cvmx_pciercx_cfg011_t;
+
+/**
+ * cvmx_pcierc#_cfg012
+ *
+ * This register contains the thirteenth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg012 {
+	u32 u32;
+	struct cvmx_pciercx_cfg012_s {
+		u32 uio_limit : 16;
+		u32 uio_base : 16;
+	} s;
+	struct cvmx_pciercx_cfg012_s cn52xx;
+	struct cvmx_pciercx_cfg012_s cn52xxp1;
+	struct cvmx_pciercx_cfg012_s cn56xx;
+	struct cvmx_pciercx_cfg012_s cn56xxp1;
+	struct cvmx_pciercx_cfg012_s cn61xx;
+	struct cvmx_pciercx_cfg012_s cn63xx;
+	struct cvmx_pciercx_cfg012_s cn63xxp1;
+	struct cvmx_pciercx_cfg012_s cn66xx;
+	struct cvmx_pciercx_cfg012_s cn68xx;
+	struct cvmx_pciercx_cfg012_s cn68xxp1;
+	struct cvmx_pciercx_cfg012_s cn70xx;
+	struct cvmx_pciercx_cfg012_s cn70xxp1;
+	struct cvmx_pciercx_cfg012_s cn73xx;
+	struct cvmx_pciercx_cfg012_s cn78xx;
+	struct cvmx_pciercx_cfg012_s cn78xxp1;
+	struct cvmx_pciercx_cfg012_s cnf71xx;
+	struct cvmx_pciercx_cfg012_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg012 cvmx_pciercx_cfg012_t;
+
+/**
+ * cvmx_pcierc#_cfg013
+ *
+ * This register contains the fourteenth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg013 {
+	u32 u32;
+	struct cvmx_pciercx_cfg013_s {
+		u32 reserved_8_31 : 24;
+		u32 cp : 8;
+	} s;
+	struct cvmx_pciercx_cfg013_s cn52xx;
+	struct cvmx_pciercx_cfg013_s cn52xxp1;
+	struct cvmx_pciercx_cfg013_s cn56xx;
+	struct cvmx_pciercx_cfg013_s cn56xxp1;
+	struct cvmx_pciercx_cfg013_s cn61xx;
+	struct cvmx_pciercx_cfg013_s cn63xx;
+	struct cvmx_pciercx_cfg013_s cn63xxp1;
+	struct cvmx_pciercx_cfg013_s cn66xx;
+	struct cvmx_pciercx_cfg013_s cn68xx;
+	struct cvmx_pciercx_cfg013_s cn68xxp1;
+	struct cvmx_pciercx_cfg013_s cn70xx;
+	struct cvmx_pciercx_cfg013_s cn70xxp1;
+	struct cvmx_pciercx_cfg013_s cn73xx;
+	struct cvmx_pciercx_cfg013_s cn78xx;
+	struct cvmx_pciercx_cfg013_s cn78xxp1;
+	struct cvmx_pciercx_cfg013_s cnf71xx;
+	struct cvmx_pciercx_cfg013_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg013 cvmx_pciercx_cfg013_t;
+
+/**
+ * cvmx_pcierc#_cfg014
+ *
+ * This register contains the fifteenth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg014 {
+	u32 u32;
+	struct cvmx_pciercx_cfg014_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pciercx_cfg014_s cn52xx;
+	struct cvmx_pciercx_cfg014_s cn52xxp1;
+	struct cvmx_pciercx_cfg014_s cn56xx;
+	struct cvmx_pciercx_cfg014_s cn56xxp1;
+	struct cvmx_pciercx_cfg014_s cn61xx;
+	struct cvmx_pciercx_cfg014_s cn63xx;
+	struct cvmx_pciercx_cfg014_s cn63xxp1;
+	struct cvmx_pciercx_cfg014_s cn66xx;
+	struct cvmx_pciercx_cfg014_s cn68xx;
+	struct cvmx_pciercx_cfg014_s cn68xxp1;
+	struct cvmx_pciercx_cfg014_s cn70xx;
+	struct cvmx_pciercx_cfg014_s cn70xxp1;
+	struct cvmx_pciercx_cfg014_s cn73xx;
+	struct cvmx_pciercx_cfg014_s cn78xx;
+	struct cvmx_pciercx_cfg014_s cn78xxp1;
+	struct cvmx_pciercx_cfg014_s cnf71xx;
+	struct cvmx_pciercx_cfg014_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg014 cvmx_pciercx_cfg014_t;
+
+/**
+ * cvmx_pcierc#_cfg015
+ *
+ * This register contains the sixteenth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg015 {
+	u32 u32;
+	struct cvmx_pciercx_cfg015_s {
+		u32 reserved_28_31 : 4;
+		u32 dtsees : 1;
+		u32 dts : 1;
+		u32 sdt : 1;
+		u32 pdt : 1;
+		u32 fbbe : 1;
+		u32 sbrst : 1;
+		u32 mam : 1;
+		u32 vga16d : 1;
+		u32 vgae : 1;
+		u32 isae : 1;
+		u32 see : 1;
+		u32 pere : 1;
+		u32 inta : 8;
+		u32 il : 8;
+	} s;
+	struct cvmx_pciercx_cfg015_s cn52xx;
+	struct cvmx_pciercx_cfg015_s cn52xxp1;
+	struct cvmx_pciercx_cfg015_s cn56xx;
+	struct cvmx_pciercx_cfg015_s cn56xxp1;
+	struct cvmx_pciercx_cfg015_s cn61xx;
+	struct cvmx_pciercx_cfg015_s cn63xx;
+	struct cvmx_pciercx_cfg015_s cn63xxp1;
+	struct cvmx_pciercx_cfg015_s cn66xx;
+	struct cvmx_pciercx_cfg015_s cn68xx;
+	struct cvmx_pciercx_cfg015_s cn68xxp1;
+	struct cvmx_pciercx_cfg015_cn70xx {
+		u32 reserved_31_28 : 4;
+		u32 dtsees : 1;
+		u32 dts : 1;
+		u32 sdt : 1;
+		u32 pdt : 1;
+		u32 fbbe : 1;
+		u32 sbrst : 1;
+		u32 mam : 1;
+		u32 vga16d : 1;
+		u32 vgae : 1;
+		u32 isae : 1;
+		u32 see : 1;
+		u32 pere : 1;
+		u32 inta : 8;
+		u32 il : 8;
+	} cn70xx;
+	struct cvmx_pciercx_cfg015_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg015_cn70xx cn73xx;
+	struct cvmx_pciercx_cfg015_cn70xx cn78xx;
+	struct cvmx_pciercx_cfg015_cn70xx cn78xxp1;
+	struct cvmx_pciercx_cfg015_s cnf71xx;
+	struct cvmx_pciercx_cfg015_cn70xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg015 cvmx_pciercx_cfg015_t;
+
+/**
+ * cvmx_pcierc#_cfg016
+ *
+ * This register contains the seventeenth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg016 {
+	u32 u32;
+	struct cvmx_pciercx_cfg016_s {
+		u32 pmes : 5;
+		u32 d2s : 1;
+		u32 d1s : 1;
+		u32 auxc : 3;
+		u32 dsi : 1;
+		u32 reserved_20_20 : 1;
+		u32 pme_clock : 1;
+		u32 pmsv : 3;
+		u32 ncp : 8;
+		u32 pmcid : 8;
+	} s;
+	struct cvmx_pciercx_cfg016_s cn52xx;
+	struct cvmx_pciercx_cfg016_s cn52xxp1;
+	struct cvmx_pciercx_cfg016_s cn56xx;
+	struct cvmx_pciercx_cfg016_s cn56xxp1;
+	struct cvmx_pciercx_cfg016_s cn61xx;
+	struct cvmx_pciercx_cfg016_s cn63xx;
+	struct cvmx_pciercx_cfg016_s cn63xxp1;
+	struct cvmx_pciercx_cfg016_s cn66xx;
+	struct cvmx_pciercx_cfg016_s cn68xx;
+	struct cvmx_pciercx_cfg016_s cn68xxp1;
+	struct cvmx_pciercx_cfg016_s cn70xx;
+	struct cvmx_pciercx_cfg016_s cn70xxp1;
+	struct cvmx_pciercx_cfg016_s cn73xx;
+	struct cvmx_pciercx_cfg016_s cn78xx;
+	struct cvmx_pciercx_cfg016_s cn78xxp1;
+	struct cvmx_pciercx_cfg016_s cnf71xx;
+	struct cvmx_pciercx_cfg016_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg016 cvmx_pciercx_cfg016_t;
+
+/**
+ * cvmx_pcierc#_cfg017
+ *
+ * This register contains the eighteenth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg017 {
+	u32 u32;
+	struct cvmx_pciercx_cfg017_s {
+		u32 pmdia : 8;
+		u32 bpccee : 1;
+		u32 bd3h : 1;
+		u32 reserved_16_21 : 6;
+		u32 pmess : 1;
+		u32 pmedsia : 2;
+		u32 pmds : 4;
+		u32 pmeens : 1;
+		u32 reserved_4_7 : 4;
+		u32 nsr : 1;
+		u32 reserved_2_2 : 1;
+		u32 ps : 2;
+	} s;
+	struct cvmx_pciercx_cfg017_s cn52xx;
+	struct cvmx_pciercx_cfg017_s cn52xxp1;
+	struct cvmx_pciercx_cfg017_s cn56xx;
+	struct cvmx_pciercx_cfg017_s cn56xxp1;
+	struct cvmx_pciercx_cfg017_s cn61xx;
+	struct cvmx_pciercx_cfg017_s cn63xx;
+	struct cvmx_pciercx_cfg017_s cn63xxp1;
+	struct cvmx_pciercx_cfg017_s cn66xx;
+	struct cvmx_pciercx_cfg017_s cn68xx;
+	struct cvmx_pciercx_cfg017_s cn68xxp1;
+	struct cvmx_pciercx_cfg017_s cn70xx;
+	struct cvmx_pciercx_cfg017_s cn70xxp1;
+	struct cvmx_pciercx_cfg017_s cn73xx;
+	struct cvmx_pciercx_cfg017_s cn78xx;
+	struct cvmx_pciercx_cfg017_s cn78xxp1;
+	struct cvmx_pciercx_cfg017_s cnf71xx;
+	struct cvmx_pciercx_cfg017_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg017 cvmx_pciercx_cfg017_t;
+
+/**
+ * cvmx_pcierc#_cfg020
+ *
+ * This register contains the twenty-first 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg020 {
+	u32 u32;
+	struct cvmx_pciercx_cfg020_s {
+		u32 reserved_24_31 : 8;
+		u32 m64 : 1;
+		u32 mme : 3;
+		u32 mmc : 3;
+		u32 msien : 1;
+		u32 ncp : 8;
+		u32 msicid : 8;
+	} s;
+	struct cvmx_pciercx_cfg020_s cn52xx;
+	struct cvmx_pciercx_cfg020_s cn52xxp1;
+	struct cvmx_pciercx_cfg020_s cn56xx;
+	struct cvmx_pciercx_cfg020_s cn56xxp1;
+	struct cvmx_pciercx_cfg020_cn61xx {
+		u32 reserved_25_31 : 7;
+		u32 pvm : 1;
+		u32 m64 : 1;
+		u32 mme : 3;
+		u32 mmc : 3;
+		u32 msien : 1;
+		u32 ncp : 8;
+		u32 msicid : 8;
+	} cn61xx;
+	struct cvmx_pciercx_cfg020_s cn63xx;
+	struct cvmx_pciercx_cfg020_s cn63xxp1;
+	struct cvmx_pciercx_cfg020_s cn66xx;
+	struct cvmx_pciercx_cfg020_s cn68xx;
+	struct cvmx_pciercx_cfg020_s cn68xxp1;
+	struct cvmx_pciercx_cfg020_cn61xx cn70xx;
+	struct cvmx_pciercx_cfg020_cn61xx cn70xxp1;
+	struct cvmx_pciercx_cfg020_cn73xx {
+		u32 reserved_25_31 : 7;
+		u32 pvms : 1;
+		u32 m64 : 1;
+		u32 mme : 3;
+		u32 mmc : 3;
+		u32 msien : 1;
+		u32 ncp : 8;
+		u32 msicid : 8;
+	} cn73xx;
+	struct cvmx_pciercx_cfg020_cn73xx cn78xx;
+	struct cvmx_pciercx_cfg020_cn73xx cn78xxp1;
+	struct cvmx_pciercx_cfg020_cn61xx cnf71xx;
+	struct cvmx_pciercx_cfg020_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg020 cvmx_pciercx_cfg020_t;
+
+/**
+ * cvmx_pcierc#_cfg021
+ *
+ * This register contains the twenty-second 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg021 {
+	u32 u32;
+	struct cvmx_pciercx_cfg021_s {
+		u32 lmsi : 30;
+		u32 reserved_0_1 : 2;
+	} s;
+	struct cvmx_pciercx_cfg021_s cn52xx;
+	struct cvmx_pciercx_cfg021_s cn52xxp1;
+	struct cvmx_pciercx_cfg021_s cn56xx;
+	struct cvmx_pciercx_cfg021_s cn56xxp1;
+	struct cvmx_pciercx_cfg021_s cn61xx;
+	struct cvmx_pciercx_cfg021_s cn63xx;
+	struct cvmx_pciercx_cfg021_s cn63xxp1;
+	struct cvmx_pciercx_cfg021_s cn66xx;
+	struct cvmx_pciercx_cfg021_s cn68xx;
+	struct cvmx_pciercx_cfg021_s cn68xxp1;
+	struct cvmx_pciercx_cfg021_s cn70xx;
+	struct cvmx_pciercx_cfg021_s cn70xxp1;
+	struct cvmx_pciercx_cfg021_s cn73xx;
+	struct cvmx_pciercx_cfg021_s cn78xx;
+	struct cvmx_pciercx_cfg021_s cn78xxp1;
+	struct cvmx_pciercx_cfg021_s cnf71xx;
+	struct cvmx_pciercx_cfg021_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg021 cvmx_pciercx_cfg021_t;
+
+/**
+ * cvmx_pcierc#_cfg022
+ *
+ * This register contains the twenty-third 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg022 {
+	u32 u32;
+	struct cvmx_pciercx_cfg022_s {
+		u32 umsi : 32;
+	} s;
+	struct cvmx_pciercx_cfg022_s cn52xx;
+	struct cvmx_pciercx_cfg022_s cn52xxp1;
+	struct cvmx_pciercx_cfg022_s cn56xx;
+	struct cvmx_pciercx_cfg022_s cn56xxp1;
+	struct cvmx_pciercx_cfg022_s cn61xx;
+	struct cvmx_pciercx_cfg022_s cn63xx;
+	struct cvmx_pciercx_cfg022_s cn63xxp1;
+	struct cvmx_pciercx_cfg022_s cn66xx;
+	struct cvmx_pciercx_cfg022_s cn68xx;
+	struct cvmx_pciercx_cfg022_s cn68xxp1;
+	struct cvmx_pciercx_cfg022_s cn70xx;
+	struct cvmx_pciercx_cfg022_s cn70xxp1;
+	struct cvmx_pciercx_cfg022_s cn73xx;
+	struct cvmx_pciercx_cfg022_s cn78xx;
+	struct cvmx_pciercx_cfg022_s cn78xxp1;
+	struct cvmx_pciercx_cfg022_s cnf71xx;
+	struct cvmx_pciercx_cfg022_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg022 cvmx_pciercx_cfg022_t;
+
+/**
+ * cvmx_pcierc#_cfg023
+ *
+ * This register contains the twenty-fourth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg023 {
+	u32 u32;
+	struct cvmx_pciercx_cfg023_s {
+		u32 reserved_16_31 : 16;
+		u32 msimd : 16;
+	} s;
+	struct cvmx_pciercx_cfg023_s cn52xx;
+	struct cvmx_pciercx_cfg023_s cn52xxp1;
+	struct cvmx_pciercx_cfg023_s cn56xx;
+	struct cvmx_pciercx_cfg023_s cn56xxp1;
+	struct cvmx_pciercx_cfg023_s cn61xx;
+	struct cvmx_pciercx_cfg023_s cn63xx;
+	struct cvmx_pciercx_cfg023_s cn63xxp1;
+	struct cvmx_pciercx_cfg023_s cn66xx;
+	struct cvmx_pciercx_cfg023_s cn68xx;
+	struct cvmx_pciercx_cfg023_s cn68xxp1;
+	struct cvmx_pciercx_cfg023_s cn70xx;
+	struct cvmx_pciercx_cfg023_s cn70xxp1;
+	struct cvmx_pciercx_cfg023_s cn73xx;
+	struct cvmx_pciercx_cfg023_s cn78xx;
+	struct cvmx_pciercx_cfg023_s cn78xxp1;
+	struct cvmx_pciercx_cfg023_s cnf71xx;
+	struct cvmx_pciercx_cfg023_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg023 cvmx_pciercx_cfg023_t;
+
+/**
+ * cvmx_pcierc#_cfg028
+ *
+ * This register contains the twenty-ninth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg028 {
+	u32 u32;
+	struct cvmx_pciercx_cfg028_s {
+		u32 reserved_30_31 : 2;
+		u32 imn : 5;
+		u32 si : 1;
+		u32 dpt : 4;
+		u32 pciecv : 4;
+		u32 ncp : 8;
+		u32 pcieid : 8;
+	} s;
+	struct cvmx_pciercx_cfg028_s cn52xx;
+	struct cvmx_pciercx_cfg028_s cn52xxp1;
+	struct cvmx_pciercx_cfg028_s cn56xx;
+	struct cvmx_pciercx_cfg028_s cn56xxp1;
+	struct cvmx_pciercx_cfg028_s cn61xx;
+	struct cvmx_pciercx_cfg028_s cn63xx;
+	struct cvmx_pciercx_cfg028_s cn63xxp1;
+	struct cvmx_pciercx_cfg028_s cn66xx;
+	struct cvmx_pciercx_cfg028_s cn68xx;
+	struct cvmx_pciercx_cfg028_s cn68xxp1;
+	struct cvmx_pciercx_cfg028_s cn70xx;
+	struct cvmx_pciercx_cfg028_s cn70xxp1;
+	struct cvmx_pciercx_cfg028_s cn73xx;
+	struct cvmx_pciercx_cfg028_s cn78xx;
+	struct cvmx_pciercx_cfg028_s cn78xxp1;
+	struct cvmx_pciercx_cfg028_s cnf71xx;
+	struct cvmx_pciercx_cfg028_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg028 cvmx_pciercx_cfg028_t;
+
+/**
+ * cvmx_pcierc#_cfg029
+ *
+ * This register contains the thirtieth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg029 {
+	u32 u32;
+	struct cvmx_pciercx_cfg029_s {
+		u32 reserved_29_31 : 3;
+		u32 flr_cap : 1;
+		u32 cspls : 2;
+		u32 csplv : 8;
+		u32 reserved_16_17 : 2;
+		u32 rber : 1;
+		u32 reserved_12_14 : 3;
+		u32 el1al : 3;
+		u32 el0al : 3;
+		u32 etfs : 1;
+		u32 pfs : 2;
+		u32 mpss : 3;
+	} s;
+	struct cvmx_pciercx_cfg029_cn52xx {
+		u32 reserved_28_31 : 4;
+		u32 cspls : 2;
+		u32 csplv : 8;
+		u32 reserved_16_17 : 2;
+		u32 rber : 1;
+		u32 reserved_12_14 : 3;
+		u32 el1al : 3;
+		u32 el0al : 3;
+		u32 etfs : 1;
+		u32 pfs : 2;
+		u32 mpss : 3;
+	} cn52xx;
+	struct cvmx_pciercx_cfg029_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg029_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg029_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg029_cn52xx cn61xx;
+	struct cvmx_pciercx_cfg029_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg029_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg029_cn52xx cn66xx;
+	struct cvmx_pciercx_cfg029_cn52xx cn68xx;
+	struct cvmx_pciercx_cfg029_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg029_cn52xx cn70xx;
+	struct cvmx_pciercx_cfg029_cn52xx cn70xxp1;
+	struct cvmx_pciercx_cfg029_s cn73xx;
+	struct cvmx_pciercx_cfg029_s cn78xx;
+	struct cvmx_pciercx_cfg029_s cn78xxp1;
+	struct cvmx_pciercx_cfg029_cn52xx cnf71xx;
+	struct cvmx_pciercx_cfg029_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg029 cvmx_pciercx_cfg029_t;
+
+/**
+ * cvmx_pcierc#_cfg030
+ *
+ * This register contains the thirty-first 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg030 {
+	u32 u32;
+	struct cvmx_pciercx_cfg030_s {
+		u32 reserved_22_31 : 10;
+		u32 tp : 1;
+		u32 ap_d : 1;
+		u32 ur_d : 1;
+		u32 fe_d : 1;
+		u32 nfe_d : 1;
+		u32 ce_d : 1;
+		u32 reserved_15_15 : 1;
+		u32 mrrs : 3;
+		u32 ns_en : 1;
+		u32 ap_en : 1;
+		u32 pf_en : 1;
+		u32 etf_en : 1;
+		u32 mps : 3;
+		u32 ro_en : 1;
+		u32 ur_en : 1;
+		u32 fe_en : 1;
+		u32 nfe_en : 1;
+		u32 ce_en : 1;
+	} s;
+	struct cvmx_pciercx_cfg030_s cn52xx;
+	struct cvmx_pciercx_cfg030_s cn52xxp1;
+	struct cvmx_pciercx_cfg030_s cn56xx;
+	struct cvmx_pciercx_cfg030_s cn56xxp1;
+	struct cvmx_pciercx_cfg030_s cn61xx;
+	struct cvmx_pciercx_cfg030_s cn63xx;
+	struct cvmx_pciercx_cfg030_s cn63xxp1;
+	struct cvmx_pciercx_cfg030_s cn66xx;
+	struct cvmx_pciercx_cfg030_s cn68xx;
+	struct cvmx_pciercx_cfg030_s cn68xxp1;
+	struct cvmx_pciercx_cfg030_s cn70xx;
+	struct cvmx_pciercx_cfg030_s cn70xxp1;
+	struct cvmx_pciercx_cfg030_s cn73xx;
+	struct cvmx_pciercx_cfg030_s cn78xx;
+	struct cvmx_pciercx_cfg030_s cn78xxp1;
+	struct cvmx_pciercx_cfg030_s cnf71xx;
+	struct cvmx_pciercx_cfg030_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg030 cvmx_pciercx_cfg030_t;
+
+/**
+ * cvmx_pcierc#_cfg031
+ *
+ * This register contains the thirty-second 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg031 {
+	u32 u32;
+	struct cvmx_pciercx_cfg031_s {
+		u32 pnum : 8;
+		u32 reserved_23_23 : 1;
+		u32 aspm : 1;
+		u32 lbnc : 1;
+		u32 dllarc : 1;
+		u32 sderc : 1;
+		u32 cpm : 1;
+		u32 l1el : 3;
+		u32 l0el : 3;
+		u32 aslpms : 2;
+		u32 mlw : 6;
+		u32 mls : 4;
+	} s;
+	struct cvmx_pciercx_cfg031_cn52xx {
+		u32 pnum : 8;
+		u32 reserved_22_23 : 2;
+		u32 lbnc : 1;
+		u32 dllarc : 1;
+		u32 sderc : 1;
+		u32 cpm : 1;
+		u32 l1el : 3;
+		u32 l0el : 3;
+		u32 aslpms : 2;
+		u32 mlw : 6;
+		u32 mls : 4;
+	} cn52xx;
+	struct cvmx_pciercx_cfg031_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg031_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg031_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg031_s cn61xx;
+	struct cvmx_pciercx_cfg031_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg031_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg031_s cn66xx;
+	struct cvmx_pciercx_cfg031_s cn68xx;
+	struct cvmx_pciercx_cfg031_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg031_s cn70xx;
+	struct cvmx_pciercx_cfg031_s cn70xxp1;
+	struct cvmx_pciercx_cfg031_s cn73xx;
+	struct cvmx_pciercx_cfg031_s cn78xx;
+	struct cvmx_pciercx_cfg031_s cn78xxp1;
+	struct cvmx_pciercx_cfg031_s cnf71xx;
+	struct cvmx_pciercx_cfg031_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg031 cvmx_pciercx_cfg031_t;
+
+/**
+ * cvmx_pcierc#_cfg032
+ *
+ * This register contains the thirty-third 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg032 {
+	u32 u32;
+	struct cvmx_pciercx_cfg032_s {
+		u32 lab : 1;
+		u32 lbm : 1;
+		u32 dlla : 1;
+		u32 scc : 1;
+		u32 lt : 1;
+		u32 reserved_26_26 : 1;
+		u32 nlw : 6;
+		u32 ls : 4;
+		u32 reserved_12_15 : 4;
+		u32 lab_int_enb : 1;
+		u32 lbm_int_enb : 1;
+		u32 hawd : 1;
+		u32 ecpm : 1;
+		u32 es : 1;
+		u32 ccc : 1;
+		u32 rl : 1;
+		u32 ld : 1;
+		u32 rcb : 1;
+		u32 reserved_2_2 : 1;
+		u32 aslpc : 2;
+	} s;
+	struct cvmx_pciercx_cfg032_s cn52xx;
+	struct cvmx_pciercx_cfg032_s cn52xxp1;
+	struct cvmx_pciercx_cfg032_s cn56xx;
+	struct cvmx_pciercx_cfg032_s cn56xxp1;
+	struct cvmx_pciercx_cfg032_s cn61xx;
+	struct cvmx_pciercx_cfg032_s cn63xx;
+	struct cvmx_pciercx_cfg032_s cn63xxp1;
+	struct cvmx_pciercx_cfg032_s cn66xx;
+	struct cvmx_pciercx_cfg032_s cn68xx;
+	struct cvmx_pciercx_cfg032_s cn68xxp1;
+	struct cvmx_pciercx_cfg032_s cn70xx;
+	struct cvmx_pciercx_cfg032_s cn70xxp1;
+	struct cvmx_pciercx_cfg032_s cn73xx;
+	struct cvmx_pciercx_cfg032_s cn78xx;
+	struct cvmx_pciercx_cfg032_s cn78xxp1;
+	struct cvmx_pciercx_cfg032_s cnf71xx;
+	struct cvmx_pciercx_cfg032_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg032 cvmx_pciercx_cfg032_t;
+
+/**
+ * cvmx_pcierc#_cfg033
+ *
+ * This register contains the thirty-fourth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg033 {
+	u32 u32;
+	struct cvmx_pciercx_cfg033_s {
+		u32 ps_num : 13;
+		u32 nccs : 1;
+		u32 emip : 1;
+		u32 sp_ls : 2;
+		u32 sp_lv : 8;
+		u32 hp_c : 1;
+		u32 hp_s : 1;
+		u32 pip : 1;
+		u32 aip : 1;
+		u32 mrlsp : 1;
+		u32 pcp : 1;
+		u32 abp : 1;
+	} s;
+	struct cvmx_pciercx_cfg033_s cn52xx;
+	struct cvmx_pciercx_cfg033_s cn52xxp1;
+	struct cvmx_pciercx_cfg033_s cn56xx;
+	struct cvmx_pciercx_cfg033_s cn56xxp1;
+	struct cvmx_pciercx_cfg033_s cn61xx;
+	struct cvmx_pciercx_cfg033_s cn63xx;
+	struct cvmx_pciercx_cfg033_s cn63xxp1;
+	struct cvmx_pciercx_cfg033_s cn66xx;
+	struct cvmx_pciercx_cfg033_s cn68xx;
+	struct cvmx_pciercx_cfg033_s cn68xxp1;
+	struct cvmx_pciercx_cfg033_s cn70xx;
+	struct cvmx_pciercx_cfg033_s cn70xxp1;
+	struct cvmx_pciercx_cfg033_s cn73xx;
+	struct cvmx_pciercx_cfg033_s cn78xx;
+	struct cvmx_pciercx_cfg033_s cn78xxp1;
+	struct cvmx_pciercx_cfg033_s cnf71xx;
+	struct cvmx_pciercx_cfg033_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg033 cvmx_pciercx_cfg033_t;
+
+/**
+ * cvmx_pcierc#_cfg034
+ *
+ * This register contains the thirty-fifth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg034 {
+	u32 u32;
+	struct cvmx_pciercx_cfg034_s {
+		u32 reserved_25_31 : 7;
+		u32 dlls_c : 1;
+		u32 emis : 1;
+		u32 pds : 1;
+		u32 mrlss : 1;
+		u32 ccint_d : 1;
+		u32 pd_c : 1;
+		u32 mrls_c : 1;
+		u32 pf_d : 1;
+		u32 abp_d : 1;
+		u32 reserved_13_15 : 3;
+		u32 dlls_en : 1;
+		u32 emic : 1;
+		u32 pcc : 1;
+		u32 pic : 2;
+		u32 aic : 2;
+		u32 hpint_en : 1;
+		u32 ccint_en : 1;
+		u32 pd_en : 1;
+		u32 mrls_en : 1;
+		u32 pf_en : 1;
+		u32 abp_en : 1;
+	} s;
+	struct cvmx_pciercx_cfg034_s cn52xx;
+	struct cvmx_pciercx_cfg034_s cn52xxp1;
+	struct cvmx_pciercx_cfg034_s cn56xx;
+	struct cvmx_pciercx_cfg034_s cn56xxp1;
+	struct cvmx_pciercx_cfg034_s cn61xx;
+	struct cvmx_pciercx_cfg034_s cn63xx;
+	struct cvmx_pciercx_cfg034_s cn63xxp1;
+	struct cvmx_pciercx_cfg034_s cn66xx;
+	struct cvmx_pciercx_cfg034_s cn68xx;
+	struct cvmx_pciercx_cfg034_s cn68xxp1;
+	struct cvmx_pciercx_cfg034_s cn70xx;
+	struct cvmx_pciercx_cfg034_s cn70xxp1;
+	struct cvmx_pciercx_cfg034_s cn73xx;
+	struct cvmx_pciercx_cfg034_s cn78xx;
+	struct cvmx_pciercx_cfg034_s cn78xxp1;
+	struct cvmx_pciercx_cfg034_s cnf71xx;
+	struct cvmx_pciercx_cfg034_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg034 cvmx_pciercx_cfg034_t;
+
+/**
+ * cvmx_pcierc#_cfg035
+ *
+ * This register contains the thirty-sixth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg035 {
+	u32 u32;
+	struct cvmx_pciercx_cfg035_s {
+		u32 reserved_17_31 : 15;
+		u32 crssv : 1;
+		u32 reserved_5_15 : 11;
+		u32 crssve : 1;
+		u32 pmeie : 1;
+		u32 sefee : 1;
+		u32 senfee : 1;
+		u32 secee : 1;
+	} s;
+	struct cvmx_pciercx_cfg035_s cn52xx;
+	struct cvmx_pciercx_cfg035_s cn52xxp1;
+	struct cvmx_pciercx_cfg035_s cn56xx;
+	struct cvmx_pciercx_cfg035_s cn56xxp1;
+	struct cvmx_pciercx_cfg035_s cn61xx;
+	struct cvmx_pciercx_cfg035_s cn63xx;
+	struct cvmx_pciercx_cfg035_s cn63xxp1;
+	struct cvmx_pciercx_cfg035_s cn66xx;
+	struct cvmx_pciercx_cfg035_s cn68xx;
+	struct cvmx_pciercx_cfg035_s cn68xxp1;
+	struct cvmx_pciercx_cfg035_s cn70xx;
+	struct cvmx_pciercx_cfg035_s cn70xxp1;
+	struct cvmx_pciercx_cfg035_s cn73xx;
+	struct cvmx_pciercx_cfg035_s cn78xx;
+	struct cvmx_pciercx_cfg035_s cn78xxp1;
+	struct cvmx_pciercx_cfg035_s cnf71xx;
+	struct cvmx_pciercx_cfg035_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg035 cvmx_pciercx_cfg035_t;
+
+/**
+ * cvmx_pcierc#_cfg036
+ *
+ * This register contains the thirty-seventh 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg036 {
+	u32 u32;
+	struct cvmx_pciercx_cfg036_s {
+		u32 reserved_18_31 : 14;
+		u32 pme_pend : 1;
+		u32 pme_stat : 1;
+		u32 pme_rid : 16;
+	} s;
+	struct cvmx_pciercx_cfg036_s cn52xx;
+	struct cvmx_pciercx_cfg036_s cn52xxp1;
+	struct cvmx_pciercx_cfg036_s cn56xx;
+	struct cvmx_pciercx_cfg036_s cn56xxp1;
+	struct cvmx_pciercx_cfg036_s cn61xx;
+	struct cvmx_pciercx_cfg036_s cn63xx;
+	struct cvmx_pciercx_cfg036_s cn63xxp1;
+	struct cvmx_pciercx_cfg036_s cn66xx;
+	struct cvmx_pciercx_cfg036_s cn68xx;
+	struct cvmx_pciercx_cfg036_s cn68xxp1;
+	struct cvmx_pciercx_cfg036_s cn70xx;
+	struct cvmx_pciercx_cfg036_s cn70xxp1;
+	struct cvmx_pciercx_cfg036_s cn73xx;
+	struct cvmx_pciercx_cfg036_s cn78xx;
+	struct cvmx_pciercx_cfg036_s cn78xxp1;
+	struct cvmx_pciercx_cfg036_s cnf71xx;
+	struct cvmx_pciercx_cfg036_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg036 cvmx_pciercx_cfg036_t;
+
+/**
+ * cvmx_pcierc#_cfg037
+ *
+ * This register contains the thirty-eighth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg037 {
+	u32 u32;
+	struct cvmx_pciercx_cfg037_s {
+		u32 reserved_24_31 : 8;
+		u32 meetp : 2;
+		u32 eetps : 1;
+		u32 effs : 1;
+		u32 obffs : 2;
+		u32 reserved_12_17 : 6;
+		u32 ltrs : 1;
+		u32 noroprpr : 1;
+		u32 atom128s : 1;
+		u32 atom64s : 1;
+		u32 atom32s : 1;
+		u32 atom_ops : 1;
+		u32 reserved_5_5 : 1;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} s;
+	struct cvmx_pciercx_cfg037_cn52xx {
+		u32 reserved_5_31 : 27;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} cn52xx;
+	struct cvmx_pciercx_cfg037_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg037_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg037_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg037_cn61xx {
+		u32 reserved_14_31 : 18;
+		u32 tph : 2;
+		u32 reserved_11_11 : 1;
+		u32 noroprpr : 1;
+		u32 atom128s : 1;
+		u32 atom64s : 1;
+		u32 atom32s : 1;
+		u32 atom_ops : 1;
+		u32 ari_fw : 1;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} cn61xx;
+	struct cvmx_pciercx_cfg037_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg037_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg037_cn66xx {
+		u32 reserved_14_31 : 18;
+		u32 tph : 2;
+		u32 reserved_11_11 : 1;
+		u32 noroprpr : 1;
+		u32 atom128s : 1;
+		u32 atom64s : 1;
+		u32 atom32s : 1;
+		u32 atom_ops : 1;
+		u32 ari : 1;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} cn66xx;
+	struct cvmx_pciercx_cfg037_cn66xx cn68xx;
+	struct cvmx_pciercx_cfg037_cn66xx cn68xxp1;
+	struct cvmx_pciercx_cfg037_cn61xx cn70xx;
+	struct cvmx_pciercx_cfg037_cn61xx cn70xxp1;
+	struct cvmx_pciercx_cfg037_cn73xx {
+		u32 reserved_24_31 : 8;
+		u32 meetp : 2;
+		u32 eetps : 1;
+		u32 effs : 1;
+		u32 obffs : 2;
+		u32 reserved_14_17 : 4;
+		u32 tph : 2;
+		u32 ltrs : 1;
+		u32 noroprpr : 1;
+		u32 atom128s : 1;
+		u32 atom64s : 1;
+		u32 atom32s : 1;
+		u32 atom_ops : 1;
+		u32 ari_fw : 1;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} cn73xx;
+	struct cvmx_pciercx_cfg037_cn73xx cn78xx;
+	struct cvmx_pciercx_cfg037_cn73xx cn78xxp1;
+	struct cvmx_pciercx_cfg037_cnf71xx {
+		u32 reserved_20_31 : 12;
+		u32 obffs : 2;
+		u32 reserved_14_17 : 4;
+		u32 tphs : 2;
+		u32 ltrs : 1;
+		u32 noroprpr : 1;
+		u32 atom128s : 1;
+		u32 atom64s : 1;
+		u32 atom32s : 1;
+		u32 atom_ops : 1;
+		u32 ari_fw : 1;
+		u32 ctds : 1;
+		u32 ctrs : 4;
+	} cnf71xx;
+	struct cvmx_pciercx_cfg037_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg037 cvmx_pciercx_cfg037_t;
+
+/**
+ * cvmx_pcierc#_cfg038
+ *
+ * This register contains the thirty-ninth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg038 {
+	u32 u32;
+	struct cvmx_pciercx_cfg038_s {
+		u32 reserved_16_31 : 16;
+		u32 eetpb : 1;
+		u32 obffe : 2;
+		u32 reserved_11_12 : 2;
+		u32 ltre : 1;
+		u32 id0_cp : 1;
+		u32 id0_rq : 1;
+		u32 atom_op_eb : 1;
+		u32 atom_op : 1;
+		u32 ari : 1;
+		u32 ctd : 1;
+		u32 ctv : 4;
+	} s;
+	struct cvmx_pciercx_cfg038_cn52xx {
+		u32 reserved_5_31 : 27;
+		u32 ctd : 1;
+		u32 ctv : 4;
+	} cn52xx;
+	struct cvmx_pciercx_cfg038_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg038_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg038_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg038_cn61xx {
+		u32 reserved_10_31 : 22;
+		u32 id0_cp : 1;
+		u32 id0_rq : 1;
+		u32 atom_op_eb : 1;
+		u32 atom_op : 1;
+		u32 ari : 1;
+		u32 ctd : 1;
+		u32 ctv : 4;
+	} cn61xx;
+	struct cvmx_pciercx_cfg038_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg038_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg038_cn61xx cn66xx;
+	struct cvmx_pciercx_cfg038_cn61xx cn68xx;
+	struct cvmx_pciercx_cfg038_cn61xx cn68xxp1;
+	struct cvmx_pciercx_cfg038_cn61xx cn70xx;
+	struct cvmx_pciercx_cfg038_cn61xx cn70xxp1;
+	struct cvmx_pciercx_cfg038_s cn73xx;
+	struct cvmx_pciercx_cfg038_s cn78xx;
+	struct cvmx_pciercx_cfg038_s cn78xxp1;
+	struct cvmx_pciercx_cfg038_cnf71xx {
+		u32 reserved_15_31 : 17;
+		u32 obffe : 2;
+		u32 reserved_11_12 : 2;
+		u32 ltre : 1;
+		u32 id0_cp : 1;
+		u32 id0_rq : 1;
+		u32 atom_op_eb : 1;
+		u32 atom_op : 1;
+		u32 ari : 1;
+		u32 ctd : 1;
+		u32 ctv : 4;
+	} cnf71xx;
+	struct cvmx_pciercx_cfg038_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg038 cvmx_pciercx_cfg038_t;
+
+/**
+ * cvmx_pcierc#_cfg039
+ *
+ * This register contains the fortieth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg039 {
+	u32 u32;
+	struct cvmx_pciercx_cfg039_s {
+		u32 reserved_9_31 : 23;
+		u32 cls : 1;
+		u32 slsv : 7;
+		u32 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pciercx_cfg039_cn52xx {
+		u32 reserved_0_31 : 32;
+	} cn52xx;
+	struct cvmx_pciercx_cfg039_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg039_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg039_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg039_s cn61xx;
+	struct cvmx_pciercx_cfg039_s cn63xx;
+	struct cvmx_pciercx_cfg039_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg039_s cn66xx;
+	struct cvmx_pciercx_cfg039_s cn68xx;
+	struct cvmx_pciercx_cfg039_s cn68xxp1;
+	struct cvmx_pciercx_cfg039_s cn70xx;
+	struct cvmx_pciercx_cfg039_s cn70xxp1;
+	struct cvmx_pciercx_cfg039_s cn73xx;
+	struct cvmx_pciercx_cfg039_s cn78xx;
+	struct cvmx_pciercx_cfg039_s cn78xxp1;
+	struct cvmx_pciercx_cfg039_s cnf71xx;
+	struct cvmx_pciercx_cfg039_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg039 cvmx_pciercx_cfg039_t;
+
+/**
+ * cvmx_pcierc#_cfg040
+ *
+ * This register contains the forty-first 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg040 {
+	u32 u32;
+	struct cvmx_pciercx_cfg040_s {
+		u32 reserved_22_31 : 10;
+		u32 ler : 1;
+		u32 ep3s : 1;
+		u32 ep2s : 1;
+		u32 ep1s : 1;
+		u32 eqc : 1;
+		u32 cdl : 1;
+		u32 cde : 4;
+		u32 csos : 1;
+		u32 emc : 1;
+		u32 tm : 3;
+		u32 sde : 1;
+		u32 hasd : 1;
+		u32 ec : 1;
+		u32 tls : 4;
+	} s;
+	struct cvmx_pciercx_cfg040_cn52xx {
+		u32 reserved_0_31 : 32;
+	} cn52xx;
+	struct cvmx_pciercx_cfg040_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg040_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg040_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg040_cn61xx {
+		u32 reserved_17_31 : 15;
+		u32 cdl : 1;
+		u32 reserved_13_15 : 3;
+		u32 cde : 1;
+		u32 csos : 1;
+		u32 emc : 1;
+		u32 tm : 3;
+		u32 sde : 1;
+		u32 hasd : 1;
+		u32 ec : 1;
+		u32 tls : 4;
+	} cn61xx;
+	struct cvmx_pciercx_cfg040_cn61xx cn63xx;
+	struct cvmx_pciercx_cfg040_cn61xx cn63xxp1;
+	struct cvmx_pciercx_cfg040_cn61xx cn66xx;
+	struct cvmx_pciercx_cfg040_cn61xx cn68xx;
+	struct cvmx_pciercx_cfg040_cn61xx cn68xxp1;
+	struct cvmx_pciercx_cfg040_cn61xx cn70xx;
+	struct cvmx_pciercx_cfg040_cn61xx cn70xxp1;
+	struct cvmx_pciercx_cfg040_s cn73xx;
+	struct cvmx_pciercx_cfg040_s cn78xx;
+	struct cvmx_pciercx_cfg040_s cn78xxp1;
+	struct cvmx_pciercx_cfg040_cn61xx cnf71xx;
+	struct cvmx_pciercx_cfg040_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg040 cvmx_pciercx_cfg040_t;
+
+/**
+ * cvmx_pcierc#_cfg041
+ *
+ * This register contains the forty-second 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg041 {
+	u32 u32;
+	struct cvmx_pciercx_cfg041_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pciercx_cfg041_s cn52xx;
+	struct cvmx_pciercx_cfg041_s cn52xxp1;
+	struct cvmx_pciercx_cfg041_s cn56xx;
+	struct cvmx_pciercx_cfg041_s cn56xxp1;
+	struct cvmx_pciercx_cfg041_s cn61xx;
+	struct cvmx_pciercx_cfg041_s cn63xx;
+	struct cvmx_pciercx_cfg041_s cn63xxp1;
+	struct cvmx_pciercx_cfg041_s cn66xx;
+	struct cvmx_pciercx_cfg041_s cn68xx;
+	struct cvmx_pciercx_cfg041_s cn68xxp1;
+	struct cvmx_pciercx_cfg041_s cn70xx;
+	struct cvmx_pciercx_cfg041_s cn70xxp1;
+	struct cvmx_pciercx_cfg041_s cn73xx;
+	struct cvmx_pciercx_cfg041_s cn78xx;
+	struct cvmx_pciercx_cfg041_s cn78xxp1;
+	struct cvmx_pciercx_cfg041_s cnf71xx;
+	struct cvmx_pciercx_cfg041_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg041 cvmx_pciercx_cfg041_t;
+
+/**
+ * cvmx_pcierc#_cfg042
+ *
+ * This register contains the forty-third 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg042 {
+	u32 u32;
+	struct cvmx_pciercx_cfg042_s {
+		u32 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pciercx_cfg042_s cn52xx;
+	struct cvmx_pciercx_cfg042_s cn52xxp1;
+	struct cvmx_pciercx_cfg042_s cn56xx;
+	struct cvmx_pciercx_cfg042_s cn56xxp1;
+	struct cvmx_pciercx_cfg042_s cn61xx;
+	struct cvmx_pciercx_cfg042_s cn63xx;
+	struct cvmx_pciercx_cfg042_s cn63xxp1;
+	struct cvmx_pciercx_cfg042_s cn66xx;
+	struct cvmx_pciercx_cfg042_s cn68xx;
+	struct cvmx_pciercx_cfg042_s cn68xxp1;
+	struct cvmx_pciercx_cfg042_s cn70xx;
+	struct cvmx_pciercx_cfg042_s cn70xxp1;
+	struct cvmx_pciercx_cfg042_s cn73xx;
+	struct cvmx_pciercx_cfg042_s cn78xx;
+	struct cvmx_pciercx_cfg042_s cn78xxp1;
+	struct cvmx_pciercx_cfg042_s cnf71xx;
+	struct cvmx_pciercx_cfg042_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg042 cvmx_pciercx_cfg042_t;
+
+/**
+ * cvmx_pcierc#_cfg044
+ *
+ * This register contains the forty-fifth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg044 {
+	u32 u32;
+	struct cvmx_pciercx_cfg044_s {
+		u32 msixen : 1;
+		u32 funm : 1;
+		u32 reserved_27_29 : 3;
+		u32 msixts : 11;
+		u32 ncp : 8;
+		u32 msixcid : 8;
+	} s;
+	struct cvmx_pciercx_cfg044_s cn73xx;
+	struct cvmx_pciercx_cfg044_s cn78xx;
+	struct cvmx_pciercx_cfg044_s cn78xxp1;
+	struct cvmx_pciercx_cfg044_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg044 cvmx_pciercx_cfg044_t;
+
+/**
+ * cvmx_pcierc#_cfg045
+ *
+ * This register contains the forty-sixth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg045 {
+	u32 u32;
+	struct cvmx_pciercx_cfg045_s {
+		u32 msixtoffs : 29;
+		u32 msixtbir : 3;
+	} s;
+	struct cvmx_pciercx_cfg045_s cn73xx;
+	struct cvmx_pciercx_cfg045_s cn78xx;
+	struct cvmx_pciercx_cfg045_s cn78xxp1;
+	struct cvmx_pciercx_cfg045_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg045 cvmx_pciercx_cfg045_t;
+
+/**
+ * cvmx_pcierc#_cfg046
+ *
+ * This register contains the forty-seventh 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg046 {
+	u32 u32;
+	struct cvmx_pciercx_cfg046_s {
+		u32 msixpoffs : 29;
+		u32 msixpbir : 3;
+	} s;
+	struct cvmx_pciercx_cfg046_s cn73xx;
+	struct cvmx_pciercx_cfg046_s cn78xx;
+	struct cvmx_pciercx_cfg046_s cn78xxp1;
+	struct cvmx_pciercx_cfg046_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg046 cvmx_pciercx_cfg046_t;
+
+/**
+ * cvmx_pcierc#_cfg064
+ *
+ * This register contains the sixty-fifth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg064 {
+	u32 u32;
+	struct cvmx_pciercx_cfg064_s {
+		u32 nco : 12;
+		u32 cv : 4;
+		u32 pcieec : 16;
+	} s;
+	struct cvmx_pciercx_cfg064_s cn52xx;
+	struct cvmx_pciercx_cfg064_s cn52xxp1;
+	struct cvmx_pciercx_cfg064_s cn56xx;
+	struct cvmx_pciercx_cfg064_s cn56xxp1;
+	struct cvmx_pciercx_cfg064_s cn61xx;
+	struct cvmx_pciercx_cfg064_s cn63xx;
+	struct cvmx_pciercx_cfg064_s cn63xxp1;
+	struct cvmx_pciercx_cfg064_s cn66xx;
+	struct cvmx_pciercx_cfg064_s cn68xx;
+	struct cvmx_pciercx_cfg064_s cn68xxp1;
+	struct cvmx_pciercx_cfg064_s cn70xx;
+	struct cvmx_pciercx_cfg064_s cn70xxp1;
+	struct cvmx_pciercx_cfg064_s cn73xx;
+	struct cvmx_pciercx_cfg064_s cn78xx;
+	struct cvmx_pciercx_cfg064_s cn78xxp1;
+	struct cvmx_pciercx_cfg064_s cnf71xx;
+	struct cvmx_pciercx_cfg064_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg064 cvmx_pciercx_cfg064_t;
+
+/**
+ * cvmx_pcierc#_cfg065
+ *
+ * This register contains the sixty-sixth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg065 {
+	u32 u32;
+	struct cvmx_pciercx_cfg065_s {
+		u32 reserved_26_31 : 6;
+		u32 tpbes : 1;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} s;
+	struct cvmx_pciercx_cfg065_cn52xx {
+		u32 reserved_21_31 : 11;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn52xx;
+	struct cvmx_pciercx_cfg065_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg065_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg065_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg065_cn61xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombs : 1;
+		u32 reserved_21_23 : 3;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_pciercx_cfg065_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg065_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg065_cn61xx cn66xx;
+	struct cvmx_pciercx_cfg065_cn61xx cn68xx;
+	struct cvmx_pciercx_cfg065_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg065_cn70xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_pciercx_cfg065_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg065_s cn73xx;
+	struct cvmx_pciercx_cfg065_s cn78xx;
+	struct cvmx_pciercx_cfg065_s cn78xxp1;
+	struct cvmx_pciercx_cfg065_cn70xx cnf71xx;
+	struct cvmx_pciercx_cfg065_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg065 cvmx_pciercx_cfg065_t;
+
+/**
+ * cvmx_pcierc#_cfg066
+ *
+ * This register contains the sixty-seventh 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg066 {
+	u32 u32;
+	struct cvmx_pciercx_cfg066_s {
+		u32 reserved_26_31 : 6;
+		u32 tpbem : 1;
+		u32 uatombm : 1;
+		u32 reserved_23_23 : 1;
+		u32 uciem : 1;
+		u32 reserved_21_21 : 1;
+		u32 urem : 1;
+		u32 ecrcem : 1;
+		u32 mtlpm : 1;
+		u32 rom : 1;
+		u32 ucm : 1;
+		u32 cam : 1;
+		u32 ctm : 1;
+		u32 fcpem : 1;
+		u32 ptlpm : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdem : 1;
+		u32 dlpem : 1;
+		u32 reserved_0_3 : 4;
+	} s;
+	struct cvmx_pciercx_cfg066_cn52xx {
+		u32 reserved_21_31 : 11;
+		u32 urem : 1;
+		u32 ecrcem : 1;
+		u32 mtlpm : 1;
+		u32 rom : 1;
+		u32 ucm : 1;
+		u32 cam : 1;
+		u32 ctm : 1;
+		u32 fcpem : 1;
+		u32 ptlpm : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdem : 1;
+		u32 dlpem : 1;
+		u32 reserved_0_3 : 4;
+	} cn52xx;
+	struct cvmx_pciercx_cfg066_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg066_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg066_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg066_cn61xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombm : 1;
+		u32 reserved_21_23 : 3;
+		u32 urem : 1;
+		u32 ecrcem : 1;
+		u32 mtlpm : 1;
+		u32 rom : 1;
+		u32 ucm : 1;
+		u32 cam : 1;
+		u32 ctm : 1;
+		u32 fcpem : 1;
+		u32 ptlpm : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdem : 1;
+		u32 dlpem : 1;
+		u32 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_pciercx_cfg066_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg066_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg066_cn61xx cn66xx;
+	struct cvmx_pciercx_cfg066_cn61xx cn68xx;
+	struct cvmx_pciercx_cfg066_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg066_cn70xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombm : 1;
+		u32 reserved_23_23 : 1;
+		u32 uciem : 1;
+		u32 reserved_21_21 : 1;
+		u32 urem : 1;
+		u32 ecrcem : 1;
+		u32 mtlpm : 1;
+		u32 rom : 1;
+		u32 ucm : 1;
+		u32 cam : 1;
+		u32 ctm : 1;
+		u32 fcpem : 1;
+		u32 ptlpm : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdem : 1;
+		u32 dlpem : 1;
+		u32 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_pciercx_cfg066_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg066_s cn73xx;
+	struct cvmx_pciercx_cfg066_s cn78xx;
+	struct cvmx_pciercx_cfg066_s cn78xxp1;
+	struct cvmx_pciercx_cfg066_cn70xx cnf71xx;
+	struct cvmx_pciercx_cfg066_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg066 cvmx_pciercx_cfg066_t;
+
+/**
+ * cvmx_pcierc#_cfg067
+ *
+ * This register contains the sixty-eighth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg067 {
+	u32 u32;
+	struct cvmx_pciercx_cfg067_s {
+		u32 reserved_26_31 : 6;
+		u32 tpbes : 1;
+		u32 uatombs : 1;
+		u32 reserved_21_23 : 3;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} s;
+	struct cvmx_pciercx_cfg067_cn52xx {
+		u32 reserved_21_31 : 11;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn52xx;
+	struct cvmx_pciercx_cfg067_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg067_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg067_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg067_cn61xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombs : 1;
+		u32 reserved_21_23 : 3;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn61xx;
+	struct cvmx_pciercx_cfg067_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg067_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg067_cn61xx cn66xx;
+	struct cvmx_pciercx_cfg067_cn61xx cn68xx;
+	struct cvmx_pciercx_cfg067_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg067_cn70xx {
+		u32 reserved_25_31 : 7;
+		u32 uatombs : 1;
+		u32 reserved_23_23 : 1;
+		u32 ucies : 1;
+		u32 reserved_21_21 : 1;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn70xx;
+	struct cvmx_pciercx_cfg067_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg067_cn73xx {
+		u32 reserved_26_31 : 6;
+		u32 tpbes : 1;
+		u32 uatombs : 1;
+		u32 unsuperr : 3;
+		u32 ures : 1;
+		u32 ecrces : 1;
+		u32 mtlps : 1;
+		u32 ros : 1;
+		u32 ucs : 1;
+		u32 cas : 1;
+		u32 cts : 1;
+		u32 fcpes : 1;
+		u32 ptlps : 1;
+		u32 reserved_6_11 : 6;
+		u32 sdes : 1;
+		u32 dlpes : 1;
+		u32 reserved_0_3 : 4;
+	} cn73xx;
+	struct cvmx_pciercx_cfg067_cn73xx cn78xx;
+	struct cvmx_pciercx_cfg067_cn73xx cn78xxp1;
+	struct cvmx_pciercx_cfg067_cn70xx cnf71xx;
+	struct cvmx_pciercx_cfg067_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg067 cvmx_pciercx_cfg067_t;
+
+/**
+ * cvmx_pcierc#_cfg068
+ *
+ * This register contains the sixty-ninth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg068 {
+	u32 u32;
+	struct cvmx_pciercx_cfg068_s {
+		u32 reserved_15_31 : 17;
+		u32 cies : 1;
+		u32 anfes : 1;
+		u32 rtts : 1;
+		u32 reserved_9_11 : 3;
+		u32 rnrs : 1;
+		u32 bdllps : 1;
+		u32 btlps : 1;
+		u32 reserved_1_5 : 5;
+		u32 res : 1;
+	} s;
+	struct cvmx_pciercx_cfg068_cn52xx {
+		u32 reserved_14_31 : 18;
+		u32 anfes : 1;
+		u32 rtts : 1;
+		u32 reserved_9_11 : 3;
+		u32 rnrs : 1;
+		u32 bdllps : 1;
+		u32 btlps : 1;
+		u32 reserved_1_5 : 5;
+		u32 res : 1;
+	} cn52xx;
+	struct cvmx_pciercx_cfg068_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg068_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg068_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg068_cn52xx cn61xx;
+	struct cvmx_pciercx_cfg068_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg068_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg068_cn52xx cn66xx;
+	struct cvmx_pciercx_cfg068_cn52xx cn68xx;
+	struct cvmx_pciercx_cfg068_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg068_s cn70xx;
+	struct cvmx_pciercx_cfg068_s cn70xxp1;
+	struct cvmx_pciercx_cfg068_s cn73xx;
+	struct cvmx_pciercx_cfg068_s cn78xx;
+	struct cvmx_pciercx_cfg068_s cn78xxp1;
+	struct cvmx_pciercx_cfg068_s cnf71xx;
+	struct cvmx_pciercx_cfg068_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg068 cvmx_pciercx_cfg068_t;
+
+/**
+ * cvmx_pcierc#_cfg069
+ *
+ * This register contains the seventieth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg069 {
+	u32 u32;
+	struct cvmx_pciercx_cfg069_s {
+		u32 reserved_15_31 : 17;
+		u32 ciem : 1;
+		u32 anfem : 1;
+		u32 rttm : 1;
+		u32 reserved_9_11 : 3;
+		u32 rnrm : 1;
+		u32 bdllpm : 1;
+		u32 btlpm : 1;
+		u32 reserved_1_5 : 5;
+		u32 rem : 1;
+	} s;
+	struct cvmx_pciercx_cfg069_cn52xx {
+		u32 reserved_14_31 : 18;
+		u32 anfem : 1;
+		u32 rttm : 1;
+		u32 reserved_9_11 : 3;
+		u32 rnrm : 1;
+		u32 bdllpm : 1;
+		u32 btlpm : 1;
+		u32 reserved_1_5 : 5;
+		u32 rem : 1;
+	} cn52xx;
+	struct cvmx_pciercx_cfg069_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg069_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg069_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg069_cn52xx cn61xx;
+	struct cvmx_pciercx_cfg069_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg069_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg069_cn52xx cn66xx;
+	struct cvmx_pciercx_cfg069_cn52xx cn68xx;
+	struct cvmx_pciercx_cfg069_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg069_s cn70xx;
+	struct cvmx_pciercx_cfg069_s cn70xxp1;
+	struct cvmx_pciercx_cfg069_s cn73xx;
+	struct cvmx_pciercx_cfg069_s cn78xx;
+	struct cvmx_pciercx_cfg069_s cn78xxp1;
+	struct cvmx_pciercx_cfg069_s cnf71xx;
+	struct cvmx_pciercx_cfg069_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg069 cvmx_pciercx_cfg069_t;
+
+/**
+ * cvmx_pcierc#_cfg070
+ *
+ * This register contains the seventy-first 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg070 {
+	u32 u32;
+	struct cvmx_pciercx_cfg070_s {
+		u32 reserved_12_31 : 20;
+		u32 tplp : 1;
+		u32 reserved_9_10 : 2;
+		u32 ce : 1;
+		u32 cc : 1;
+		u32 ge : 1;
+		u32 gc : 1;
+		u32 fep : 5;
+	} s;
+	struct cvmx_pciercx_cfg070_cn52xx {
+		u32 reserved_9_31 : 23;
+		u32 ce : 1;
+		u32 cc : 1;
+		u32 ge : 1;
+		u32 gc : 1;
+		u32 fep : 5;
+	} cn52xx;
+	struct cvmx_pciercx_cfg070_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg070_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg070_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg070_cn52xx cn61xx;
+	struct cvmx_pciercx_cfg070_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg070_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg070_cn52xx cn66xx;
+	struct cvmx_pciercx_cfg070_cn52xx cn68xx;
+	struct cvmx_pciercx_cfg070_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg070_cn52xx cn70xx;
+	struct cvmx_pciercx_cfg070_cn52xx cn70xxp1;
+	struct cvmx_pciercx_cfg070_s cn73xx;
+	struct cvmx_pciercx_cfg070_s cn78xx;
+	struct cvmx_pciercx_cfg070_s cn78xxp1;
+	struct cvmx_pciercx_cfg070_cn52xx cnf71xx;
+	struct cvmx_pciercx_cfg070_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg070 cvmx_pciercx_cfg070_t;
+
+/**
+ * cvmx_pcierc#_cfg071
+ *
+ * This register contains the seventy-second 32-bits of PCIe type 1 configuration space.  The
+ * header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union cvmx_pciercx_cfg071 {
+	u32 u32;
+	struct cvmx_pciercx_cfg071_s {
+		u32 dword1 : 32;
+	} s;
+	struct cvmx_pciercx_cfg071_s cn52xx;
+	struct cvmx_pciercx_cfg071_s cn52xxp1;
+	struct cvmx_pciercx_cfg071_s cn56xx;
+	struct cvmx_pciercx_cfg071_s cn56xxp1;
+	struct cvmx_pciercx_cfg071_s cn61xx;
+	struct cvmx_pciercx_cfg071_s cn63xx;
+	struct cvmx_pciercx_cfg071_s cn63xxp1;
+	struct cvmx_pciercx_cfg071_s cn66xx;
+	struct cvmx_pciercx_cfg071_s cn68xx;
+	struct cvmx_pciercx_cfg071_s cn68xxp1;
+	struct cvmx_pciercx_cfg071_s cn70xx;
+	struct cvmx_pciercx_cfg071_s cn70xxp1;
+	struct cvmx_pciercx_cfg071_s cn73xx;
+	struct cvmx_pciercx_cfg071_s cn78xx;
+	struct cvmx_pciercx_cfg071_s cn78xxp1;
+	struct cvmx_pciercx_cfg071_s cnf71xx;
+	struct cvmx_pciercx_cfg071_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg071 cvmx_pciercx_cfg071_t;
+
+/**
+ * cvmx_pcierc#_cfg072
+ *
+ * This register contains the seventy-third 32-bits of PCIe type 1 configuration space.  The
+ * header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union cvmx_pciercx_cfg072 {
+	u32 u32;
+	struct cvmx_pciercx_cfg072_s {
+		u32 dword2 : 32;
+	} s;
+	struct cvmx_pciercx_cfg072_s cn52xx;
+	struct cvmx_pciercx_cfg072_s cn52xxp1;
+	struct cvmx_pciercx_cfg072_s cn56xx;
+	struct cvmx_pciercx_cfg072_s cn56xxp1;
+	struct cvmx_pciercx_cfg072_s cn61xx;
+	struct cvmx_pciercx_cfg072_s cn63xx;
+	struct cvmx_pciercx_cfg072_s cn63xxp1;
+	struct cvmx_pciercx_cfg072_s cn66xx;
+	struct cvmx_pciercx_cfg072_s cn68xx;
+	struct cvmx_pciercx_cfg072_s cn68xxp1;
+	struct cvmx_pciercx_cfg072_s cn70xx;
+	struct cvmx_pciercx_cfg072_s cn70xxp1;
+	struct cvmx_pciercx_cfg072_s cn73xx;
+	struct cvmx_pciercx_cfg072_s cn78xx;
+	struct cvmx_pciercx_cfg072_s cn78xxp1;
+	struct cvmx_pciercx_cfg072_s cnf71xx;
+	struct cvmx_pciercx_cfg072_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg072 cvmx_pciercx_cfg072_t;
+
+/**
+ * cvmx_pcierc#_cfg073
+ *
+ * This register contains the seventy-fourth 32-bits of PCIe type 1 configuration space.  The
+ * header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union cvmx_pciercx_cfg073 {
+	u32 u32;
+	struct cvmx_pciercx_cfg073_s {
+		u32 dword3 : 32;
+	} s;
+	struct cvmx_pciercx_cfg073_s cn52xx;
+	struct cvmx_pciercx_cfg073_s cn52xxp1;
+	struct cvmx_pciercx_cfg073_s cn56xx;
+	struct cvmx_pciercx_cfg073_s cn56xxp1;
+	struct cvmx_pciercx_cfg073_s cn61xx;
+	struct cvmx_pciercx_cfg073_s cn63xx;
+	struct cvmx_pciercx_cfg073_s cn63xxp1;
+	struct cvmx_pciercx_cfg073_s cn66xx;
+	struct cvmx_pciercx_cfg073_s cn68xx;
+	struct cvmx_pciercx_cfg073_s cn68xxp1;
+	struct cvmx_pciercx_cfg073_s cn70xx;
+	struct cvmx_pciercx_cfg073_s cn70xxp1;
+	struct cvmx_pciercx_cfg073_s cn73xx;
+	struct cvmx_pciercx_cfg073_s cn78xx;
+	struct cvmx_pciercx_cfg073_s cn78xxp1;
+	struct cvmx_pciercx_cfg073_s cnf71xx;
+	struct cvmx_pciercx_cfg073_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg073 cvmx_pciercx_cfg073_t;
+
+/**
+ * cvmx_pcierc#_cfg074
+ *
+ * This register contains the seventy-fifth 32-bits of PCIe type 1 configuration space.  The
+ * header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union cvmx_pciercx_cfg074 {
+	u32 u32;
+	struct cvmx_pciercx_cfg074_s {
+		u32 dword4 : 32;
+	} s;
+	struct cvmx_pciercx_cfg074_s cn52xx;
+	struct cvmx_pciercx_cfg074_s cn52xxp1;
+	struct cvmx_pciercx_cfg074_s cn56xx;
+	struct cvmx_pciercx_cfg074_s cn56xxp1;
+	struct cvmx_pciercx_cfg074_s cn61xx;
+	struct cvmx_pciercx_cfg074_s cn63xx;
+	struct cvmx_pciercx_cfg074_s cn63xxp1;
+	struct cvmx_pciercx_cfg074_s cn66xx;
+	struct cvmx_pciercx_cfg074_s cn68xx;
+	struct cvmx_pciercx_cfg074_s cn68xxp1;
+	struct cvmx_pciercx_cfg074_s cn70xx;
+	struct cvmx_pciercx_cfg074_s cn70xxp1;
+	struct cvmx_pciercx_cfg074_s cn73xx;
+	struct cvmx_pciercx_cfg074_s cn78xx;
+	struct cvmx_pciercx_cfg074_s cn78xxp1;
+	struct cvmx_pciercx_cfg074_s cnf71xx;
+	struct cvmx_pciercx_cfg074_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg074 cvmx_pciercx_cfg074_t;
+
+/**
+ * cvmx_pcierc#_cfg075
+ *
+ * This register contains the seventy-sixth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg075 {
+	u32 u32;
+	struct cvmx_pciercx_cfg075_s {
+		u32 reserved_3_31 : 29;
+		u32 fere : 1;
+		u32 nfere : 1;
+		u32 cere : 1;
+	} s;
+	struct cvmx_pciercx_cfg075_s cn52xx;
+	struct cvmx_pciercx_cfg075_s cn52xxp1;
+	struct cvmx_pciercx_cfg075_s cn56xx;
+	struct cvmx_pciercx_cfg075_s cn56xxp1;
+	struct cvmx_pciercx_cfg075_s cn61xx;
+	struct cvmx_pciercx_cfg075_s cn63xx;
+	struct cvmx_pciercx_cfg075_s cn63xxp1;
+	struct cvmx_pciercx_cfg075_s cn66xx;
+	struct cvmx_pciercx_cfg075_s cn68xx;
+	struct cvmx_pciercx_cfg075_s cn68xxp1;
+	struct cvmx_pciercx_cfg075_s cn70xx;
+	struct cvmx_pciercx_cfg075_s cn70xxp1;
+	struct cvmx_pciercx_cfg075_s cn73xx;
+	struct cvmx_pciercx_cfg075_s cn78xx;
+	struct cvmx_pciercx_cfg075_s cn78xxp1;
+	struct cvmx_pciercx_cfg075_s cnf71xx;
+	struct cvmx_pciercx_cfg075_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg075 cvmx_pciercx_cfg075_t;
+
+/**
+ * cvmx_pcierc#_cfg076
+ *
+ * This register contains the seventy-seventh 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg076 {
+	u32 u32;
+	struct cvmx_pciercx_cfg076_s {
+		u32 aeimn : 5;
+		u32 reserved_7_26 : 20;
+		u32 femr : 1;
+		u32 nfemr : 1;
+		u32 fuf : 1;
+		u32 multi_efnfr : 1;
+		u32 efnfr : 1;
+		u32 multi_ecr : 1;
+		u32 ecr : 1;
+	} s;
+	struct cvmx_pciercx_cfg076_s cn52xx;
+	struct cvmx_pciercx_cfg076_s cn52xxp1;
+	struct cvmx_pciercx_cfg076_s cn56xx;
+	struct cvmx_pciercx_cfg076_s cn56xxp1;
+	struct cvmx_pciercx_cfg076_s cn61xx;
+	struct cvmx_pciercx_cfg076_s cn63xx;
+	struct cvmx_pciercx_cfg076_s cn63xxp1;
+	struct cvmx_pciercx_cfg076_s cn66xx;
+	struct cvmx_pciercx_cfg076_s cn68xx;
+	struct cvmx_pciercx_cfg076_s cn68xxp1;
+	struct cvmx_pciercx_cfg076_s cn70xx;
+	struct cvmx_pciercx_cfg076_s cn70xxp1;
+	struct cvmx_pciercx_cfg076_s cn73xx;
+	struct cvmx_pciercx_cfg076_s cn78xx;
+	struct cvmx_pciercx_cfg076_s cn78xxp1;
+	struct cvmx_pciercx_cfg076_s cnf71xx;
+	struct cvmx_pciercx_cfg076_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg076 cvmx_pciercx_cfg076_t;
+
+/**
+ * cvmx_pcierc#_cfg077
+ *
+ * This register contains the seventy-eighth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg077 {
+	u32 u32;
+	struct cvmx_pciercx_cfg077_s {
+		u32 efnfsi : 16;
+		u32 ecsi : 16;
+	} s;
+	struct cvmx_pciercx_cfg077_s cn52xx;
+	struct cvmx_pciercx_cfg077_s cn52xxp1;
+	struct cvmx_pciercx_cfg077_s cn56xx;
+	struct cvmx_pciercx_cfg077_s cn56xxp1;
+	struct cvmx_pciercx_cfg077_s cn61xx;
+	struct cvmx_pciercx_cfg077_s cn63xx;
+	struct cvmx_pciercx_cfg077_s cn63xxp1;
+	struct cvmx_pciercx_cfg077_s cn66xx;
+	struct cvmx_pciercx_cfg077_s cn68xx;
+	struct cvmx_pciercx_cfg077_s cn68xxp1;
+	struct cvmx_pciercx_cfg077_s cn70xx;
+	struct cvmx_pciercx_cfg077_s cn70xxp1;
+	struct cvmx_pciercx_cfg077_s cn73xx;
+	struct cvmx_pciercx_cfg077_s cn78xx;
+	struct cvmx_pciercx_cfg077_s cn78xxp1;
+	struct cvmx_pciercx_cfg077_s cnf71xx;
+	struct cvmx_pciercx_cfg077_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg077 cvmx_pciercx_cfg077_t;
+
+/**
+ * cvmx_pcierc#_cfg086
+ *
+ * This register contains the eighty-ninth 32-bits of type 0 PCIe configuration space.
+ *
+ */
+union cvmx_pciercx_cfg086 {
+	u32 u32;
+	struct cvmx_pciercx_cfg086_s {
+		u32 nco : 12;
+		u32 cv : 4;
+		u32 pcieec : 16;
+	} s;
+	struct cvmx_pciercx_cfg086_s cn73xx;
+	struct cvmx_pciercx_cfg086_s cn78xx;
+	struct cvmx_pciercx_cfg086_s cn78xxp1;
+	struct cvmx_pciercx_cfg086_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg086 cvmx_pciercx_cfg086_t;
+
+/**
+ * cvmx_pcierc#_cfg087
+ *
+ * This register contains the eighty-eighth 32-bits of type 0 PCIe configuration space.
+ *
+ */
+union cvmx_pciercx_cfg087 {
+	u32 u32;
+	struct cvmx_pciercx_cfg087_s {
+		u32 reserved_2_31 : 30;
+		u32 ler : 1;
+		u32 pe : 1;
+	} s;
+	struct cvmx_pciercx_cfg087_s cn73xx;
+	struct cvmx_pciercx_cfg087_s cn78xx;
+	struct cvmx_pciercx_cfg087_s cn78xxp1;
+	struct cvmx_pciercx_cfg087_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg087 cvmx_pciercx_cfg087_t;
+
+/**
+ * cvmx_pcierc#_cfg088
+ *
+ * This register contains the eighty-ninth 32-bits of type 0 PCIe configuration space.
+ *
+ */
+union cvmx_pciercx_cfg088 {
+	u32 u32;
+	struct cvmx_pciercx_cfg088_s {
+		u32 reserved_8_31 : 24;
+		u32 les : 8;
+	} s;
+	struct cvmx_pciercx_cfg088_s cn73xx;
+	struct cvmx_pciercx_cfg088_s cn78xx;
+	struct cvmx_pciercx_cfg088_s cn78xxp1;
+	struct cvmx_pciercx_cfg088_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg088 cvmx_pciercx_cfg088_t;
+
+/**
+ * cvmx_pcierc#_cfg089
+ *
+ * This register contains the ninetieth 32-bits of type 0 PCIe configuration space.
+ *
+ */
+union cvmx_pciercx_cfg089 {
+	u32 u32;
+	struct cvmx_pciercx_cfg089_s {
+		u32 reserved_31_31 : 1;
+		u32 l1urph : 3;
+		u32 l1utp : 4;
+		u32 reserved_23_23 : 1;
+		u32 l1drph : 3;
+		u32 l1ddtp : 4;
+		u32 reserved_15_15 : 1;
+		u32 l0urph : 3;
+		u32 l0utp : 4;
+		u32 reserved_7_7 : 1;
+		u32 l0drph : 3;
+		u32 l0dtp : 4;
+	} s;
+	struct cvmx_pciercx_cfg089_s cn73xx;
+	struct cvmx_pciercx_cfg089_s cn78xx;
+	struct cvmx_pciercx_cfg089_s cn78xxp1;
+	struct cvmx_pciercx_cfg089_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg089 cvmx_pciercx_cfg089_t;
+
+/**
+ * cvmx_pcierc#_cfg090
+ *
+ * This register contains the ninety-first 32-bits of type 0 PCIe configuration space.
+ *
+ */
+union cvmx_pciercx_cfg090 {
+	u32 u32;
+	struct cvmx_pciercx_cfg090_s {
+		u32 reserved_31_31 : 1;
+		u32 l3urph : 3;
+		u32 l3utp : 4;
+		u32 reserved_23_23 : 1;
+		u32 l3drph : 3;
+		u32 l3dtp : 4;
+		u32 reserved_15_15 : 1;
+		u32 l2urph : 3;
+		u32 l2utp : 4;
+		u32 reserved_7_7 : 1;
+		u32 l2drph : 3;
+		u32 l2dtp : 4;
+	} s;
+	struct cvmx_pciercx_cfg090_s cn73xx;
+	struct cvmx_pciercx_cfg090_s cn78xx;
+	struct cvmx_pciercx_cfg090_s cn78xxp1;
+	struct cvmx_pciercx_cfg090_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg090 cvmx_pciercx_cfg090_t;
+
+/**
+ * cvmx_pcierc#_cfg091
+ *
+ * This register contains the ninety-second 32-bits of type 0 PCIe configuration space.
+ *
+ */
+union cvmx_pciercx_cfg091 {
+	u32 u32;
+	struct cvmx_pciercx_cfg091_s {
+		u32 reserved_31_31 : 1;
+		u32 l5urph : 3;
+		u32 l5utp : 4;
+		u32 reserved_23_23 : 1;
+		u32 l5drph : 3;
+		u32 l5dtp : 4;
+		u32 reserved_15_15 : 1;
+		u32 l4urph : 3;
+		u32 l4utp : 4;
+		u32 reserved_7_7 : 1;
+		u32 l4drph : 3;
+		u32 l4dtp : 4;
+	} s;
+	struct cvmx_pciercx_cfg091_s cn73xx;
+	struct cvmx_pciercx_cfg091_s cn78xx;
+	struct cvmx_pciercx_cfg091_s cn78xxp1;
+	struct cvmx_pciercx_cfg091_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg091 cvmx_pciercx_cfg091_t;
+
+/**
+ * cvmx_pcierc#_cfg092
+ *
+ * This register contains the ninety-third 32-bits of type 0 PCIe configuration space.
+ *
+ */
+union cvmx_pciercx_cfg092 {
+	u32 u32;
+	struct cvmx_pciercx_cfg092_s {
+		u32 reserved_31_31 : 1;
+		u32 l7urph : 3;
+		u32 l7utp : 4;
+		u32 reserved_23_23 : 1;
+		u32 l7drph : 3;
+		u32 l7dtp : 4;
+		u32 reserved_15_15 : 1;
+		u32 l6urph : 3;
+		u32 l6utp : 4;
+		u32 reserved_7_7 : 1;
+		u32 l6drph : 3;
+		u32 l6dtp : 4;
+	} s;
+	struct cvmx_pciercx_cfg092_s cn73xx;
+	struct cvmx_pciercx_cfg092_s cn78xx;
+	struct cvmx_pciercx_cfg092_s cn78xxp1;
+	struct cvmx_pciercx_cfg092_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg092 cvmx_pciercx_cfg092_t;
+
+/**
+ * cvmx_pcierc#_cfg448
+ *
+ * This register contains the four hundred forty-ninth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg448 {
+	u32 u32;
+	struct cvmx_pciercx_cfg448_s {
+		u32 rtl : 16;
+		u32 rtltl : 16;
+	} s;
+	struct cvmx_pciercx_cfg448_s cn52xx;
+	struct cvmx_pciercx_cfg448_s cn52xxp1;
+	struct cvmx_pciercx_cfg448_s cn56xx;
+	struct cvmx_pciercx_cfg448_s cn56xxp1;
+	struct cvmx_pciercx_cfg448_s cn61xx;
+	struct cvmx_pciercx_cfg448_s cn63xx;
+	struct cvmx_pciercx_cfg448_s cn63xxp1;
+	struct cvmx_pciercx_cfg448_s cn66xx;
+	struct cvmx_pciercx_cfg448_s cn68xx;
+	struct cvmx_pciercx_cfg448_s cn68xxp1;
+	struct cvmx_pciercx_cfg448_s cn70xx;
+	struct cvmx_pciercx_cfg448_s cn70xxp1;
+	struct cvmx_pciercx_cfg448_s cn73xx;
+	struct cvmx_pciercx_cfg448_s cn78xx;
+	struct cvmx_pciercx_cfg448_s cn78xxp1;
+	struct cvmx_pciercx_cfg448_s cnf71xx;
+	struct cvmx_pciercx_cfg448_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg448 cvmx_pciercx_cfg448_t;
+
+/**
+ * cvmx_pcierc#_cfg449
+ *
+ * This register contains the four hundred fiftieth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg449 {
+	u32 u32;
+	struct cvmx_pciercx_cfg449_s {
+		u32 omr : 32;
+	} s;
+	struct cvmx_pciercx_cfg449_s cn52xx;
+	struct cvmx_pciercx_cfg449_s cn52xxp1;
+	struct cvmx_pciercx_cfg449_s cn56xx;
+	struct cvmx_pciercx_cfg449_s cn56xxp1;
+	struct cvmx_pciercx_cfg449_s cn61xx;
+	struct cvmx_pciercx_cfg449_s cn63xx;
+	struct cvmx_pciercx_cfg449_s cn63xxp1;
+	struct cvmx_pciercx_cfg449_s cn66xx;
+	struct cvmx_pciercx_cfg449_s cn68xx;
+	struct cvmx_pciercx_cfg449_s cn68xxp1;
+	struct cvmx_pciercx_cfg449_s cn70xx;
+	struct cvmx_pciercx_cfg449_s cn70xxp1;
+	struct cvmx_pciercx_cfg449_s cn73xx;
+	struct cvmx_pciercx_cfg449_s cn78xx;
+	struct cvmx_pciercx_cfg449_s cn78xxp1;
+	struct cvmx_pciercx_cfg449_s cnf71xx;
+	struct cvmx_pciercx_cfg449_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg449 cvmx_pciercx_cfg449_t;
+
+/**
+ * cvmx_pcierc#_cfg450
+ *
+ * This register contains the four hundred fifty-first 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg450 {
+	u32 u32;
+	struct cvmx_pciercx_cfg450_s {
+		u32 lpec : 8;
+		u32 reserved_22_23 : 2;
+		u32 link_state : 6;
+		u32 force_link : 1;
+		u32 reserved_8_14 : 7;
+		u32 link_num : 8;
+	} s;
+	struct cvmx_pciercx_cfg450_s cn52xx;
+	struct cvmx_pciercx_cfg450_s cn52xxp1;
+	struct cvmx_pciercx_cfg450_s cn56xx;
+	struct cvmx_pciercx_cfg450_s cn56xxp1;
+	struct cvmx_pciercx_cfg450_s cn61xx;
+	struct cvmx_pciercx_cfg450_s cn63xx;
+	struct cvmx_pciercx_cfg450_s cn63xxp1;
+	struct cvmx_pciercx_cfg450_s cn66xx;
+	struct cvmx_pciercx_cfg450_s cn68xx;
+	struct cvmx_pciercx_cfg450_s cn68xxp1;
+	struct cvmx_pciercx_cfg450_cn70xx {
+		u32 lpec : 8;
+		u32 reserved_22_23 : 2;
+		u32 link_state : 6;
+		u32 force_link : 1;
+		u32 reserved_12_14 : 3;
+		u32 link_cmd : 4;
+		u32 link_num : 8;
+	} cn70xx;
+	struct cvmx_pciercx_cfg450_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg450_cn73xx {
+		u32 lpec : 8;
+		u32 reserved_22_23 : 2;
+		u32 link_state : 6;
+		u32 force_link : 1;
+		u32 reserved_12_14 : 3;
+		u32 forced_ltssm : 4;
+		u32 link_num : 8;
+	} cn73xx;
+	struct cvmx_pciercx_cfg450_cn73xx cn78xx;
+	struct cvmx_pciercx_cfg450_cn73xx cn78xxp1;
+	struct cvmx_pciercx_cfg450_s cnf71xx;
+	struct cvmx_pciercx_cfg450_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg450 cvmx_pciercx_cfg450_t;
+
+/**
+ * cvmx_pcierc#_cfg451
+ *
+ * This register contains the four hundred fifty-second 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg451 {
+	u32 u32;
+	struct cvmx_pciercx_cfg451_s {
+		u32 reserved_31_31 : 1;
+		u32 easpml1 : 1;
+		u32 l1el : 3;
+		u32 l0el : 3;
+		u32 n_fts_cc : 8;
+		u32 n_fts : 8;
+		u32 ack_freq : 8;
+	} s;
+	struct cvmx_pciercx_cfg451_cn52xx {
+		u32 reserved_30_31 : 2;
+		u32 l1el : 3;
+		u32 l0el : 3;
+		u32 n_fts_cc : 8;
+		u32 n_fts : 8;
+		u32 ack_freq : 8;
+	} cn52xx;
+	struct cvmx_pciercx_cfg451_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg451_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg451_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg451_s cn61xx;
+	struct cvmx_pciercx_cfg451_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg451_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg451_s cn66xx;
+	struct cvmx_pciercx_cfg451_s cn68xx;
+	struct cvmx_pciercx_cfg451_s cn68xxp1;
+	struct cvmx_pciercx_cfg451_s cn70xx;
+	struct cvmx_pciercx_cfg451_s cn70xxp1;
+	struct cvmx_pciercx_cfg451_s cn73xx;
+	struct cvmx_pciercx_cfg451_s cn78xx;
+	struct cvmx_pciercx_cfg451_s cn78xxp1;
+	struct cvmx_pciercx_cfg451_s cnf71xx;
+	struct cvmx_pciercx_cfg451_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg451 cvmx_pciercx_cfg451_t;
+
+/**
+ * cvmx_pcierc#_cfg452
+ *
+ * This register contains the four hundred fifty-third 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg452 {
+	u32 u32;
+	struct cvmx_pciercx_cfg452_s {
+		u32 reserved_26_31 : 6;
+		u32 eccrc : 1;
+		u32 reserved_22_24 : 3;
+		u32 lme : 6;
+		u32 reserved_12_15 : 4;
+		u32 link_rate : 4;
+		u32 flm : 1;
+		u32 reserved_6_6 : 1;
+		u32 dllle : 1;
+		u32 reserved_4_4 : 1;
+		u32 ra : 1;
+		u32 le : 1;
+		u32 sd : 1;
+		u32 omr : 1;
+	} s;
+	struct cvmx_pciercx_cfg452_cn52xx {
+		u32 reserved_26_31 : 6;
+		u32 eccrc : 1;
+		u32 reserved_22_24 : 3;
+		u32 lme : 6;
+		u32 reserved_8_15 : 8;
+		u32 flm : 1;
+		u32 reserved_6_6 : 1;
+		u32 dllle : 1;
+		u32 reserved_4_4 : 1;
+		u32 ra : 1;
+		u32 le : 1;
+		u32 sd : 1;
+		u32 omr : 1;
+	} cn52xx;
+	struct cvmx_pciercx_cfg452_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg452_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg452_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg452_cn61xx {
+		u32 reserved_22_31 : 10;
+		u32 lme : 6;
+		u32 reserved_8_15 : 8;
+		u32 flm : 1;
+		u32 reserved_6_6 : 1;
+		u32 dllle : 1;
+		u32 reserved_4_4 : 1;
+		u32 ra : 1;
+		u32 le : 1;
+		u32 sd : 1;
+		u32 omr : 1;
+	} cn61xx;
+	struct cvmx_pciercx_cfg452_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg452_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg452_cn61xx cn66xx;
+	struct cvmx_pciercx_cfg452_cn61xx cn68xx;
+	struct cvmx_pciercx_cfg452_cn61xx cn68xxp1;
+	struct cvmx_pciercx_cfg452_cn70xx {
+		u32 reserved_22_31 : 10;
+		u32 lme : 6;
+		u32 reserved_12_15 : 4;
+		u32 link_rate : 4;
+		u32 flm : 1;
+		u32 reserved_6_6 : 1;
+		u32 dllle : 1;
+		u32 reserved_4_4 : 1;
+		u32 ra : 1;
+		u32 le : 1;
+		u32 sd : 1;
+		u32 omr : 1;
+	} cn70xx;
+	struct cvmx_pciercx_cfg452_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg452_cn70xx cn73xx;
+	struct cvmx_pciercx_cfg452_cn70xx cn78xx;
+	struct cvmx_pciercx_cfg452_cn70xx cn78xxp1;
+	struct cvmx_pciercx_cfg452_cn61xx cnf71xx;
+	struct cvmx_pciercx_cfg452_cn70xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg452 cvmx_pciercx_cfg452_t;
+
+/**
+ * cvmx_pcierc#_cfg453
+ *
+ * This register contains the four hundred fifty-fourth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg453 {
+	u32 u32;
+	struct cvmx_pciercx_cfg453_s {
+		u32 dlld : 1;
+		u32 reserved_26_30 : 5;
+		u32 ack_nak : 1;
+		u32 fcd : 1;
+		u32 ilst : 24;
+	} s;
+	struct cvmx_pciercx_cfg453_s cn52xx;
+	struct cvmx_pciercx_cfg453_s cn52xxp1;
+	struct cvmx_pciercx_cfg453_s cn56xx;
+	struct cvmx_pciercx_cfg453_s cn56xxp1;
+	struct cvmx_pciercx_cfg453_s cn61xx;
+	struct cvmx_pciercx_cfg453_s cn63xx;
+	struct cvmx_pciercx_cfg453_s cn63xxp1;
+	struct cvmx_pciercx_cfg453_s cn66xx;
+	struct cvmx_pciercx_cfg453_s cn68xx;
+	struct cvmx_pciercx_cfg453_s cn68xxp1;
+	struct cvmx_pciercx_cfg453_s cn70xx;
+	struct cvmx_pciercx_cfg453_s cn70xxp1;
+	struct cvmx_pciercx_cfg453_s cn73xx;
+	struct cvmx_pciercx_cfg453_s cn78xx;
+	struct cvmx_pciercx_cfg453_s cn78xxp1;
+	struct cvmx_pciercx_cfg453_s cnf71xx;
+	struct cvmx_pciercx_cfg453_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg453 cvmx_pciercx_cfg453_t;
+
+/**
+ * cvmx_pcierc#_cfg454
+ *
+ * This register contains the four hundred fifty-fifth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg454 {
+	u32 u32;
+	struct cvmx_pciercx_cfg454_s {
+		u32 cx_nfunc : 3;
+		u32 tmfcwt : 5;
+		u32 tmanlt : 5;
+		u32 tmrt : 5;
+		u32 reserved_11_13 : 3;
+		u32 nskps : 3;
+		u32 reserved_0_7 : 8;
+	} s;
+	struct cvmx_pciercx_cfg454_cn52xx {
+		u32 reserved_29_31 : 3;
+		u32 tmfcwt : 5;
+		u32 tmanlt : 5;
+		u32 tmrt : 5;
+		u32 reserved_11_13 : 3;
+		u32 nskps : 3;
+		u32 reserved_4_7 : 4;
+		u32 ntss : 4;
+	} cn52xx;
+	struct cvmx_pciercx_cfg454_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg454_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg454_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg454_cn61xx {
+		u32 cx_nfunc : 3;
+		u32 tmfcwt : 5;
+		u32 tmanlt : 5;
+		u32 tmrt : 5;
+		u32 reserved_8_13 : 6;
+		u32 mfuncn : 8;
+	} cn61xx;
+	struct cvmx_pciercx_cfg454_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg454_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg454_cn61xx cn66xx;
+	struct cvmx_pciercx_cfg454_cn61xx cn68xx;
+	struct cvmx_pciercx_cfg454_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg454_cn70xx {
+		u32 reserved_24_31 : 8;
+		u32 tmanlt : 5;
+		u32 tmrt : 5;
+		u32 reserved_8_13 : 6;
+		u32 mfuncn : 8;
+	} cn70xx;
+	struct cvmx_pciercx_cfg454_cn70xx cn70xxp1;
+	struct cvmx_pciercx_cfg454_cn73xx {
+		u32 reserved_29_31 : 3;
+		u32 tmfcwt : 5;
+		u32 tmanlt : 5;
+		u32 tmrt : 5;
+		u32 reserved_8_13 : 6;
+		u32 mfuncn : 8;
+	} cn73xx;
+	struct cvmx_pciercx_cfg454_cn73xx cn78xx;
+	struct cvmx_pciercx_cfg454_cn73xx cn78xxp1;
+	struct cvmx_pciercx_cfg454_cn61xx cnf71xx;
+	struct cvmx_pciercx_cfg454_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg454 cvmx_pciercx_cfg454_t;
+
+/**
+ * cvmx_pcierc#_cfg455
+ *
+ * This register contains the four hundred fifty-sixth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg455 {
+	u32 u32;
+	struct cvmx_pciercx_cfg455_s {
+		u32 m_cfg0_filt : 1;
+		u32 m_io_filt : 1;
+		u32 msg_ctrl : 1;
+		u32 m_cpl_ecrc_filt : 1;
+		u32 m_ecrc_filt : 1;
+		u32 m_cpl_len_err : 1;
+		u32 m_cpl_attr_err : 1;
+		u32 m_cpl_tc_err : 1;
+		u32 m_cpl_fun_err : 1;
+		u32 m_cpl_rid_err : 1;
+		u32 m_cpl_tag_err : 1;
+		u32 m_lk_filt : 1;
+		u32 m_cfg1_filt : 1;
+		u32 m_bar_match : 1;
+		u32 m_pois_filt : 1;
+		u32 m_fun : 1;
+		u32 dfcwt : 1;
+		u32 reserved_11_14 : 4;
+		u32 skpiv : 11;
+	} s;
+	struct cvmx_pciercx_cfg455_s cn52xx;
+	struct cvmx_pciercx_cfg455_s cn52xxp1;
+	struct cvmx_pciercx_cfg455_s cn56xx;
+	struct cvmx_pciercx_cfg455_s cn56xxp1;
+	struct cvmx_pciercx_cfg455_s cn61xx;
+	struct cvmx_pciercx_cfg455_s cn63xx;
+	struct cvmx_pciercx_cfg455_s cn63xxp1;
+	struct cvmx_pciercx_cfg455_s cn66xx;
+	struct cvmx_pciercx_cfg455_s cn68xx;
+	struct cvmx_pciercx_cfg455_s cn68xxp1;
+	struct cvmx_pciercx_cfg455_s cn70xx;
+	struct cvmx_pciercx_cfg455_s cn70xxp1;
+	struct cvmx_pciercx_cfg455_s cn73xx;
+	struct cvmx_pciercx_cfg455_s cn78xx;
+	struct cvmx_pciercx_cfg455_s cn78xxp1;
+	struct cvmx_pciercx_cfg455_s cnf71xx;
+	struct cvmx_pciercx_cfg455_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg455 cvmx_pciercx_cfg455_t;
+
+/**
+ * cvmx_pcierc#_cfg456
+ *
+ * This register contains the four hundred fifty-seventh 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg456 {
+	u32 u32;
+	struct cvmx_pciercx_cfg456_s {
+		u32 reserved_4_31 : 28;
+		u32 m_handle_flush : 1;
+		u32 m_dabort_4ucpl : 1;
+		u32 m_vend1_drp : 1;
+		u32 m_vend0_drp : 1;
+	} s;
+	struct cvmx_pciercx_cfg456_cn52xx {
+		u32 reserved_2_31 : 30;
+		u32 m_vend1_drp : 1;
+		u32 m_vend0_drp : 1;
+	} cn52xx;
+	struct cvmx_pciercx_cfg456_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg456_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg456_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg456_s cn61xx;
+	struct cvmx_pciercx_cfg456_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg456_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg456_s cn66xx;
+	struct cvmx_pciercx_cfg456_s cn68xx;
+	struct cvmx_pciercx_cfg456_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg456_s cn70xx;
+	struct cvmx_pciercx_cfg456_s cn70xxp1;
+	struct cvmx_pciercx_cfg456_s cn73xx;
+	struct cvmx_pciercx_cfg456_s cn78xx;
+	struct cvmx_pciercx_cfg456_s cn78xxp1;
+	struct cvmx_pciercx_cfg456_s cnf71xx;
+	struct cvmx_pciercx_cfg456_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg456 cvmx_pciercx_cfg456_t;
+
+/**
+ * cvmx_pcierc#_cfg458
+ *
+ * This register contains the four hundred fifty-ninth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg458 {
+	u32 u32;
+	struct cvmx_pciercx_cfg458_s {
+		u32 dbg_info_l32 : 32;
+	} s;
+	struct cvmx_pciercx_cfg458_s cn52xx;
+	struct cvmx_pciercx_cfg458_s cn52xxp1;
+	struct cvmx_pciercx_cfg458_s cn56xx;
+	struct cvmx_pciercx_cfg458_s cn56xxp1;
+	struct cvmx_pciercx_cfg458_s cn61xx;
+	struct cvmx_pciercx_cfg458_s cn63xx;
+	struct cvmx_pciercx_cfg458_s cn63xxp1;
+	struct cvmx_pciercx_cfg458_s cn66xx;
+	struct cvmx_pciercx_cfg458_s cn68xx;
+	struct cvmx_pciercx_cfg458_s cn68xxp1;
+	struct cvmx_pciercx_cfg458_s cn70xx;
+	struct cvmx_pciercx_cfg458_s cn70xxp1;
+	struct cvmx_pciercx_cfg458_s cn73xx;
+	struct cvmx_pciercx_cfg458_s cn78xx;
+	struct cvmx_pciercx_cfg458_s cn78xxp1;
+	struct cvmx_pciercx_cfg458_s cnf71xx;
+	struct cvmx_pciercx_cfg458_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg458 cvmx_pciercx_cfg458_t;
+
+/**
+ * cvmx_pcierc#_cfg459
+ *
+ * This register contains the four hundred sixtieth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg459 {
+	u32 u32;
+	struct cvmx_pciercx_cfg459_s {
+		u32 dbg_info_u32 : 32;
+	} s;
+	struct cvmx_pciercx_cfg459_s cn52xx;
+	struct cvmx_pciercx_cfg459_s cn52xxp1;
+	struct cvmx_pciercx_cfg459_s cn56xx;
+	struct cvmx_pciercx_cfg459_s cn56xxp1;
+	struct cvmx_pciercx_cfg459_s cn61xx;
+	struct cvmx_pciercx_cfg459_s cn63xx;
+	struct cvmx_pciercx_cfg459_s cn63xxp1;
+	struct cvmx_pciercx_cfg459_s cn66xx;
+	struct cvmx_pciercx_cfg459_s cn68xx;
+	struct cvmx_pciercx_cfg459_s cn68xxp1;
+	struct cvmx_pciercx_cfg459_s cn70xx;
+	struct cvmx_pciercx_cfg459_s cn70xxp1;
+	struct cvmx_pciercx_cfg459_s cn73xx;
+	struct cvmx_pciercx_cfg459_s cn78xx;
+	struct cvmx_pciercx_cfg459_s cn78xxp1;
+	struct cvmx_pciercx_cfg459_s cnf71xx;
+	struct cvmx_pciercx_cfg459_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg459 cvmx_pciercx_cfg459_t;
+
+/**
+ * cvmx_pcierc#_cfg460
+ *
+ * This register contains the four hundred sixty-first 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg460 {
+	u32 u32;
+	struct cvmx_pciercx_cfg460_s {
+		u32 reserved_20_31 : 12;
+		u32 tphfcc : 8;
+		u32 tpdfcc : 12;
+	} s;
+	struct cvmx_pciercx_cfg460_s cn52xx;
+	struct cvmx_pciercx_cfg460_s cn52xxp1;
+	struct cvmx_pciercx_cfg460_s cn56xx;
+	struct cvmx_pciercx_cfg460_s cn56xxp1;
+	struct cvmx_pciercx_cfg460_s cn61xx;
+	struct cvmx_pciercx_cfg460_s cn63xx;
+	struct cvmx_pciercx_cfg460_s cn63xxp1;
+	struct cvmx_pciercx_cfg460_s cn66xx;
+	struct cvmx_pciercx_cfg460_s cn68xx;
+	struct cvmx_pciercx_cfg460_s cn68xxp1;
+	struct cvmx_pciercx_cfg460_s cn70xx;
+	struct cvmx_pciercx_cfg460_s cn70xxp1;
+	struct cvmx_pciercx_cfg460_s cn73xx;
+	struct cvmx_pciercx_cfg460_s cn78xx;
+	struct cvmx_pciercx_cfg460_s cn78xxp1;
+	struct cvmx_pciercx_cfg460_s cnf71xx;
+	struct cvmx_pciercx_cfg460_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg460 cvmx_pciercx_cfg460_t;
+
+/**
+ * cvmx_pcierc#_cfg461
+ *
+ * This register contains the four hundred sixty-second 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg461 {
+	u32 u32;
+	struct cvmx_pciercx_cfg461_s {
+		u32 reserved_20_31 : 12;
+		u32 tchfcc : 8;
+		u32 tcdfcc : 12;
+	} s;
+	struct cvmx_pciercx_cfg461_s cn52xx;
+	struct cvmx_pciercx_cfg461_s cn52xxp1;
+	struct cvmx_pciercx_cfg461_s cn56xx;
+	struct cvmx_pciercx_cfg461_s cn56xxp1;
+	struct cvmx_pciercx_cfg461_s cn61xx;
+	struct cvmx_pciercx_cfg461_s cn63xx;
+	struct cvmx_pciercx_cfg461_s cn63xxp1;
+	struct cvmx_pciercx_cfg461_s cn66xx;
+	struct cvmx_pciercx_cfg461_s cn68xx;
+	struct cvmx_pciercx_cfg461_s cn68xxp1;
+	struct cvmx_pciercx_cfg461_s cn70xx;
+	struct cvmx_pciercx_cfg461_s cn70xxp1;
+	struct cvmx_pciercx_cfg461_s cn73xx;
+	struct cvmx_pciercx_cfg461_s cn78xx;
+	struct cvmx_pciercx_cfg461_s cn78xxp1;
+	struct cvmx_pciercx_cfg461_s cnf71xx;
+	struct cvmx_pciercx_cfg461_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg461 cvmx_pciercx_cfg461_t;
+
+/**
+ * cvmx_pcierc#_cfg462
+ *
+ * This register contains the four hundred sixty-third 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg462 {
+	u32 u32;
+	struct cvmx_pciercx_cfg462_s {
+		u32 reserved_20_31 : 12;
+		u32 tchfcc : 8;
+		u32 tcdfcc : 12;
+	} s;
+	struct cvmx_pciercx_cfg462_s cn52xx;
+	struct cvmx_pciercx_cfg462_s cn52xxp1;
+	struct cvmx_pciercx_cfg462_s cn56xx;
+	struct cvmx_pciercx_cfg462_s cn56xxp1;
+	struct cvmx_pciercx_cfg462_s cn61xx;
+	struct cvmx_pciercx_cfg462_s cn63xx;
+	struct cvmx_pciercx_cfg462_s cn63xxp1;
+	struct cvmx_pciercx_cfg462_s cn66xx;
+	struct cvmx_pciercx_cfg462_s cn68xx;
+	struct cvmx_pciercx_cfg462_s cn68xxp1;
+	struct cvmx_pciercx_cfg462_s cn70xx;
+	struct cvmx_pciercx_cfg462_s cn70xxp1;
+	struct cvmx_pciercx_cfg462_s cn73xx;
+	struct cvmx_pciercx_cfg462_s cn78xx;
+	struct cvmx_pciercx_cfg462_s cn78xxp1;
+	struct cvmx_pciercx_cfg462_s cnf71xx;
+	struct cvmx_pciercx_cfg462_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg462 cvmx_pciercx_cfg462_t;
+
+/**
+ * cvmx_pcierc#_cfg463
+ *
+ * This register contains the four hundred sixty-fourth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg463 {
+	u32 u32;
+	struct cvmx_pciercx_cfg463_s {
+		u32 fcltoe : 1;
+		u32 reserved_29_30 : 2;
+		u32 fcltov : 13;
+		u32 reserved_3_15 : 13;
+		u32 rqne : 1;
+		u32 trbne : 1;
+		u32 rtlpfccnr : 1;
+	} s;
+	struct cvmx_pciercx_cfg463_cn52xx {
+		u32 reserved_3_31 : 29;
+		u32 rqne : 1;
+		u32 trbne : 1;
+		u32 rtlpfccnr : 1;
+	} cn52xx;
+	struct cvmx_pciercx_cfg463_cn52xx cn52xxp1;
+	struct cvmx_pciercx_cfg463_cn52xx cn56xx;
+	struct cvmx_pciercx_cfg463_cn52xx cn56xxp1;
+	struct cvmx_pciercx_cfg463_cn52xx cn61xx;
+	struct cvmx_pciercx_cfg463_cn52xx cn63xx;
+	struct cvmx_pciercx_cfg463_cn52xx cn63xxp1;
+	struct cvmx_pciercx_cfg463_cn52xx cn66xx;
+	struct cvmx_pciercx_cfg463_cn52xx cn68xx;
+	struct cvmx_pciercx_cfg463_cn52xx cn68xxp1;
+	struct cvmx_pciercx_cfg463_cn52xx cn70xx;
+	struct cvmx_pciercx_cfg463_cn52xx cn70xxp1;
+	struct cvmx_pciercx_cfg463_s cn73xx;
+	struct cvmx_pciercx_cfg463_s cn78xx;
+	struct cvmx_pciercx_cfg463_s cn78xxp1;
+	struct cvmx_pciercx_cfg463_cn52xx cnf71xx;
+	struct cvmx_pciercx_cfg463_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg463 cvmx_pciercx_cfg463_t;
+
+/**
+ * cvmx_pcierc#_cfg464
+ *
+ * This register contains the four hundred sixty-fifth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg464 {
+	u32 u32;
+	struct cvmx_pciercx_cfg464_s {
+		u32 wrr_vc3 : 8;
+		u32 wrr_vc2 : 8;
+		u32 wrr_vc1 : 8;
+		u32 wrr_vc0 : 8;
+	} s;
+	struct cvmx_pciercx_cfg464_s cn52xx;
+	struct cvmx_pciercx_cfg464_s cn52xxp1;
+	struct cvmx_pciercx_cfg464_s cn56xx;
+	struct cvmx_pciercx_cfg464_s cn56xxp1;
+	struct cvmx_pciercx_cfg464_s cn61xx;
+	struct cvmx_pciercx_cfg464_s cn63xx;
+	struct cvmx_pciercx_cfg464_s cn63xxp1;
+	struct cvmx_pciercx_cfg464_s cn66xx;
+	struct cvmx_pciercx_cfg464_s cn68xx;
+	struct cvmx_pciercx_cfg464_s cn68xxp1;
+	struct cvmx_pciercx_cfg464_s cn70xx;
+	struct cvmx_pciercx_cfg464_s cn70xxp1;
+	struct cvmx_pciercx_cfg464_s cn73xx;
+	struct cvmx_pciercx_cfg464_s cn78xx;
+	struct cvmx_pciercx_cfg464_s cn78xxp1;
+	struct cvmx_pciercx_cfg464_s cnf71xx;
+	struct cvmx_pciercx_cfg464_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg464 cvmx_pciercx_cfg464_t;
+
+/**
+ * cvmx_pcierc#_cfg465
+ *
+ * This register contains the four hundred sixty-sixth 32-bits of configuration space.
+ *
+ */
+union cvmx_pciercx_cfg465 {
+	u32 u32;
+	struct cvmx_pciercx_cfg465_s {
+		u32 wrr_vc7 : 8;
+		u32 wrr_vc6 : 8;
+		u32 wrr_vc5 : 8;
+		u32 wrr_vc4 : 8;
+	} s;
+	struct cvmx_pciercx_cfg465_s cn52xx;
+	struct cvmx_pciercx_cfg465_s cn52xxp1;
+	struct cvmx_pciercx_cfg465_s cn56xx;
+	struct cvmx_pciercx_cfg465_s cn56xxp1;
+	struct cvmx_pciercx_cfg465_s cn61xx;
+	struct cvmx_pciercx_cfg465_s cn63xx;
+	struct cvmx_pciercx_cfg465_s cn63xxp1;
+	struct cvmx_pciercx_cfg465_s cn66xx;
+	struct cvmx_pciercx_cfg465_s cn68xx;
+	struct cvmx_pciercx_cfg465_s cn68xxp1;
+	struct cvmx_pciercx_cfg465_s cn70xx;
+	struct cvmx_pciercx_cfg465_s cn70xxp1;
+	struct cvmx_pciercx_cfg465_s cn73xx;
+	struct cvmx_pciercx_cfg465_s cn78xx;
+	struct cvmx_pciercx_cfg465_s cn78xxp1;
+	struct cvmx_pciercx_cfg465_s cnf71xx;
+	struct cvmx_pciercx_cfg465_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg465 cvmx_pciercx_cfg465_t;
+
+/**
+ * cvmx_pcierc#_cfg466
+ *
+ * This register contains the four hundred sixty-seventh 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg466 {
+	u32 u32;
+	struct cvmx_pciercx_cfg466_s {
+		u32 rx_queue_order : 1;
+		u32 type_ordering : 1;
+		u32 reserved_24_29 : 6;
+		u32 queue_mode : 3;
+		u32 reserved_20_20 : 1;
+		u32 header_credits : 8;
+		u32 data_credits : 12;
+	} s;
+	struct cvmx_pciercx_cfg466_s cn52xx;
+	struct cvmx_pciercx_cfg466_s cn52xxp1;
+	struct cvmx_pciercx_cfg466_s cn56xx;
+	struct cvmx_pciercx_cfg466_s cn56xxp1;
+	struct cvmx_pciercx_cfg466_s cn61xx;
+	struct cvmx_pciercx_cfg466_s cn63xx;
+	struct cvmx_pciercx_cfg466_s cn63xxp1;
+	struct cvmx_pciercx_cfg466_s cn66xx;
+	struct cvmx_pciercx_cfg466_s cn68xx;
+	struct cvmx_pciercx_cfg466_s cn68xxp1;
+	struct cvmx_pciercx_cfg466_s cn70xx;
+	struct cvmx_pciercx_cfg466_s cn70xxp1;
+	struct cvmx_pciercx_cfg466_s cn73xx;
+	struct cvmx_pciercx_cfg466_s cn78xx;
+	struct cvmx_pciercx_cfg466_s cn78xxp1;
+	struct cvmx_pciercx_cfg466_s cnf71xx;
+	struct cvmx_pciercx_cfg466_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg466 cvmx_pciercx_cfg466_t;
+
+/**
+ * cvmx_pcierc#_cfg467
+ *
+ * This register contains the four hundred sixty-eighth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg467 {
+	u32 u32;
+	struct cvmx_pciercx_cfg467_s {
+		u32 reserved_24_31 : 8;
+		u32 queue_mode : 3;
+		u32 reserved_20_20 : 1;
+		u32 header_credits : 8;
+		u32 data_credits : 12;
+	} s;
+	struct cvmx_pciercx_cfg467_s cn52xx;
+	struct cvmx_pciercx_cfg467_s cn52xxp1;
+	struct cvmx_pciercx_cfg467_s cn56xx;
+	struct cvmx_pciercx_cfg467_s cn56xxp1;
+	struct cvmx_pciercx_cfg467_s cn61xx;
+	struct cvmx_pciercx_cfg467_s cn63xx;
+	struct cvmx_pciercx_cfg467_s cn63xxp1;
+	struct cvmx_pciercx_cfg467_s cn66xx;
+	struct cvmx_pciercx_cfg467_s cn68xx;
+	struct cvmx_pciercx_cfg467_s cn68xxp1;
+	struct cvmx_pciercx_cfg467_s cn70xx;
+	struct cvmx_pciercx_cfg467_s cn70xxp1;
+	struct cvmx_pciercx_cfg467_s cn73xx;
+	struct cvmx_pciercx_cfg467_s cn78xx;
+	struct cvmx_pciercx_cfg467_s cn78xxp1;
+	struct cvmx_pciercx_cfg467_s cnf71xx;
+	struct cvmx_pciercx_cfg467_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg467 cvmx_pciercx_cfg467_t;
+
+/**
+ * cvmx_pcierc#_cfg468
+ *
+ * This register contains the four hundred sixty-ninth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg468 {
+	u32 u32;
+	struct cvmx_pciercx_cfg468_s {
+		u32 reserved_24_31 : 8;
+		u32 queue_mode : 3;
+		u32 reserved_20_20 : 1;
+		u32 header_credits : 8;
+		u32 data_credits : 12;
+	} s;
+	struct cvmx_pciercx_cfg468_s cn52xx;
+	struct cvmx_pciercx_cfg468_s cn52xxp1;
+	struct cvmx_pciercx_cfg468_s cn56xx;
+	struct cvmx_pciercx_cfg468_s cn56xxp1;
+	struct cvmx_pciercx_cfg468_s cn61xx;
+	struct cvmx_pciercx_cfg468_s cn63xx;
+	struct cvmx_pciercx_cfg468_s cn63xxp1;
+	struct cvmx_pciercx_cfg468_s cn66xx;
+	struct cvmx_pciercx_cfg468_s cn68xx;
+	struct cvmx_pciercx_cfg468_s cn68xxp1;
+	struct cvmx_pciercx_cfg468_s cn70xx;
+	struct cvmx_pciercx_cfg468_s cn70xxp1;
+	struct cvmx_pciercx_cfg468_s cn73xx;
+	struct cvmx_pciercx_cfg468_s cn78xx;
+	struct cvmx_pciercx_cfg468_s cn78xxp1;
+	struct cvmx_pciercx_cfg468_s cnf71xx;
+	struct cvmx_pciercx_cfg468_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg468 cvmx_pciercx_cfg468_t;
+
+/**
+ * cvmx_pcierc#_cfg490
+ *
+ * PCIE_CFG490 = Four hundred ninety-first 32-bits of PCIE type 1 config space
+ * (VC0 Posted Buffer Depth)
+ */
+union cvmx_pciercx_cfg490 {
+	u32 u32;
+	struct cvmx_pciercx_cfg490_s {
+		u32 reserved_26_31 : 6;
+		u32 header_depth : 10;
+		u32 reserved_14_15 : 2;
+		u32 data_depth : 14;
+	} s;
+	struct cvmx_pciercx_cfg490_s cn52xx;
+	struct cvmx_pciercx_cfg490_s cn52xxp1;
+	struct cvmx_pciercx_cfg490_s cn56xx;
+	struct cvmx_pciercx_cfg490_s cn56xxp1;
+	struct cvmx_pciercx_cfg490_s cn61xx;
+	struct cvmx_pciercx_cfg490_s cn63xx;
+	struct cvmx_pciercx_cfg490_s cn63xxp1;
+	struct cvmx_pciercx_cfg490_s cn66xx;
+	struct cvmx_pciercx_cfg490_s cn68xx;
+	struct cvmx_pciercx_cfg490_s cn68xxp1;
+	struct cvmx_pciercx_cfg490_s cn70xx;
+	struct cvmx_pciercx_cfg490_s cn70xxp1;
+	struct cvmx_pciercx_cfg490_s cnf71xx;
+};
+
+typedef union cvmx_pciercx_cfg490 cvmx_pciercx_cfg490_t;
+
+/**
+ * cvmx_pcierc#_cfg491
+ *
+ * PCIE_CFG491 = Four hundred ninety-second 32-bits of PCIE type 1 config space
+ * (VC0 Non-Posted Buffer Depth)
+ */
+union cvmx_pciercx_cfg491 {
+	u32 u32;
+	struct cvmx_pciercx_cfg491_s {
+		u32 reserved_26_31 : 6;
+		u32 header_depth : 10;
+		u32 reserved_14_15 : 2;
+		u32 data_depth : 14;
+	} s;
+	struct cvmx_pciercx_cfg491_s cn52xx;
+	struct cvmx_pciercx_cfg491_s cn52xxp1;
+	struct cvmx_pciercx_cfg491_s cn56xx;
+	struct cvmx_pciercx_cfg491_s cn56xxp1;
+	struct cvmx_pciercx_cfg491_s cn61xx;
+	struct cvmx_pciercx_cfg491_s cn63xx;
+	struct cvmx_pciercx_cfg491_s cn63xxp1;
+	struct cvmx_pciercx_cfg491_s cn66xx;
+	struct cvmx_pciercx_cfg491_s cn68xx;
+	struct cvmx_pciercx_cfg491_s cn68xxp1;
+	struct cvmx_pciercx_cfg491_s cn70xx;
+	struct cvmx_pciercx_cfg491_s cn70xxp1;
+	struct cvmx_pciercx_cfg491_s cnf71xx;
+};
+
+typedef union cvmx_pciercx_cfg491 cvmx_pciercx_cfg491_t;
+
+/**
+ * cvmx_pcierc#_cfg492
+ *
+ * PCIE_CFG492 = Four hundred ninety-third 32-bits of PCIE type 1 config space
+ * (VC0 Completion Buffer Depth)
+ */
+union cvmx_pciercx_cfg492 {
+	u32 u32;
+	struct cvmx_pciercx_cfg492_s {
+		u32 reserved_26_31 : 6;
+		u32 header_depth : 10;
+		u32 reserved_14_15 : 2;
+		u32 data_depth : 14;
+	} s;
+	struct cvmx_pciercx_cfg492_s cn52xx;
+	struct cvmx_pciercx_cfg492_s cn52xxp1;
+	struct cvmx_pciercx_cfg492_s cn56xx;
+	struct cvmx_pciercx_cfg492_s cn56xxp1;
+	struct cvmx_pciercx_cfg492_s cn61xx;
+	struct cvmx_pciercx_cfg492_s cn63xx;
+	struct cvmx_pciercx_cfg492_s cn63xxp1;
+	struct cvmx_pciercx_cfg492_s cn66xx;
+	struct cvmx_pciercx_cfg492_s cn68xx;
+	struct cvmx_pciercx_cfg492_s cn68xxp1;
+	struct cvmx_pciercx_cfg492_s cn70xx;
+	struct cvmx_pciercx_cfg492_s cn70xxp1;
+	struct cvmx_pciercx_cfg492_s cnf71xx;
+};
+
+typedef union cvmx_pciercx_cfg492 cvmx_pciercx_cfg492_t;
+
+/**
+ * cvmx_pcierc#_cfg515
+ *
+ * This register contains the five hundred sixteenth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg515 {
+	u32 u32;
+	struct cvmx_pciercx_cfg515_s {
+		u32 reserved_21_31 : 11;
+		u32 s_d_e : 1;
+		u32 ctcrb : 1;
+		u32 cpyts : 1;
+		u32 dsc : 1;
+		u32 reserved_8_16 : 9;
+		u32 n_fts : 8;
+	} s;
+	struct cvmx_pciercx_cfg515_cn61xx {
+		u32 reserved_21_31 : 11;
+		u32 s_d_e : 1;
+		u32 ctcrb : 1;
+		u32 cpyts : 1;
+		u32 dsc : 1;
+		u32 le : 9;
+		u32 n_fts : 8;
+	} cn61xx;
+	struct cvmx_pciercx_cfg515_cn61xx cn63xx;
+	struct cvmx_pciercx_cfg515_cn61xx cn63xxp1;
+	struct cvmx_pciercx_cfg515_cn61xx cn66xx;
+	struct cvmx_pciercx_cfg515_cn61xx cn68xx;
+	struct cvmx_pciercx_cfg515_cn61xx cn68xxp1;
+	struct cvmx_pciercx_cfg515_cn61xx cn70xx;
+	struct cvmx_pciercx_cfg515_cn61xx cn70xxp1;
+	struct cvmx_pciercx_cfg515_cn61xx cn73xx;
+	struct cvmx_pciercx_cfg515_cn78xx {
+		u32 reserved_21_31 : 11;
+		u32 s_d_e : 1;
+		u32 ctcrb : 1;
+		u32 cpyts : 1;
+		u32 dsc : 1;
+		u32 alaneflip : 1;
+		u32 pdetlane : 3;
+		u32 nlanes : 5;
+		u32 n_fts : 8;
+	} cn78xx;
+	struct cvmx_pciercx_cfg515_cn61xx cn78xxp1;
+	struct cvmx_pciercx_cfg515_cn61xx cnf71xx;
+	struct cvmx_pciercx_cfg515_cn78xx cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg515 cvmx_pciercx_cfg515_t;
+
+/**
+ * cvmx_pcierc#_cfg516
+ *
+ * This register contains the five hundred seventeenth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg516 {
+	u32 u32;
+	struct cvmx_pciercx_cfg516_s {
+		u32 phy_stat : 32;
+	} s;
+	struct cvmx_pciercx_cfg516_s cn52xx;
+	struct cvmx_pciercx_cfg516_s cn52xxp1;
+	struct cvmx_pciercx_cfg516_s cn56xx;
+	struct cvmx_pciercx_cfg516_s cn56xxp1;
+	struct cvmx_pciercx_cfg516_s cn61xx;
+	struct cvmx_pciercx_cfg516_s cn63xx;
+	struct cvmx_pciercx_cfg516_s cn63xxp1;
+	struct cvmx_pciercx_cfg516_s cn66xx;
+	struct cvmx_pciercx_cfg516_s cn68xx;
+	struct cvmx_pciercx_cfg516_s cn68xxp1;
+	struct cvmx_pciercx_cfg516_s cn70xx;
+	struct cvmx_pciercx_cfg516_s cn70xxp1;
+	struct cvmx_pciercx_cfg516_s cn73xx;
+	struct cvmx_pciercx_cfg516_s cn78xx;
+	struct cvmx_pciercx_cfg516_s cn78xxp1;
+	struct cvmx_pciercx_cfg516_s cnf71xx;
+	struct cvmx_pciercx_cfg516_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg516 cvmx_pciercx_cfg516_t;
+
+/**
+ * cvmx_pcierc#_cfg517
+ *
+ * This register contains the five hundred eighteenth 32-bits of PCIe type 1 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg517 {
+	u32 u32;
+	struct cvmx_pciercx_cfg517_s {
+		u32 phy_ctrl : 32;
+	} s;
+	struct cvmx_pciercx_cfg517_s cn52xx;
+	struct cvmx_pciercx_cfg517_s cn52xxp1;
+	struct cvmx_pciercx_cfg517_s cn56xx;
+	struct cvmx_pciercx_cfg517_s cn56xxp1;
+	struct cvmx_pciercx_cfg517_s cn61xx;
+	struct cvmx_pciercx_cfg517_s cn63xx;
+	struct cvmx_pciercx_cfg517_s cn63xxp1;
+	struct cvmx_pciercx_cfg517_s cn66xx;
+	struct cvmx_pciercx_cfg517_s cn68xx;
+	struct cvmx_pciercx_cfg517_s cn68xxp1;
+	struct cvmx_pciercx_cfg517_s cn70xx;
+	struct cvmx_pciercx_cfg517_s cn70xxp1;
+	struct cvmx_pciercx_cfg517_s cn73xx;
+	struct cvmx_pciercx_cfg517_s cn78xx;
+	struct cvmx_pciercx_cfg517_s cn78xxp1;
+	struct cvmx_pciercx_cfg517_s cnf71xx;
+	struct cvmx_pciercx_cfg517_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg517 cvmx_pciercx_cfg517_t;
+
+/**
+ * cvmx_pcierc#_cfg548
+ *
+ * This register contains the five hundred forty-ninth 32-bits of type 0 PCIe configuration space.
+ *
+ */
+union cvmx_pciercx_cfg548 {
+	u32 u32;
+	struct cvmx_pciercx_cfg548_s {
+		u32 reserved_26_31 : 6;
+		u32 rss : 2;
+		u32 eiedd : 1;
+		u32 reserved_19_22 : 4;
+		u32 dcbd : 1;
+		u32 dtdd : 1;
+		u32 ed : 1;
+		u32 reserved_13_15 : 3;
+		u32 rxeq_ph01_en : 1;
+		u32 erd : 1;
+		u32 ecrd : 1;
+		u32 ep2p3d : 1;
+		u32 dsg3 : 1;
+		u32 reserved_1_7 : 7;
+		u32 grizdnc : 1;
+	} s;
+	struct cvmx_pciercx_cfg548_s cn73xx;
+	struct cvmx_pciercx_cfg548_s cn78xx;
+	struct cvmx_pciercx_cfg548_s cn78xxp1;
+	struct cvmx_pciercx_cfg548_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg548 cvmx_pciercx_cfg548_t;
+
+/**
+ * cvmx_pcierc#_cfg554
+ *
+ * This register contains the five hundred fifty-fifth 32-bits of type 0 PCIe configuration space.
+ *
+ */
+union cvmx_pciercx_cfg554 {
+	u32 u32;
+	struct cvmx_pciercx_cfg554_s {
+		u32 reserved_27_31 : 5;
+		u32 scefpm : 1;
+		u32 reserved_25_25 : 1;
+		u32 iif : 1;
+		u32 prv : 16;
+		u32 reserved_6_7 : 2;
+		u32 p23td : 1;
+		u32 bt : 1;
+		u32 fm : 4;
+	} s;
+	struct cvmx_pciercx_cfg554_cn73xx {
+		u32 reserved_25_31 : 7;
+		u32 iif : 1;
+		u32 prv : 16;
+		u32 reserved_6_7 : 2;
+		u32 p23td : 1;
+		u32 bt : 1;
+		u32 fm : 4;
+	} cn73xx;
+	struct cvmx_pciercx_cfg554_s cn78xx;
+	struct cvmx_pciercx_cfg554_s cn78xxp1;
+	struct cvmx_pciercx_cfg554_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg554 cvmx_pciercx_cfg554_t;
+
+/**
+ * cvmx_pcierc#_cfg558
+ *
+ * This register contains the five hundred fifty-ninth 32-bits of type 0 PCIe configuration space.
+ *
+ */
+union cvmx_pciercx_cfg558 {
+	u32 u32;
+	struct cvmx_pciercx_cfg558_s {
+		u32 ple : 1;
+		u32 rxstatus : 31;
+	} s;
+	struct cvmx_pciercx_cfg558_s cn73xx;
+	struct cvmx_pciercx_cfg558_s cn78xx;
+	struct cvmx_pciercx_cfg558_s cn78xxp1;
+	struct cvmx_pciercx_cfg558_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg558 cvmx_pciercx_cfg558_t;
+
+/**
+ * cvmx_pcierc#_cfg559
+ *
+ * This register contains the five hundred sixtieth 32-bits of PCIe type 0 configuration space.
+ *
+ */
+union cvmx_pciercx_cfg559 {
+	u32 u32;
+	struct cvmx_pciercx_cfg559_s {
+		u32 reserved_1_31 : 31;
+		u32 dbi_ro_wr_en : 1;
+	} s;
+	struct cvmx_pciercx_cfg559_s cn73xx;
+	struct cvmx_pciercx_cfg559_s cn78xx;
+	struct cvmx_pciercx_cfg559_s cn78xxp1;
+	struct cvmx_pciercx_cfg559_s cnf75xx;
+};
+
+typedef union cvmx_pciercx_cfg559 cvmx_pciercx_cfg559_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pcsx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-pcsx-defs.h
new file mode 100644
index 0000000..e534b67
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pcsx-defs.h
@@ -0,0 +1,1005 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon pcsx.
+ */
+
+#ifndef __CVMX_PCSX_DEFS_H__
+#define __CVMX_PCSX_DEFS_H__
+
+static inline u64 CVMX_PCSX_ANX_ADV_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001010ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001010ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001010ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001010ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_ANX_EXT_ST_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001028ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001028ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001028ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001028ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_ANX_LP_ABIL_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001018ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001018ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001018ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001018ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_ANX_RESULTS_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001020ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001020ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001020ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001020ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_INTX_EN_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001088ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001088ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001088ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001088ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_INTX_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001080ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001080ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001080ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001080ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_LINKX_TIMER_COUNT_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001040ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001040ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001040ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001040ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_LOG_ANLX_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001090ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001090ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001090ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001090ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+#define CVMX_PCSX_MAC_CRDT_CNTX_REG(offset, block_id)                                              \
+	(0x00011800B00010B0ull + (((offset) & 3) + ((block_id) & 1) * 0x20000ull) * 1024)
+static inline u64 CVMX_PCSX_MISCX_CTL_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001078ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001078ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001078ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001078ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_MRX_CONTROL_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001000ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001000ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001000ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001000ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_MRX_STATUS_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001008ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001008ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001008ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001008ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_RXX_STATES_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001058ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001058ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001058ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001058ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_RXX_SYNC_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001050ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001050ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001050ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001050ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+#define CVMX_PCSX_SERDES_CRDT_CNTX_REG(offset, block_id)                                           \
+	(0x00011800B00010A0ull + (((offset) & 3) + ((block_id) & 1) * 0x20000ull) * 1024)
+static inline u64 CVMX_PCSX_SGMX_AN_ADV_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001068ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001068ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001068ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001068ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_SGMX_LP_ADV_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001070ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001070ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001070ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001070ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_TXX_STATES_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001060ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001060ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001060ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001060ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+static inline u64 CVMX_PCSX_TX_RXX_POLARITY_REG(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001048ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001048ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800B0001048ull + ((offset) + (block_id) * 0x4000ull) * 1024;
+	}
+	return 0x00011800B0001048ull + ((offset) + (block_id) * 0x20000ull) * 1024;
+}
+
+/**
+ * cvmx_pcs#_an#_adv_reg
+ *
+ * Bits [15:9] in the Status Register indicate ability to operate as per those signalling specification,
+ * when misc ctl reg MAC_PHY bit is set to MAC mode. Bits [15:9] will all, always read 1'b0, indicating
+ * that the chip cannot operate in the corresponding modes.
+ *
+ * Bit [4] RM_FLT is a don't care when the selected mode is SGMII.
+ *
+ *
+ *
+ * PCS_AN_ADV_REG = AN Advertisement Register4
+ */
+union cvmx_pcsx_anx_adv_reg {
+	u64 u64;
+	struct cvmx_pcsx_anx_adv_reg_s {
+		u64 reserved_16_63 : 48;
+		u64 np : 1;
+		u64 reserved_14_14 : 1;
+		u64 rem_flt : 2;
+		u64 reserved_9_11 : 3;
+		u64 pause : 2;
+		u64 hfd : 1;
+		u64 fd : 1;
+		u64 reserved_0_4 : 5;
+	} s;
+	struct cvmx_pcsx_anx_adv_reg_s cn52xx;
+	struct cvmx_pcsx_anx_adv_reg_s cn52xxp1;
+	struct cvmx_pcsx_anx_adv_reg_s cn56xx;
+	struct cvmx_pcsx_anx_adv_reg_s cn56xxp1;
+	struct cvmx_pcsx_anx_adv_reg_s cn61xx;
+	struct cvmx_pcsx_anx_adv_reg_s cn63xx;
+	struct cvmx_pcsx_anx_adv_reg_s cn63xxp1;
+	struct cvmx_pcsx_anx_adv_reg_s cn66xx;
+	struct cvmx_pcsx_anx_adv_reg_s cn68xx;
+	struct cvmx_pcsx_anx_adv_reg_s cn68xxp1;
+	struct cvmx_pcsx_anx_adv_reg_s cn70xx;
+	struct cvmx_pcsx_anx_adv_reg_s cn70xxp1;
+	struct cvmx_pcsx_anx_adv_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_anx_adv_reg cvmx_pcsx_anx_adv_reg_t;
+
+/**
+ * cvmx_pcs#_an#_ext_st_reg
+ *
+ * as per IEEE802.3 Clause 22
+ *
+ */
+union cvmx_pcsx_anx_ext_st_reg {
+	u64 u64;
+	struct cvmx_pcsx_anx_ext_st_reg_s {
+		u64 reserved_16_63 : 48;
+		u64 thou_xfd : 1;
+		u64 thou_xhd : 1;
+		u64 thou_tfd : 1;
+		u64 thou_thd : 1;
+		u64 reserved_0_11 : 12;
+	} s;
+	struct cvmx_pcsx_anx_ext_st_reg_s cn52xx;
+	struct cvmx_pcsx_anx_ext_st_reg_s cn52xxp1;
+	struct cvmx_pcsx_anx_ext_st_reg_s cn56xx;
+	struct cvmx_pcsx_anx_ext_st_reg_s cn56xxp1;
+	struct cvmx_pcsx_anx_ext_st_reg_s cn61xx;
+	struct cvmx_pcsx_anx_ext_st_reg_s cn63xx;
+	struct cvmx_pcsx_anx_ext_st_reg_s cn63xxp1;
+	struct cvmx_pcsx_anx_ext_st_reg_s cn66xx;
+	struct cvmx_pcsx_anx_ext_st_reg_s cn68xx;
+	struct cvmx_pcsx_anx_ext_st_reg_s cn68xxp1;
+	struct cvmx_pcsx_anx_ext_st_reg_cn70xx {
+		u64 reserved_16_63 : 48;
+		u64 thou_xfd : 1;
+		u64 thou_xhd : 1;
+		u64 thou_tfd : 1;
+		u64 thou_thd : 1;
+		u64 reserved_11_0 : 12;
+	} cn70xx;
+	struct cvmx_pcsx_anx_ext_st_reg_cn70xx cn70xxp1;
+	struct cvmx_pcsx_anx_ext_st_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_anx_ext_st_reg cvmx_pcsx_anx_ext_st_reg_t;
+
+/**
+ * cvmx_pcs#_an#_lp_abil_reg
+ *
+ * as per IEEE802.3 Clause 37
+ *
+ */
+union cvmx_pcsx_anx_lp_abil_reg {
+	u64 u64;
+	struct cvmx_pcsx_anx_lp_abil_reg_s {
+		u64 reserved_16_63 : 48;
+		u64 np : 1;
+		u64 ack : 1;
+		u64 rem_flt : 2;
+		u64 reserved_9_11 : 3;
+		u64 pause : 2;
+		u64 hfd : 1;
+		u64 fd : 1;
+		u64 reserved_0_4 : 5;
+	} s;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn52xx;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn52xxp1;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn56xx;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn56xxp1;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn61xx;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn63xx;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn63xxp1;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn66xx;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn68xx;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn68xxp1;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn70xx;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cn70xxp1;
+	struct cvmx_pcsx_anx_lp_abil_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_anx_lp_abil_reg cvmx_pcsx_anx_lp_abil_reg_t;
+
+/**
+ * cvmx_pcs#_an#_results_reg
+ *
+ * NOTE:
+ * an_results_reg is don't care when AN_OVRD is set to 1. If AN_OVRD=0 and AN_CPT=1
+ * the an_results_reg is valid.
+ */
+union cvmx_pcsx_anx_results_reg {
+	u64 u64;
+	struct cvmx_pcsx_anx_results_reg_s {
+		u64 reserved_7_63 : 57;
+		u64 pause : 2;
+		u64 spd : 2;
+		u64 an_cpt : 1;
+		u64 dup : 1;
+		u64 link_ok : 1;
+	} s;
+	struct cvmx_pcsx_anx_results_reg_s cn52xx;
+	struct cvmx_pcsx_anx_results_reg_s cn52xxp1;
+	struct cvmx_pcsx_anx_results_reg_s cn56xx;
+	struct cvmx_pcsx_anx_results_reg_s cn56xxp1;
+	struct cvmx_pcsx_anx_results_reg_s cn61xx;
+	struct cvmx_pcsx_anx_results_reg_s cn63xx;
+	struct cvmx_pcsx_anx_results_reg_s cn63xxp1;
+	struct cvmx_pcsx_anx_results_reg_s cn66xx;
+	struct cvmx_pcsx_anx_results_reg_s cn68xx;
+	struct cvmx_pcsx_anx_results_reg_s cn68xxp1;
+	struct cvmx_pcsx_anx_results_reg_s cn70xx;
+	struct cvmx_pcsx_anx_results_reg_s cn70xxp1;
+	struct cvmx_pcsx_anx_results_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_anx_results_reg cvmx_pcsx_anx_results_reg_t;
+
+/**
+ * cvmx_pcs#_int#_en_reg
+ *
+ * PCS Interrupt Enable Register
+ *
+ */
+union cvmx_pcsx_intx_en_reg {
+	u64 u64;
+	struct cvmx_pcsx_intx_en_reg_s {
+		u64 reserved_13_63 : 51;
+		u64 dbg_sync_en : 1;
+		u64 dup : 1;
+		u64 sync_bad_en : 1;
+		u64 an_bad_en : 1;
+		u64 rxlock_en : 1;
+		u64 rxbad_en : 1;
+		u64 rxerr_en : 1;
+		u64 txbad_en : 1;
+		u64 txfifo_en : 1;
+		u64 txfifu_en : 1;
+		u64 an_err_en : 1;
+		u64 xmit_en : 1;
+		u64 lnkspd_en : 1;
+	} s;
+	struct cvmx_pcsx_intx_en_reg_cn52xx {
+		u64 reserved_12_63 : 52;
+		u64 dup : 1;
+		u64 sync_bad_en : 1;
+		u64 an_bad_en : 1;
+		u64 rxlock_en : 1;
+		u64 rxbad_en : 1;
+		u64 rxerr_en : 1;
+		u64 txbad_en : 1;
+		u64 txfifo_en : 1;
+		u64 txfifu_en : 1;
+		u64 an_err_en : 1;
+		u64 xmit_en : 1;
+		u64 lnkspd_en : 1;
+	} cn52xx;
+	struct cvmx_pcsx_intx_en_reg_cn52xx cn52xxp1;
+	struct cvmx_pcsx_intx_en_reg_cn52xx cn56xx;
+	struct cvmx_pcsx_intx_en_reg_cn52xx cn56xxp1;
+	struct cvmx_pcsx_intx_en_reg_s cn61xx;
+	struct cvmx_pcsx_intx_en_reg_s cn63xx;
+	struct cvmx_pcsx_intx_en_reg_s cn63xxp1;
+	struct cvmx_pcsx_intx_en_reg_s cn66xx;
+	struct cvmx_pcsx_intx_en_reg_s cn68xx;
+	struct cvmx_pcsx_intx_en_reg_s cn68xxp1;
+	struct cvmx_pcsx_intx_en_reg_s cn70xx;
+	struct cvmx_pcsx_intx_en_reg_s cn70xxp1;
+	struct cvmx_pcsx_intx_en_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_intx_en_reg cvmx_pcsx_intx_en_reg_t;
+
+/**
+ * cvmx_pcs#_int#_reg
+ *
+ * PCS Interrupt Register
+ * NOTE: RXERR and TXERR conditions to be discussed with Dan before finalising
+ * DBG_SYNC interrupt fires when code group synchronization state machine makes a transition from
+ * SYNC_ACQUIRED_1 state to SYNC_ACQUIRED_2 state(See IEEE 802.3-2005 figure 37-9). It is an
+ * indication that a bad code group
+ * was received after code group synchronizaton was achieved. This interrupt should be disabled
+ * during normal link operation.
+ * Use it as a debug help feature only.
+ */
+union cvmx_pcsx_intx_reg {
+	u64 u64;
+	struct cvmx_pcsx_intx_reg_s {
+		u64 reserved_13_63 : 51;
+		u64 dbg_sync : 1;
+		u64 dup : 1;
+		u64 sync_bad : 1;
+		u64 an_bad : 1;
+		u64 rxlock : 1;
+		u64 rxbad : 1;
+		u64 rxerr : 1;
+		u64 txbad : 1;
+		u64 txfifo : 1;
+		u64 txfifu : 1;
+		u64 an_err : 1;
+		u64 xmit : 1;
+		u64 lnkspd : 1;
+	} s;
+	struct cvmx_pcsx_intx_reg_cn52xx {
+		u64 reserved_12_63 : 52;
+		u64 dup : 1;
+		u64 sync_bad : 1;
+		u64 an_bad : 1;
+		u64 rxlock : 1;
+		u64 rxbad : 1;
+		u64 rxerr : 1;
+		u64 txbad : 1;
+		u64 txfifo : 1;
+		u64 txfifu : 1;
+		u64 an_err : 1;
+		u64 xmit : 1;
+		u64 lnkspd : 1;
+	} cn52xx;
+	struct cvmx_pcsx_intx_reg_cn52xx cn52xxp1;
+	struct cvmx_pcsx_intx_reg_cn52xx cn56xx;
+	struct cvmx_pcsx_intx_reg_cn52xx cn56xxp1;
+	struct cvmx_pcsx_intx_reg_s cn61xx;
+	struct cvmx_pcsx_intx_reg_s cn63xx;
+	struct cvmx_pcsx_intx_reg_s cn63xxp1;
+	struct cvmx_pcsx_intx_reg_s cn66xx;
+	struct cvmx_pcsx_intx_reg_s cn68xx;
+	struct cvmx_pcsx_intx_reg_s cn68xxp1;
+	struct cvmx_pcsx_intx_reg_s cn70xx;
+	struct cvmx_pcsx_intx_reg_s cn70xxp1;
+	struct cvmx_pcsx_intx_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_intx_reg cvmx_pcsx_intx_reg_t;
+
+/**
+ * cvmx_pcs#_link#_timer_count_reg
+ *
+ * PCS_LINK_TIMER_COUNT_REG = 1.6ms nominal link timer register
+ *
+ */
+union cvmx_pcsx_linkx_timer_count_reg {
+	u64 u64;
+	struct cvmx_pcsx_linkx_timer_count_reg_s {
+		u64 reserved_16_63 : 48;
+		u64 count : 16;
+	} s;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn52xx;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn52xxp1;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn56xx;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn56xxp1;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn61xx;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn63xx;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn63xxp1;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn66xx;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn68xx;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn68xxp1;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn70xx;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cn70xxp1;
+	struct cvmx_pcsx_linkx_timer_count_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_linkx_timer_count_reg cvmx_pcsx_linkx_timer_count_reg_t;
+
+/**
+ * cvmx_pcs#_log_anl#_reg
+ *
+ * PCS Logic Analyzer Register
+ * NOTE: Logic Analyzer is enabled with LA_EN for the specified PCS lane only. PKT_SZ is
+ * effective only when LA_EN=1
+ * For normal operation(sgmii or 1000Base-X), this bit must be 0.
+ * See pcsx.csr for xaui logic analyzer mode.
+ * For full description see document at .../rtl/pcs/readme_logic_analyzer.txt
+ */
+union cvmx_pcsx_log_anlx_reg {
+	u64 u64;
+	struct cvmx_pcsx_log_anlx_reg_s {
+		u64 reserved_4_63 : 60;
+		u64 lafifovfl : 1;
+		u64 la_en : 1;
+		u64 pkt_sz : 2;
+	} s;
+	struct cvmx_pcsx_log_anlx_reg_s cn52xx;
+	struct cvmx_pcsx_log_anlx_reg_s cn52xxp1;
+	struct cvmx_pcsx_log_anlx_reg_s cn56xx;
+	struct cvmx_pcsx_log_anlx_reg_s cn56xxp1;
+	struct cvmx_pcsx_log_anlx_reg_s cn61xx;
+	struct cvmx_pcsx_log_anlx_reg_s cn63xx;
+	struct cvmx_pcsx_log_anlx_reg_s cn63xxp1;
+	struct cvmx_pcsx_log_anlx_reg_s cn66xx;
+	struct cvmx_pcsx_log_anlx_reg_s cn68xx;
+	struct cvmx_pcsx_log_anlx_reg_s cn68xxp1;
+	struct cvmx_pcsx_log_anlx_reg_s cn70xx;
+	struct cvmx_pcsx_log_anlx_reg_s cn70xxp1;
+	struct cvmx_pcsx_log_anlx_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_log_anlx_reg cvmx_pcsx_log_anlx_reg_t;
+
+/**
+ * cvmx_pcs#_mac_crdt_cnt#_reg
+ *
+ * PCS MAC Credit Count
+ *
+ */
+union cvmx_pcsx_mac_crdt_cntx_reg {
+	u64 u64;
+	struct cvmx_pcsx_mac_crdt_cntx_reg_s {
+		u64 reserved_5_63 : 59;
+		u64 cnt : 5;
+	} s;
+	struct cvmx_pcsx_mac_crdt_cntx_reg_s cn70xx;
+	struct cvmx_pcsx_mac_crdt_cntx_reg_s cn70xxp1;
+};
+
+typedef union cvmx_pcsx_mac_crdt_cntx_reg cvmx_pcsx_mac_crdt_cntx_reg_t;
+
+/**
+ * cvmx_pcs#_misc#_ctl_reg
+ *
+ * SGMII Misc Control Register
+ * SGMII bit [12] is really a misnomer, it is a decode  of pi_qlm_cfg pins to indicate SGMII or
+ * 1000Base-X modes.
+ * Note: MODE bit
+ * When MODE=1,  1000Base-X mode is selected. Auto negotiation will follow IEEE 802.3 clause 37.
+ * When MODE=0,  SGMII mode is selected and the following note will apply.
+ * Repeat note from SGM_AN_ADV register
+ * NOTE: The SGMII AN Advertisement Register above will be sent during Auto Negotiation if the
+ * MAC_PHY mode bit in misc_ctl_reg
+ * is set (1=PHY mode). If the bit is not set (0=MAC mode), the tx_config_reg[14] becomes ACK bit
+ * and [0] is always 1.
+ * All other bits in tx_config_reg sent will be 0. The PHY dictates the Auto Negotiation results.
+ */
+union cvmx_pcsx_miscx_ctl_reg {
+	u64 u64;
+	struct cvmx_pcsx_miscx_ctl_reg_s {
+		u64 reserved_13_63 : 51;
+		u64 sgmii : 1;
+		u64 gmxeno : 1;
+		u64 loopbck2 : 1;
+		u64 mac_phy : 1;
+		u64 mode : 1;
+		u64 an_ovrd : 1;
+		u64 samp_pt : 7;
+	} s;
+	struct cvmx_pcsx_miscx_ctl_reg_s cn52xx;
+	struct cvmx_pcsx_miscx_ctl_reg_s cn52xxp1;
+	struct cvmx_pcsx_miscx_ctl_reg_s cn56xx;
+	struct cvmx_pcsx_miscx_ctl_reg_s cn56xxp1;
+	struct cvmx_pcsx_miscx_ctl_reg_s cn61xx;
+	struct cvmx_pcsx_miscx_ctl_reg_s cn63xx;
+	struct cvmx_pcsx_miscx_ctl_reg_s cn63xxp1;
+	struct cvmx_pcsx_miscx_ctl_reg_s cn66xx;
+	struct cvmx_pcsx_miscx_ctl_reg_s cn68xx;
+	struct cvmx_pcsx_miscx_ctl_reg_s cn68xxp1;
+	struct cvmx_pcsx_miscx_ctl_reg_cn70xx {
+		u64 reserved_12_63 : 52;
+		u64 gmxeno : 1;
+		u64 loopbck2 : 1;
+		u64 mac_phy : 1;
+		u64 mode : 1;
+		u64 an_ovrd : 1;
+		u64 samp_pt : 7;
+	} cn70xx;
+	struct cvmx_pcsx_miscx_ctl_reg_cn70xx cn70xxp1;
+	struct cvmx_pcsx_miscx_ctl_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_miscx_ctl_reg cvmx_pcsx_miscx_ctl_reg_t;
+
+/**
+ * cvmx_pcs#_mr#_control_reg
+ *
+ * NOTE:
+ * Whenever AN_EN bit[12] is set, Auto negotiation is allowed to happen. The results
+ * of the auto negotiation process set the fields in the AN_RESULTS reg. When AN_EN is not set,
+ * AN_RESULTS reg is don't care. The effective SPD, DUP etc.. get their values
+ * from the pcs_mr_ctrl reg.
+ */
+union cvmx_pcsx_mrx_control_reg {
+	u64 u64;
+	struct cvmx_pcsx_mrx_control_reg_s {
+		u64 reserved_16_63 : 48;
+		u64 reset : 1;
+		u64 loopbck1 : 1;
+		u64 spdlsb : 1;
+		u64 an_en : 1;
+		u64 pwr_dn : 1;
+		u64 reserved_10_10 : 1;
+		u64 rst_an : 1;
+		u64 dup : 1;
+		u64 coltst : 1;
+		u64 spdmsb : 1;
+		u64 uni : 1;
+		u64 reserved_0_4 : 5;
+	} s;
+	struct cvmx_pcsx_mrx_control_reg_s cn52xx;
+	struct cvmx_pcsx_mrx_control_reg_s cn52xxp1;
+	struct cvmx_pcsx_mrx_control_reg_s cn56xx;
+	struct cvmx_pcsx_mrx_control_reg_s cn56xxp1;
+	struct cvmx_pcsx_mrx_control_reg_s cn61xx;
+	struct cvmx_pcsx_mrx_control_reg_s cn63xx;
+	struct cvmx_pcsx_mrx_control_reg_s cn63xxp1;
+	struct cvmx_pcsx_mrx_control_reg_s cn66xx;
+	struct cvmx_pcsx_mrx_control_reg_s cn68xx;
+	struct cvmx_pcsx_mrx_control_reg_s cn68xxp1;
+	struct cvmx_pcsx_mrx_control_reg_s cn70xx;
+	struct cvmx_pcsx_mrx_control_reg_s cn70xxp1;
+	struct cvmx_pcsx_mrx_control_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_mrx_control_reg cvmx_pcsx_mrx_control_reg_t;
+
+/**
+ * cvmx_pcs#_mr#_status_reg
+ *
+ * Bits [15:9] in the Status Register indicate ability to operate as per those signalling
+ * specification,
+ * when misc ctl reg MAC_PHY bit is set to MAC mode. Bits [15:9] will all, always read 1'b0,
+ * indicating
+ * that the chip cannot operate in the corresponding modes.
+ * Bit [4] RM_FLT is a don't care when the selected mode is SGMII.
+ */
+union cvmx_pcsx_mrx_status_reg {
+	u64 u64;
+	struct cvmx_pcsx_mrx_status_reg_s {
+		u64 reserved_16_63 : 48;
+		u64 hun_t4 : 1;
+		u64 hun_xfd : 1;
+		u64 hun_xhd : 1;
+		u64 ten_fd : 1;
+		u64 ten_hd : 1;
+		u64 hun_t2fd : 1;
+		u64 hun_t2hd : 1;
+		u64 ext_st : 1;
+		u64 reserved_7_7 : 1;
+		u64 prb_sup : 1;
+		u64 an_cpt : 1;
+		u64 rm_flt : 1;
+		u64 an_abil : 1;
+		u64 lnk_st : 1;
+		u64 reserved_1_1 : 1;
+		u64 extnd : 1;
+	} s;
+	struct cvmx_pcsx_mrx_status_reg_s cn52xx;
+	struct cvmx_pcsx_mrx_status_reg_s cn52xxp1;
+	struct cvmx_pcsx_mrx_status_reg_s cn56xx;
+	struct cvmx_pcsx_mrx_status_reg_s cn56xxp1;
+	struct cvmx_pcsx_mrx_status_reg_s cn61xx;
+	struct cvmx_pcsx_mrx_status_reg_s cn63xx;
+	struct cvmx_pcsx_mrx_status_reg_s cn63xxp1;
+	struct cvmx_pcsx_mrx_status_reg_s cn66xx;
+	struct cvmx_pcsx_mrx_status_reg_s cn68xx;
+	struct cvmx_pcsx_mrx_status_reg_s cn68xxp1;
+	struct cvmx_pcsx_mrx_status_reg_s cn70xx;
+	struct cvmx_pcsx_mrx_status_reg_s cn70xxp1;
+	struct cvmx_pcsx_mrx_status_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_mrx_status_reg cvmx_pcsx_mrx_status_reg_t;
+
+/**
+ * cvmx_pcs#_rx#_states_reg
+ *
+ * PCS_RX_STATES_REG = RX State Machines states register
+ *
+ */
+union cvmx_pcsx_rxx_states_reg {
+	u64 u64;
+	struct cvmx_pcsx_rxx_states_reg_s {
+		u64 reserved_16_63 : 48;
+		u64 rx_bad : 1;
+		u64 rx_st : 5;
+		u64 sync_bad : 1;
+		u64 sync : 4;
+		u64 an_bad : 1;
+		u64 an_st : 4;
+	} s;
+	struct cvmx_pcsx_rxx_states_reg_s cn52xx;
+	struct cvmx_pcsx_rxx_states_reg_s cn52xxp1;
+	struct cvmx_pcsx_rxx_states_reg_s cn56xx;
+	struct cvmx_pcsx_rxx_states_reg_s cn56xxp1;
+	struct cvmx_pcsx_rxx_states_reg_s cn61xx;
+	struct cvmx_pcsx_rxx_states_reg_s cn63xx;
+	struct cvmx_pcsx_rxx_states_reg_s cn63xxp1;
+	struct cvmx_pcsx_rxx_states_reg_s cn66xx;
+	struct cvmx_pcsx_rxx_states_reg_s cn68xx;
+	struct cvmx_pcsx_rxx_states_reg_s cn68xxp1;
+	struct cvmx_pcsx_rxx_states_reg_s cn70xx;
+	struct cvmx_pcsx_rxx_states_reg_s cn70xxp1;
+	struct cvmx_pcsx_rxx_states_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_rxx_states_reg cvmx_pcsx_rxx_states_reg_t;
+
+/**
+ * cvmx_pcs#_rx#_sync_reg
+ *
+ * Note:
+ * r_tx_rx_polarity_reg bit [2] will show correct polarity needed on the link receive path after code grp synchronization is achieved.
+ *
+ *
+ *  PCS_RX_SYNC_REG = Code Group synchronization reg
+ */
+union cvmx_pcsx_rxx_sync_reg {
+	u64 u64;
+	struct cvmx_pcsx_rxx_sync_reg_s {
+		u64 reserved_2_63 : 62;
+		u64 sync : 1;
+		u64 bit_lock : 1;
+	} s;
+	struct cvmx_pcsx_rxx_sync_reg_s cn52xx;
+	struct cvmx_pcsx_rxx_sync_reg_s cn52xxp1;
+	struct cvmx_pcsx_rxx_sync_reg_s cn56xx;
+	struct cvmx_pcsx_rxx_sync_reg_s cn56xxp1;
+	struct cvmx_pcsx_rxx_sync_reg_s cn61xx;
+	struct cvmx_pcsx_rxx_sync_reg_s cn63xx;
+	struct cvmx_pcsx_rxx_sync_reg_s cn63xxp1;
+	struct cvmx_pcsx_rxx_sync_reg_s cn66xx;
+	struct cvmx_pcsx_rxx_sync_reg_s cn68xx;
+	struct cvmx_pcsx_rxx_sync_reg_s cn68xxp1;
+	struct cvmx_pcsx_rxx_sync_reg_s cn70xx;
+	struct cvmx_pcsx_rxx_sync_reg_s cn70xxp1;
+	struct cvmx_pcsx_rxx_sync_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_rxx_sync_reg cvmx_pcsx_rxx_sync_reg_t;
+
+/**
+ * cvmx_pcs#_serdes_crdt_cnt#_reg
+ *
+ * PCS SERDES Credit Count
+ *
+ */
+union cvmx_pcsx_serdes_crdt_cntx_reg {
+	u64 u64;
+	struct cvmx_pcsx_serdes_crdt_cntx_reg_s {
+		u64 reserved_5_63 : 59;
+		u64 cnt : 5;
+	} s;
+	struct cvmx_pcsx_serdes_crdt_cntx_reg_s cn70xx;
+	struct cvmx_pcsx_serdes_crdt_cntx_reg_s cn70xxp1;
+};
+
+typedef union cvmx_pcsx_serdes_crdt_cntx_reg cvmx_pcsx_serdes_crdt_cntx_reg_t;
+
+/**
+ * cvmx_pcs#_sgm#_an_adv_reg
+ *
+ * SGMII AN Advertisement Register (sent out as tx_config_reg)
+ * NOTE: The SGMII AN Advertisement Register above will be sent during Auto Negotiation if the
+ * MAC_PHY mode bit in misc_ctl_reg
+ * is set (1=PHY mode). If the bit is not set (0=MAC mode), the tx_config_reg[14] becomes ACK bit
+ * and [0] is always 1.
+ * All other bits in tx_config_reg sent will be 0. The PHY dictates the Auto Negotiation results.
+ */
+union cvmx_pcsx_sgmx_an_adv_reg {
+	u64 u64;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s {
+		u64 reserved_16_63 : 48;
+		u64 link : 1;
+		u64 ack : 1;
+		u64 reserved_13_13 : 1;
+		u64 dup : 1;
+		u64 speed : 2;
+		u64 reserved_1_9 : 9;
+		u64 one : 1;
+	} s;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn52xx;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn52xxp1;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn56xx;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn56xxp1;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn61xx;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn63xx;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn63xxp1;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn66xx;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn68xx;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn68xxp1;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn70xx;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cn70xxp1;
+	struct cvmx_pcsx_sgmx_an_adv_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_sgmx_an_adv_reg cvmx_pcsx_sgmx_an_adv_reg_t;
+
+/**
+ * cvmx_pcs#_sgm#_lp_adv_reg
+ *
+ * SGMII LP Advertisement Register (received as rx_config_reg)
+ *
+ */
+union cvmx_pcsx_sgmx_lp_adv_reg {
+	u64 u64;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s {
+		u64 reserved_16_63 : 48;
+		u64 link : 1;
+		u64 reserved_13_14 : 2;
+		u64 dup : 1;
+		u64 speed : 2;
+		u64 reserved_1_9 : 9;
+		u64 one : 1;
+	} s;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn52xx;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn52xxp1;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn56xx;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn56xxp1;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn61xx;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn63xx;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn63xxp1;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn66xx;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn68xx;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn68xxp1;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn70xx;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cn70xxp1;
+	struct cvmx_pcsx_sgmx_lp_adv_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_sgmx_lp_adv_reg cvmx_pcsx_sgmx_lp_adv_reg_t;
+
+/**
+ * cvmx_pcs#_tx#_states_reg
+ *
+ * PCS_TX_STATES_REG = TX State Machines states register
+ *
+ */
+union cvmx_pcsx_txx_states_reg {
+	u64 u64;
+	struct cvmx_pcsx_txx_states_reg_s {
+		u64 reserved_7_63 : 57;
+		u64 xmit : 2;
+		u64 tx_bad : 1;
+		u64 ord_st : 4;
+	} s;
+	struct cvmx_pcsx_txx_states_reg_s cn52xx;
+	struct cvmx_pcsx_txx_states_reg_s cn52xxp1;
+	struct cvmx_pcsx_txx_states_reg_s cn56xx;
+	struct cvmx_pcsx_txx_states_reg_s cn56xxp1;
+	struct cvmx_pcsx_txx_states_reg_s cn61xx;
+	struct cvmx_pcsx_txx_states_reg_s cn63xx;
+	struct cvmx_pcsx_txx_states_reg_s cn63xxp1;
+	struct cvmx_pcsx_txx_states_reg_s cn66xx;
+	struct cvmx_pcsx_txx_states_reg_s cn68xx;
+	struct cvmx_pcsx_txx_states_reg_s cn68xxp1;
+	struct cvmx_pcsx_txx_states_reg_s cn70xx;
+	struct cvmx_pcsx_txx_states_reg_s cn70xxp1;
+	struct cvmx_pcsx_txx_states_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_txx_states_reg cvmx_pcsx_txx_states_reg_t;
+
+/**
+ * cvmx_pcs#_tx_rx#_polarity_reg
+ *
+ * Note:
+ * r_tx_rx_polarity_reg bit [2] will show correct polarity needed on the link receive path after
+ * code grp synchronization is achieved.
+ */
+union cvmx_pcsx_tx_rxx_polarity_reg {
+	u64 u64;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s {
+		u64 reserved_4_63 : 60;
+		u64 rxovrd : 1;
+		u64 autorxpl : 1;
+		u64 rxplrt : 1;
+		u64 txplrt : 1;
+	} s;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn52xx;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn52xxp1;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn56xx;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn56xxp1;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn61xx;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn63xx;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn63xxp1;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn66xx;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn68xx;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn68xxp1;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn70xx;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cn70xxp1;
+	struct cvmx_pcsx_tx_rxx_polarity_reg_s cnf71xx;
+};
+
+typedef union cvmx_pcsx_tx_rxx_polarity_reg cvmx_pcsx_tx_rxx_polarity_reg_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pemx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-pemx-defs.h
new file mode 100644
index 0000000..9ec7a4b
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pemx-defs.h
@@ -0,0 +1,2028 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon pemx.
+ */
+
+#ifndef __CVMX_PEMX_DEFS_H__
+#define __CVMX_PEMX_DEFS_H__
+
+static inline u64 CVMX_PEMX_BAR1_INDEXX(unsigned long offset, unsigned long block_id)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000A8ull + ((offset) + (block_id) * 0x200000ull) * 8;
+	}
+	return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
+}
+
+static inline u64 CVMX_PEMX_BAR2_MASK(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C10000B0ull + (offset) * 0x1000000ull - 16777216 * 1;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000130ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
+}
+
+static inline u64 CVMX_PEMX_BAR_CTL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C10000A8ull + (offset) * 0x1000000ull - 16777216 * 1;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000128ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
+}
+
+static inline u64 CVMX_PEMX_BIST_STATUS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000018ull + (offset) * 0x1000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000018ull + (offset) * 0x1000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000440ull + (offset) * 0x1000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800C0000440ull + (offset) * 0x1000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800C0000440ull + (offset) * 0x1000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C1000440ull + (offset) * 0x1000000ull - 16777216 * 1;
+	}
+	return 0x00011800C0000440ull + (offset) * 0x1000000ull;
+}
+
+static inline u64 CVMX_PEMX_BIST_STATUS2(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000420ull + (offset) * 0x1000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000440ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800C0000420ull + (offset) * 0x1000000ull;
+}
+
+#define CVMX_PEMX_CFG(offset)		(0x00011800C0000410ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_CFG_RD(offset)	(0x00011800C0000030ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_CFG_WR(offset)	(0x00011800C0000028ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_CLK_EN(offset)	(0x00011800C0000400ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_CPL_LUT_VALID(offset) (0x00011800C0000098ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_CTL_STATUS(offset)	(0x00011800C0000000ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_CTL_STATUS2(offset)	(0x00011800C0000008ull + ((offset) & 3) * 0x1000000ull)
+static inline u64 CVMX_PEMX_DBG_INFO(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C10000D0ull + (offset) * 0x1000000ull - 16777216 * 1;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000008ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
+}
+
+#define CVMX_PEMX_DBG_INFO_EN(offset) (0x00011800C00000A0ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_DIAG_STATUS(offset) (0x00011800C0000020ull + ((offset) & 3) * 0x1000000ull)
+static inline u64 CVMX_PEMX_ECC_ENA(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000448ull + (offset) * 0x1000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800C0000448ull + (offset) * 0x1000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800C0000448ull + (offset) * 0x1000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C1000448ull + (offset) * 0x1000000ull - 16777216 * 1;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000C0ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800C0000448ull + (offset) * 0x1000000ull;
+}
+
+static inline u64 CVMX_PEMX_ECC_SYND_CTRL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000450ull + (offset) * 0x1000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800C0000450ull + (offset) * 0x1000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800C0000450ull + (offset) * 0x1000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C1000450ull + (offset) * 0x1000000ull - 16777216 * 1;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000C8ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800C0000450ull + (offset) * 0x1000000ull;
+}
+
+#define CVMX_PEMX_ECO(offset)		     (0x00011800C0000010ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_FLR_GLBLCNT_CTL(offset)    (0x00011800C0000210ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_FLR_PF0_VF_STOPREQ(offset) (0x00011800C0000220ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_FLR_PF_STOPREQ(offset)     (0x00011800C0000218ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_FLR_STOPREQ_CTL(offset)    (0x00011800C0000238ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_FLR_ZOMBIE_CTL(offset)     (0x00011800C0000230ull + ((offset) & 3) * 0x1000000ull)
+static inline u64 CVMX_PEMX_INB_READ_CREDITS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C10000B8ull + (offset) * 0x1000000ull - 16777216 * 1;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000138ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
+}
+
+static inline u64 CVMX_PEMX_INT_ENB(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000410ull + (offset) * 0x1000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000430ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800C0000410ull + (offset) * 0x1000000ull;
+}
+
+static inline u64 CVMX_PEMX_INT_ENB_INT(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000418ull + (offset) * 0x1000000ull;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000438ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800C0000418ull + (offset) * 0x1000000ull;
+}
+
+static inline u64 CVMX_PEMX_INT_SUM(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000428ull + (offset) * 0x1000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000428ull + (offset) * 0x1000000ull;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011800C0000428ull + (offset) * 0x1000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011800C0000428ull + (offset) * 0x1000000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C1000428ull + (offset) * 0x1000000ull - 16777216 * 1;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011800C0000408ull + (offset) * 0x1000000ull;
+	}
+	return 0x00011800C0000428ull + (offset) * 0x1000000ull;
+}
+
+#define CVMX_PEMX_ON(offset)		 (0x00011800C0000420ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_P2N_BAR0_START(offset) (0x00011800C0000080ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_P2N_BAR1_START(offset) (0x00011800C0000088ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_P2N_BAR2_START(offset) (0x00011800C0000090ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_P2P_BARX_END(offset, block_id)                                                   \
+	(0x00011800C0000048ull + (((offset) & 3) + ((block_id) & 3) * 0x100000ull) * 16)
+#define CVMX_PEMX_P2P_BARX_START(offset, block_id)                                                 \
+	(0x00011800C0000040ull + (((offset) & 3) + ((block_id) & 3) * 0x100000ull) * 16)
+#define CVMX_PEMX_QLM(offset)	      (0x00011800C0000418ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_SPI_CTL(offset)     (0x00011800C0000180ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_SPI_DATA(offset)    (0x00011800C0000188ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_STRAP(offset)	      (0x00011800C0000408ull + ((offset) & 3) * 0x1000000ull)
+#define CVMX_PEMX_TLP_CREDITS(offset) (0x00011800C0000038ull + ((offset) & 3) * 0x1000000ull)
+
+/**
+ * cvmx_pem#_bar1_index#
+ *
+ * This register contains the address index and control bits for access to memory ranges of BAR1.
+ * The index is built from supplied address [25:22].
+ */
+union cvmx_pemx_bar1_indexx {
+	u64 u64;
+	struct cvmx_pemx_bar1_indexx_s {
+		u64 reserved_24_63 : 40;
+		u64 addr_idx : 20;
+		u64 ca : 1;
+		u64 end_swp : 2;
+		u64 addr_v : 1;
+	} s;
+	struct cvmx_pemx_bar1_indexx_cn61xx {
+		u64 reserved_20_63 : 44;
+		u64 addr_idx : 16;
+		u64 ca : 1;
+		u64 end_swp : 2;
+		u64 addr_v : 1;
+	} cn61xx;
+	struct cvmx_pemx_bar1_indexx_cn61xx cn63xx;
+	struct cvmx_pemx_bar1_indexx_cn61xx cn63xxp1;
+	struct cvmx_pemx_bar1_indexx_cn61xx cn66xx;
+	struct cvmx_pemx_bar1_indexx_cn61xx cn68xx;
+	struct cvmx_pemx_bar1_indexx_cn61xx cn68xxp1;
+	struct cvmx_pemx_bar1_indexx_s cn70xx;
+	struct cvmx_pemx_bar1_indexx_s cn70xxp1;
+	struct cvmx_pemx_bar1_indexx_s cn73xx;
+	struct cvmx_pemx_bar1_indexx_s cn78xx;
+	struct cvmx_pemx_bar1_indexx_s cn78xxp1;
+	struct cvmx_pemx_bar1_indexx_cn61xx cnf71xx;
+	struct cvmx_pemx_bar1_indexx_s cnf75xx;
+};
+
+typedef union cvmx_pemx_bar1_indexx cvmx_pemx_bar1_indexx_t;
+
+/**
+ * cvmx_pem#_bar2_mask
+ *
+ * This register contains the mask pattern that is ANDed with the address from the PCIe core for
+ * BAR2 hits. This allows the effective size of RC BAR2 to be shrunk. Must not be changed
+ * from its reset value in EP mode.
+ */
+union cvmx_pemx_bar2_mask {
+	u64 u64;
+	struct cvmx_pemx_bar2_mask_s {
+		u64 reserved_45_63 : 19;
+		u64 mask : 42;
+		u64 reserved_0_2 : 3;
+	} s;
+	struct cvmx_pemx_bar2_mask_cn61xx {
+		u64 reserved_38_63 : 26;
+		u64 mask : 35;
+		u64 reserved_0_2 : 3;
+	} cn61xx;
+	struct cvmx_pemx_bar2_mask_cn61xx cn66xx;
+	struct cvmx_pemx_bar2_mask_cn61xx cn68xx;
+	struct cvmx_pemx_bar2_mask_cn61xx cn68xxp1;
+	struct cvmx_pemx_bar2_mask_cn61xx cn70xx;
+	struct cvmx_pemx_bar2_mask_cn61xx cn70xxp1;
+	struct cvmx_pemx_bar2_mask_cn73xx {
+		u64 reserved_42_63 : 22;
+		u64 mask : 39;
+		u64 reserved_0_2 : 3;
+	} cn73xx;
+	struct cvmx_pemx_bar2_mask_s cn78xx;
+	struct cvmx_pemx_bar2_mask_cn73xx cn78xxp1;
+	struct cvmx_pemx_bar2_mask_cn61xx cnf71xx;
+	struct cvmx_pemx_bar2_mask_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_bar2_mask cvmx_pemx_bar2_mask_t;
+
+/**
+ * cvmx_pem#_bar_ctl
+ *
+ * This register contains control for BAR accesses.
+ *
+ */
+union cvmx_pemx_bar_ctl {
+	u64 u64;
+	struct cvmx_pemx_bar_ctl_s {
+		u64 reserved_7_63 : 57;
+		u64 bar1_siz : 3;
+		u64 bar2_enb : 1;
+		u64 bar2_esx : 2;
+		u64 bar2_cax : 1;
+	} s;
+	struct cvmx_pemx_bar_ctl_s cn61xx;
+	struct cvmx_pemx_bar_ctl_s cn63xx;
+	struct cvmx_pemx_bar_ctl_s cn63xxp1;
+	struct cvmx_pemx_bar_ctl_s cn66xx;
+	struct cvmx_pemx_bar_ctl_s cn68xx;
+	struct cvmx_pemx_bar_ctl_s cn68xxp1;
+	struct cvmx_pemx_bar_ctl_s cn70xx;
+	struct cvmx_pemx_bar_ctl_s cn70xxp1;
+	struct cvmx_pemx_bar_ctl_s cn73xx;
+	struct cvmx_pemx_bar_ctl_s cn78xx;
+	struct cvmx_pemx_bar_ctl_s cn78xxp1;
+	struct cvmx_pemx_bar_ctl_s cnf71xx;
+	struct cvmx_pemx_bar_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pemx_bar_ctl cvmx_pemx_bar_ctl_t;
+
+/**
+ * cvmx_pem#_bist_status
+ *
+ * This register contains results from BIST runs of PEM's memories.
+ *
+ */
+union cvmx_pemx_bist_status {
+	u64 u64;
+	struct cvmx_pemx_bist_status_s {
+		u64 reserved_16_63 : 48;
+		u64 retryc : 1;
+		u64 reserved_14_14 : 1;
+		u64 rqhdrb0 : 1;
+		u64 rqhdrb1 : 1;
+		u64 rqdatab0 : 1;
+		u64 rqdatab1 : 1;
+		u64 tlpn_d0 : 1;
+		u64 tlpn_d1 : 1;
+		u64 reserved_0_7 : 8;
+	} s;
+	struct cvmx_pemx_bist_status_cn61xx {
+		u64 reserved_8_63 : 56;
+		u64 retry : 1;
+		u64 rqdata0 : 1;
+		u64 rqdata1 : 1;
+		u64 rqdata2 : 1;
+		u64 rqdata3 : 1;
+		u64 rqhdr1 : 1;
+		u64 rqhdr0 : 1;
+		u64 sot : 1;
+	} cn61xx;
+	struct cvmx_pemx_bist_status_cn61xx cn63xx;
+	struct cvmx_pemx_bist_status_cn61xx cn63xxp1;
+	struct cvmx_pemx_bist_status_cn61xx cn66xx;
+	struct cvmx_pemx_bist_status_cn61xx cn68xx;
+	struct cvmx_pemx_bist_status_cn61xx cn68xxp1;
+	struct cvmx_pemx_bist_status_cn70xx {
+		u64 reserved_6_63 : 58;
+		u64 retry : 1;
+		u64 sot : 1;
+		u64 rqhdr0 : 1;
+		u64 rqhdr1 : 1;
+		u64 rqdata0 : 1;
+		u64 rqdata1 : 1;
+	} cn70xx;
+	struct cvmx_pemx_bist_status_cn70xx cn70xxp1;
+	struct cvmx_pemx_bist_status_cn73xx {
+		u64 reserved_16_63 : 48;
+		u64 retryc : 1;
+		u64 sot : 1;
+		u64 rqhdrb0 : 1;
+		u64 rqhdrb1 : 1;
+		u64 rqdatab0 : 1;
+		u64 rqdatab1 : 1;
+		u64 tlpn_d0 : 1;
+		u64 tlpn_d1 : 1;
+		u64 tlpn_ctl : 1;
+		u64 tlpp_d0 : 1;
+		u64 tlpp_d1 : 1;
+		u64 tlpp_ctl : 1;
+		u64 tlpc_d0 : 1;
+		u64 tlpc_d1 : 1;
+		u64 tlpc_ctl : 1;
+		u64 m2s : 1;
+	} cn73xx;
+	struct cvmx_pemx_bist_status_cn73xx cn78xx;
+	struct cvmx_pemx_bist_status_cn73xx cn78xxp1;
+	struct cvmx_pemx_bist_status_cn61xx cnf71xx;
+	struct cvmx_pemx_bist_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_bist_status cvmx_pemx_bist_status_t;
+
+/**
+ * cvmx_pem#_bist_status2
+ *
+ * "PEM#_BIST_STATUS2 = PEM BIST Status Register
+ * Results from BIST runs of PEM's memories."
+ */
+union cvmx_pemx_bist_status2 {
+	u64 u64;
+	struct cvmx_pemx_bist_status2_s {
+		u64 reserved_13_63 : 51;
+		u64 tlpn_d : 1;
+		u64 tlpn_ctl : 1;
+		u64 tlpp_d : 1;
+		u64 reserved_0_9 : 10;
+	} s;
+	struct cvmx_pemx_bist_status2_cn61xx {
+		u64 reserved_10_63 : 54;
+		u64 e2p_cpl : 1;
+		u64 e2p_n : 1;
+		u64 e2p_p : 1;
+		u64 peai_p2e : 1;
+		u64 pef_tpf1 : 1;
+		u64 pef_tpf0 : 1;
+		u64 pef_tnf : 1;
+		u64 pef_tcf1 : 1;
+		u64 pef_tc0 : 1;
+		u64 ppf : 1;
+	} cn61xx;
+	struct cvmx_pemx_bist_status2_cn61xx cn63xx;
+	struct cvmx_pemx_bist_status2_cn61xx cn63xxp1;
+	struct cvmx_pemx_bist_status2_cn61xx cn66xx;
+	struct cvmx_pemx_bist_status2_cn61xx cn68xx;
+	struct cvmx_pemx_bist_status2_cn61xx cn68xxp1;
+	struct cvmx_pemx_bist_status2_cn70xx {
+		u64 reserved_14_63 : 50;
+		u64 peai_p2e : 1;
+		u64 tlpn_d : 1;
+		u64 tlpn_ctl : 1;
+		u64 tlpp_d : 1;
+		u64 tlpp_ctl : 1;
+		u64 tlpc_d : 1;
+		u64 tlpc_ctl : 1;
+		u64 tlpan_d : 1;
+		u64 tlpan_ctl : 1;
+		u64 tlpap_d : 1;
+		u64 tlpap_ctl : 1;
+		u64 tlpac_d : 1;
+		u64 tlpac_ctl : 1;
+		u64 m2s : 1;
+	} cn70xx;
+	struct cvmx_pemx_bist_status2_cn70xx cn70xxp1;
+	struct cvmx_pemx_bist_status2_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pemx_bist_status2 cvmx_pemx_bist_status2_t;
+
+/**
+ * cvmx_pem#_cfg
+ *
+ * Configuration of the PCIe Application.
+ *
+ */
+union cvmx_pemx_cfg {
+	u64 u64;
+	struct cvmx_pemx_cfg_s {
+		u64 reserved_5_63 : 59;
+		u64 laneswap : 1;
+		u64 reserved_2_3 : 2;
+		u64 md : 2;
+	} s;
+	struct cvmx_pemx_cfg_cn70xx {
+		u64 reserved_5_63 : 59;
+		u64 laneswap : 1;
+		u64 hostmd : 1;
+		u64 md : 3;
+	} cn70xx;
+	struct cvmx_pemx_cfg_cn70xx cn70xxp1;
+	struct cvmx_pemx_cfg_cn73xx {
+		u64 reserved_5_63 : 59;
+		u64 laneswap : 1;
+		u64 lanes8 : 1;
+		u64 hostmd : 1;
+		u64 md : 2;
+	} cn73xx;
+	struct cvmx_pemx_cfg_cn73xx cn78xx;
+	struct cvmx_pemx_cfg_cn73xx cn78xxp1;
+	struct cvmx_pemx_cfg_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_cfg cvmx_pemx_cfg_t;
+
+/**
+ * cvmx_pem#_cfg_rd
+ *
+ * This register allows read access to the configuration in the PCIe core.
+ *
+ */
+union cvmx_pemx_cfg_rd {
+	u64 u64;
+	struct cvmx_pemx_cfg_rd_s {
+		u64 data : 32;
+		u64 addr : 32;
+	} s;
+	struct cvmx_pemx_cfg_rd_s cn61xx;
+	struct cvmx_pemx_cfg_rd_s cn63xx;
+	struct cvmx_pemx_cfg_rd_s cn63xxp1;
+	struct cvmx_pemx_cfg_rd_s cn66xx;
+	struct cvmx_pemx_cfg_rd_s cn68xx;
+	struct cvmx_pemx_cfg_rd_s cn68xxp1;
+	struct cvmx_pemx_cfg_rd_s cn70xx;
+	struct cvmx_pemx_cfg_rd_s cn70xxp1;
+	struct cvmx_pemx_cfg_rd_s cn73xx;
+	struct cvmx_pemx_cfg_rd_s cn78xx;
+	struct cvmx_pemx_cfg_rd_s cn78xxp1;
+	struct cvmx_pemx_cfg_rd_s cnf71xx;
+	struct cvmx_pemx_cfg_rd_s cnf75xx;
+};
+
+typedef union cvmx_pemx_cfg_rd cvmx_pemx_cfg_rd_t;
+
+/**
+ * cvmx_pem#_cfg_wr
+ *
+ * This register allows write access to the configuration in the PCIe core.
+ *
+ */
+union cvmx_pemx_cfg_wr {
+	u64 u64;
+	struct cvmx_pemx_cfg_wr_s {
+		u64 data : 32;
+		u64 addr : 32;
+	} s;
+	struct cvmx_pemx_cfg_wr_s cn61xx;
+	struct cvmx_pemx_cfg_wr_s cn63xx;
+	struct cvmx_pemx_cfg_wr_s cn63xxp1;
+	struct cvmx_pemx_cfg_wr_s cn66xx;
+	struct cvmx_pemx_cfg_wr_s cn68xx;
+	struct cvmx_pemx_cfg_wr_s cn68xxp1;
+	struct cvmx_pemx_cfg_wr_s cn70xx;
+	struct cvmx_pemx_cfg_wr_s cn70xxp1;
+	struct cvmx_pemx_cfg_wr_s cn73xx;
+	struct cvmx_pemx_cfg_wr_s cn78xx;
+	struct cvmx_pemx_cfg_wr_s cn78xxp1;
+	struct cvmx_pemx_cfg_wr_s cnf71xx;
+	struct cvmx_pemx_cfg_wr_s cnf75xx;
+};
+
+typedef union cvmx_pemx_cfg_wr cvmx_pemx_cfg_wr_t;
+
+/**
+ * cvmx_pem#_clk_en
+ *
+ * This register contains the clock enable for ECLK and PCE_CLK.
+ *
+ */
+union cvmx_pemx_clk_en {
+	u64 u64;
+	struct cvmx_pemx_clk_en_s {
+		u64 reserved_2_63 : 62;
+		u64 pceclk_gate : 1;
+		u64 csclk_gate : 1;
+	} s;
+	struct cvmx_pemx_clk_en_s cn70xx;
+	struct cvmx_pemx_clk_en_s cn70xxp1;
+	struct cvmx_pemx_clk_en_s cn73xx;
+	struct cvmx_pemx_clk_en_s cn78xx;
+	struct cvmx_pemx_clk_en_s cn78xxp1;
+	struct cvmx_pemx_clk_en_s cnf75xx;
+};
+
+typedef union cvmx_pemx_clk_en cvmx_pemx_clk_en_t;
+
+/**
+ * cvmx_pem#_cpl_lut_valid
+ *
+ * This register specifies the bit set for an outstanding tag read.
+ *
+ */
+union cvmx_pemx_cpl_lut_valid {
+	u64 u64;
+	struct cvmx_pemx_cpl_lut_valid_s {
+		u64 tag : 64;
+	} s;
+	struct cvmx_pemx_cpl_lut_valid_cn61xx {
+		u64 reserved_32_63 : 32;
+		u64 tag : 32;
+	} cn61xx;
+	struct cvmx_pemx_cpl_lut_valid_cn61xx cn63xx;
+	struct cvmx_pemx_cpl_lut_valid_cn61xx cn63xxp1;
+	struct cvmx_pemx_cpl_lut_valid_cn61xx cn66xx;
+	struct cvmx_pemx_cpl_lut_valid_cn61xx cn68xx;
+	struct cvmx_pemx_cpl_lut_valid_cn61xx cn68xxp1;
+	struct cvmx_pemx_cpl_lut_valid_cn61xx cn70xx;
+	struct cvmx_pemx_cpl_lut_valid_cn61xx cn70xxp1;
+	struct cvmx_pemx_cpl_lut_valid_s cn73xx;
+	struct cvmx_pemx_cpl_lut_valid_s cn78xx;
+	struct cvmx_pemx_cpl_lut_valid_s cn78xxp1;
+	struct cvmx_pemx_cpl_lut_valid_cn61xx cnf71xx;
+	struct cvmx_pemx_cpl_lut_valid_s cnf75xx;
+};
+
+typedef union cvmx_pemx_cpl_lut_valid cvmx_pemx_cpl_lut_valid_t;
+
+/**
+ * cvmx_pem#_ctl_status
+ *
+ * This is a general control and status register of the PEM.
+ *
+ */
+union cvmx_pemx_ctl_status {
+	u64 u64;
+	struct cvmx_pemx_ctl_status_s {
+		u64 reserved_51_63 : 13;
+		u64 inv_dpar : 1;
+		u64 inv_hpar : 1;
+		u64 inv_rpar : 1;
+		u64 auto_sd : 1;
+		u64 dnum : 5;
+		u64 pbus : 8;
+		u64 reserved_32_33 : 2;
+		u64 cfg_rtry : 16;
+		u64 reserved_12_15 : 4;
+		u64 pm_xtoff : 1;
+		u64 pm_xpme : 1;
+		u64 ob_p_cmd : 1;
+		u64 reserved_7_8 : 2;
+		u64 nf_ecrc : 1;
+		u64 dly_one : 1;
+		u64 lnk_enb : 1;
+		u64 ro_ctlp : 1;
+		u64 fast_lm : 1;
+		u64 inv_ecrc : 1;
+		u64 inv_lcrc : 1;
+	} s;
+	struct cvmx_pemx_ctl_status_cn61xx {
+		u64 reserved_48_63 : 16;
+		u64 auto_sd : 1;
+		u64 dnum : 5;
+		u64 pbus : 8;
+		u64 reserved_32_33 : 2;
+		u64 cfg_rtry : 16;
+		u64 reserved_12_15 : 4;
+		u64 pm_xtoff : 1;
+		u64 pm_xpme : 1;
+		u64 ob_p_cmd : 1;
+		u64 reserved_7_8 : 2;
+		u64 nf_ecrc : 1;
+		u64 dly_one : 1;
+		u64 lnk_enb : 1;
+		u64 ro_ctlp : 1;
+		u64 fast_lm : 1;
+		u64 inv_ecrc : 1;
+		u64 inv_lcrc : 1;
+	} cn61xx;
+	struct cvmx_pemx_ctl_status_cn61xx cn63xx;
+	struct cvmx_pemx_ctl_status_cn61xx cn63xxp1;
+	struct cvmx_pemx_ctl_status_cn61xx cn66xx;
+	struct cvmx_pemx_ctl_status_cn61xx cn68xx;
+	struct cvmx_pemx_ctl_status_cn61xx cn68xxp1;
+	struct cvmx_pemx_ctl_status_s cn70xx;
+	struct cvmx_pemx_ctl_status_s cn70xxp1;
+	struct cvmx_pemx_ctl_status_cn73xx {
+		u64 reserved_51_63 : 13;
+		u64 inv_dpar : 1;
+		u64 reserved_48_49 : 2;
+		u64 auto_sd : 1;
+		u64 dnum : 5;
+		u64 pbus : 8;
+		u64 reserved_32_33 : 2;
+		u64 cfg_rtry : 16;
+		u64 reserved_12_15 : 4;
+		u64 pm_xtoff : 1;
+		u64 pm_xpme : 1;
+		u64 ob_p_cmd : 1;
+		u64 reserved_7_8 : 2;
+		u64 nf_ecrc : 1;
+		u64 dly_one : 1;
+		u64 lnk_enb : 1;
+		u64 ro_ctlp : 1;
+		u64 fast_lm : 1;
+		u64 inv_ecrc : 1;
+		u64 inv_lcrc : 1;
+	} cn73xx;
+	struct cvmx_pemx_ctl_status_cn73xx cn78xx;
+	struct cvmx_pemx_ctl_status_cn73xx cn78xxp1;
+	struct cvmx_pemx_ctl_status_cn61xx cnf71xx;
+	struct cvmx_pemx_ctl_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_ctl_status cvmx_pemx_ctl_status_t;
+
+/**
+ * cvmx_pem#_ctl_status2
+ *
+ * This register contains additional general control and status of the PEM.
+ *
+ */
+union cvmx_pemx_ctl_status2 {
+	u64 u64;
+	struct cvmx_pemx_ctl_status2_s {
+		u64 reserved_16_63 : 48;
+		u64 no_fwd_prg : 16;
+	} s;
+	struct cvmx_pemx_ctl_status2_s cn73xx;
+	struct cvmx_pemx_ctl_status2_s cn78xx;
+	struct cvmx_pemx_ctl_status2_s cn78xxp1;
+	struct cvmx_pemx_ctl_status2_s cnf75xx;
+};
+
+typedef union cvmx_pemx_ctl_status2 cvmx_pemx_ctl_status2_t;
+
+/**
+ * cvmx_pem#_dbg_info
+ *
+ * This is a debug information register of the PEM.
+ *
+ */
+union cvmx_pemx_dbg_info {
+	u64 u64;
+	struct cvmx_pemx_dbg_info_s {
+		u64 reserved_62_63 : 2;
+		u64 m2s_c_dbe : 1;
+		u64 m2s_c_sbe : 1;
+		u64 m2s_d_dbe : 1;
+		u64 m2s_d_sbe : 1;
+		u64 qhdr_b1_dbe : 1;
+		u64 qhdr_b1_sbe : 1;
+		u64 qhdr_b0_dbe : 1;
+		u64 qhdr_b0_sbe : 1;
+		u64 rtry_dbe : 1;
+		u64 rtry_sbe : 1;
+		u64 reserved_50_51 : 2;
+		u64 c_d1_dbe : 1;
+		u64 c_d1_sbe : 1;
+		u64 c_d0_dbe : 1;
+		u64 c_d0_sbe : 1;
+		u64 reserved_34_45 : 12;
+		u64 datq_pe : 1;
+		u64 reserved_31_32 : 2;
+		u64 ecrc_e : 1;
+		u64 rawwpp : 1;
+		u64 racpp : 1;
+		u64 ramtlp : 1;
+		u64 rarwdns : 1;
+		u64 caar : 1;
+		u64 racca : 1;
+		u64 racur : 1;
+		u64 rauc : 1;
+		u64 rqo : 1;
+		u64 fcuv : 1;
+		u64 rpe : 1;
+		u64 fcpvwt : 1;
+		u64 dpeoosd : 1;
+		u64 rtwdle : 1;
+		u64 rdwdle : 1;
+		u64 mre : 1;
+		u64 rte : 1;
+		u64 acto : 1;
+		u64 rvdm : 1;
+		u64 rumep : 1;
+		u64 rptamrc : 1;
+		u64 rpmerc : 1;
+		u64 rfemrc : 1;
+		u64 rnfemrc : 1;
+		u64 rcemrc : 1;
+		u64 rpoison : 1;
+		u64 recrce : 1;
+		u64 rtlplle : 1;
+		u64 rtlpmal : 1;
+		u64 spoison : 1;
+	} s;
+	struct cvmx_pemx_dbg_info_cn61xx {
+		u64 reserved_31_63 : 33;
+		u64 ecrc_e : 1;
+		u64 rawwpp : 1;
+		u64 racpp : 1;
+		u64 ramtlp : 1;
+		u64 rarwdns : 1;
+		u64 caar : 1;
+		u64 racca : 1;
+		u64 racur : 1;
+		u64 rauc : 1;
+		u64 rqo : 1;
+		u64 fcuv : 1;
+		u64 rpe : 1;
+		u64 fcpvwt : 1;
+		u64 dpeoosd : 1;
+		u64 rtwdle : 1;
+		u64 rdwdle : 1;
+		u64 mre : 1;
+		u64 rte : 1;
+		u64 acto : 1;
+		u64 rvdm : 1;
+		u64 rumep : 1;
+		u64 rptamrc : 1;
+		u64 rpmerc : 1;
+		u64 rfemrc : 1;
+		u64 rnfemrc : 1;
+		u64 rcemrc : 1;
+		u64 rpoison : 1;
+		u64 recrce : 1;
+		u64 rtlplle : 1;
+		u64 rtlpmal : 1;
+		u64 spoison : 1;
+	} cn61xx;
+	struct cvmx_pemx_dbg_info_cn61xx cn63xx;
+	struct cvmx_pemx_dbg_info_cn61xx cn63xxp1;
+	struct cvmx_pemx_dbg_info_cn61xx cn66xx;
+	struct cvmx_pemx_dbg_info_cn61xx cn68xx;
+	struct cvmx_pemx_dbg_info_cn61xx cn68xxp1;
+	struct cvmx_pemx_dbg_info_cn70xx {
+		u64 reserved_46_63 : 18;
+		u64 c_c_dbe : 1;
+		u64 c_c_sbe : 1;
+		u64 c_d_dbe : 1;
+		u64 c_d_sbe : 1;
+		u64 n_c_dbe : 1;
+		u64 n_c_sbe : 1;
+		u64 n_d_dbe : 1;
+		u64 n_d_sbe : 1;
+		u64 p_c_dbe : 1;
+		u64 p_c_sbe : 1;
+		u64 p_d_dbe : 1;
+		u64 p_d_sbe : 1;
+		u64 datq_pe : 1;
+		u64 hdrq_pe : 1;
+		u64 rtry_pe : 1;
+		u64 ecrc_e : 1;
+		u64 rawwpp : 1;
+		u64 racpp : 1;
+		u64 ramtlp : 1;
+		u64 rarwdns : 1;
+		u64 caar : 1;
+		u64 racca : 1;
+		u64 racur : 1;
+		u64 rauc : 1;
+		u64 rqo : 1;
+		u64 fcuv : 1;
+		u64 rpe : 1;
+		u64 fcpvwt : 1;
+		u64 dpeoosd : 1;
+		u64 rtwdle : 1;
+		u64 rdwdle : 1;
+		u64 mre : 1;
+		u64 rte : 1;
+		u64 acto : 1;
+		u64 rvdm : 1;
+		u64 rumep : 1;
+		u64 rptamrc : 1;
+		u64 rpmerc : 1;
+		u64 rfemrc : 1;
+		u64 rnfemrc : 1;
+		u64 rcemrc : 1;
+		u64 rpoison : 1;
+		u64 recrce : 1;
+		u64 rtlplle : 1;
+		u64 rtlpmal : 1;
+		u64 spoison : 1;
+	} cn70xx;
+	struct cvmx_pemx_dbg_info_cn70xx cn70xxp1;
+	struct cvmx_pemx_dbg_info_cn73xx {
+		u64 reserved_62_63 : 2;
+		u64 m2s_c_dbe : 1;
+		u64 m2s_c_sbe : 1;
+		u64 m2s_d_dbe : 1;
+		u64 m2s_d_sbe : 1;
+		u64 qhdr_b1_dbe : 1;
+		u64 qhdr_b1_sbe : 1;
+		u64 qhdr_b0_dbe : 1;
+		u64 qhdr_b0_sbe : 1;
+		u64 rtry_dbe : 1;
+		u64 rtry_sbe : 1;
+		u64 c_c_dbe : 1;
+		u64 c_c_sbe : 1;
+		u64 c_d1_dbe : 1;
+		u64 c_d1_sbe : 1;
+		u64 c_d0_dbe : 1;
+		u64 c_d0_sbe : 1;
+		u64 n_c_dbe : 1;
+		u64 n_c_sbe : 1;
+		u64 n_d1_dbe : 1;
+		u64 n_d1_sbe : 1;
+		u64 n_d0_dbe : 1;
+		u64 n_d0_sbe : 1;
+		u64 p_c_dbe : 1;
+		u64 p_c_sbe : 1;
+		u64 p_d1_dbe : 1;
+		u64 p_d1_sbe : 1;
+		u64 p_d0_dbe : 1;
+		u64 p_d0_sbe : 1;
+		u64 datq_pe : 1;
+		u64 bmd_e : 1;
+		u64 lofp : 1;
+		u64 ecrc_e : 1;
+		u64 rawwpp : 1;
+		u64 racpp : 1;
+		u64 ramtlp : 1;
+		u64 rarwdns : 1;
+		u64 caar : 1;
+		u64 racca : 1;
+		u64 racur : 1;
+		u64 rauc : 1;
+		u64 rqo : 1;
+		u64 fcuv : 1;
+		u64 rpe : 1;
+		u64 fcpvwt : 1;
+		u64 dpeoosd : 1;
+		u64 rtwdle : 1;
+		u64 rdwdle : 1;
+		u64 mre : 1;
+		u64 rte : 1;
+		u64 acto : 1;
+		u64 rvdm : 1;
+		u64 rumep : 1;
+		u64 rptamrc : 1;
+		u64 rpmerc : 1;
+		u64 rfemrc : 1;
+		u64 rnfemrc : 1;
+		u64 rcemrc : 1;
+		u64 rpoison : 1;
+		u64 recrce : 1;
+		u64 rtlplle : 1;
+		u64 rtlpmal : 1;
+		u64 spoison : 1;
+	} cn73xx;
+	struct cvmx_pemx_dbg_info_cn73xx cn78xx;
+	struct cvmx_pemx_dbg_info_cn78xxp1 {
+		u64 reserved_58_63 : 6;
+		u64 qhdr_b1_dbe : 1;
+		u64 qhdr_b1_sbe : 1;
+		u64 qhdr_b0_dbe : 1;
+		u64 qhdr_b0_sbe : 1;
+		u64 rtry_dbe : 1;
+		u64 rtry_sbe : 1;
+		u64 c_c_dbe : 1;
+		u64 c_c_sbe : 1;
+		u64 c_d1_dbe : 1;
+		u64 c_d1_sbe : 1;
+		u64 c_d0_dbe : 1;
+		u64 c_d0_sbe : 1;
+		u64 n_c_dbe : 1;
+		u64 n_c_sbe : 1;
+		u64 n_d1_dbe : 1;
+		u64 n_d1_sbe : 1;
+		u64 n_d0_dbe : 1;
+		u64 n_d0_sbe : 1;
+		u64 p_c_dbe : 1;
+		u64 p_c_sbe : 1;
+		u64 p_d1_dbe : 1;
+		u64 p_d1_sbe : 1;
+		u64 p_d0_dbe : 1;
+		u64 p_d0_sbe : 1;
+		u64 datq_pe : 1;
+		u64 reserved_32_32 : 1;
+		u64 lofp : 1;
+		u64 ecrc_e : 1;
+		u64 rawwpp : 1;
+		u64 racpp : 1;
+		u64 ramtlp : 1;
+		u64 rarwdns : 1;
+		u64 caar : 1;
+		u64 racca : 1;
+		u64 racur : 1;
+		u64 rauc : 1;
+		u64 rqo : 1;
+		u64 fcuv : 1;
+		u64 rpe : 1;
+		u64 fcpvwt : 1;
+		u64 dpeoosd : 1;
+		u64 rtwdle : 1;
+		u64 rdwdle : 1;
+		u64 mre : 1;
+		u64 rte : 1;
+		u64 acto : 1;
+		u64 rvdm : 1;
+		u64 rumep : 1;
+		u64 rptamrc : 1;
+		u64 rpmerc : 1;
+		u64 rfemrc : 1;
+		u64 rnfemrc : 1;
+		u64 rcemrc : 1;
+		u64 rpoison : 1;
+		u64 recrce : 1;
+		u64 rtlplle : 1;
+		u64 rtlpmal : 1;
+		u64 spoison : 1;
+	} cn78xxp1;
+	struct cvmx_pemx_dbg_info_cn61xx cnf71xx;
+	struct cvmx_pemx_dbg_info_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_dbg_info cvmx_pemx_dbg_info_t;
+
+/**
+ * cvmx_pem#_dbg_info_en
+ *
+ * "PEM#_DBG_INFO_EN = PEM Debug Information Enable
+ * Allows PEM_DBG_INFO to generate interrupts when cooresponding enable bit is set."
+ */
+union cvmx_pemx_dbg_info_en {
+	u64 u64;
+	struct cvmx_pemx_dbg_info_en_s {
+		u64 reserved_46_63 : 18;
+		u64 tpcdbe1 : 1;
+		u64 tpcsbe1 : 1;
+		u64 tpcdbe0 : 1;
+		u64 tpcsbe0 : 1;
+		u64 tnfdbe1 : 1;
+		u64 tnfsbe1 : 1;
+		u64 tnfdbe0 : 1;
+		u64 tnfsbe0 : 1;
+		u64 tpfdbe1 : 1;
+		u64 tpfsbe1 : 1;
+		u64 tpfdbe0 : 1;
+		u64 tpfsbe0 : 1;
+		u64 datq_pe : 1;
+		u64 hdrq_pe : 1;
+		u64 rtry_pe : 1;
+		u64 ecrc_e : 1;
+		u64 rawwpp : 1;
+		u64 racpp : 1;
+		u64 ramtlp : 1;
+		u64 rarwdns : 1;
+		u64 caar : 1;
+		u64 racca : 1;
+		u64 racur : 1;
+		u64 rauc : 1;
+		u64 rqo : 1;
+		u64 fcuv : 1;
+		u64 rpe : 1;
+		u64 fcpvwt : 1;
+		u64 dpeoosd : 1;
+		u64 rtwdle : 1;
+		u64 rdwdle : 1;
+		u64 mre : 1;
+		u64 rte : 1;
+		u64 acto : 1;
+		u64 rvdm : 1;
+		u64 rumep : 1;
+		u64 rptamrc : 1;
+		u64 rpmerc : 1;
+		u64 rfemrc : 1;
+		u64 rnfemrc : 1;
+		u64 rcemrc : 1;
+		u64 rpoison : 1;
+		u64 recrce : 1;
+		u64 rtlplle : 1;
+		u64 rtlpmal : 1;
+		u64 spoison : 1;
+	} s;
+	struct cvmx_pemx_dbg_info_en_cn61xx {
+		u64 reserved_31_63 : 33;
+		u64 ecrc_e : 1;
+		u64 rawwpp : 1;
+		u64 racpp : 1;
+		u64 ramtlp : 1;
+		u64 rarwdns : 1;
+		u64 caar : 1;
+		u64 racca : 1;
+		u64 racur : 1;
+		u64 rauc : 1;
+		u64 rqo : 1;
+		u64 fcuv : 1;
+		u64 rpe : 1;
+		u64 fcpvwt : 1;
+		u64 dpeoosd : 1;
+		u64 rtwdle : 1;
+		u64 rdwdle : 1;
+		u64 mre : 1;
+		u64 rte : 1;
+		u64 acto : 1;
+		u64 rvdm : 1;
+		u64 rumep : 1;
+		u64 rptamrc : 1;
+		u64 rpmerc : 1;
+		u64 rfemrc : 1;
+		u64 rnfemrc : 1;
+		u64 rcemrc : 1;
+		u64 rpoison : 1;
+		u64 recrce : 1;
+		u64 rtlplle : 1;
+		u64 rtlpmal : 1;
+		u64 spoison : 1;
+	} cn61xx;
+	struct cvmx_pemx_dbg_info_en_cn61xx cn63xx;
+	struct cvmx_pemx_dbg_info_en_cn61xx cn63xxp1;
+	struct cvmx_pemx_dbg_info_en_cn61xx cn66xx;
+	struct cvmx_pemx_dbg_info_en_cn61xx cn68xx;
+	struct cvmx_pemx_dbg_info_en_cn61xx cn68xxp1;
+	struct cvmx_pemx_dbg_info_en_s cn70xx;
+	struct cvmx_pemx_dbg_info_en_s cn70xxp1;
+	struct cvmx_pemx_dbg_info_en_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pemx_dbg_info_en cvmx_pemx_dbg_info_en_t;
+
+/**
+ * cvmx_pem#_diag_status
+ *
+ * This register contains selection control for the core diagnostic bus.
+ *
+ */
+union cvmx_pemx_diag_status {
+	u64 u64;
+	struct cvmx_pemx_diag_status_s {
+		u64 reserved_9_63 : 55;
+		u64 pwrdwn : 3;
+		u64 pm_dst : 3;
+		u64 pm_stat : 1;
+		u64 pm_en : 1;
+		u64 aux_en : 1;
+	} s;
+	struct cvmx_pemx_diag_status_cn61xx {
+		u64 reserved_4_63 : 60;
+		u64 pm_dst : 1;
+		u64 pm_stat : 1;
+		u64 pm_en : 1;
+		u64 aux_en : 1;
+	} cn61xx;
+	struct cvmx_pemx_diag_status_cn61xx cn63xx;
+	struct cvmx_pemx_diag_status_cn61xx cn63xxp1;
+	struct cvmx_pemx_diag_status_cn61xx cn66xx;
+	struct cvmx_pemx_diag_status_cn61xx cn68xx;
+	struct cvmx_pemx_diag_status_cn61xx cn68xxp1;
+	struct cvmx_pemx_diag_status_cn70xx {
+		u64 reserved_63_6 : 58;
+		u64 pm_dst : 3;
+		u64 pm_stat : 1;
+		u64 pm_en : 1;
+		u64 aux_en : 1;
+	} cn70xx;
+	struct cvmx_pemx_diag_status_cn70xx cn70xxp1;
+	struct cvmx_pemx_diag_status_cn73xx {
+		u64 reserved_63_9 : 55;
+		u64 pwrdwn : 3;
+		u64 pm_dst : 3;
+		u64 pm_stat : 1;
+		u64 pm_en : 1;
+		u64 aux_en : 1;
+	} cn73xx;
+	struct cvmx_pemx_diag_status_cn73xx cn78xx;
+	struct cvmx_pemx_diag_status_cn73xx cn78xxp1;
+	struct cvmx_pemx_diag_status_cn61xx cnf71xx;
+	struct cvmx_pemx_diag_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_diag_status cvmx_pemx_diag_status_t;
+
+/**
+ * cvmx_pem#_ecc_ena
+ *
+ * Contains enables for TLP FIFO ECC RAMs.
+ *
+ */
+union cvmx_pemx_ecc_ena {
+	u64 u64;
+	struct cvmx_pemx_ecc_ena_s {
+		u64 reserved_35_63 : 29;
+		u64 qhdr_b1_ena : 1;
+		u64 qhdr_b0_ena : 1;
+		u64 rtry_ena : 1;
+		u64 reserved_11_31 : 21;
+		u64 m2s_c_ena : 1;
+		u64 m2s_d_ena : 1;
+		u64 c_c_ena : 1;
+		u64 c_d1_ena : 1;
+		u64 c_d0_ena : 1;
+		u64 reserved_0_5 : 6;
+	} s;
+	struct cvmx_pemx_ecc_ena_cn70xx {
+		u64 reserved_6_63 : 58;
+		u64 tlp_nc_ena : 1;
+		u64 tlp_nd_ena : 1;
+		u64 tlp_pc_ena : 1;
+		u64 tlp_pd_ena : 1;
+		u64 tlp_cc_ena : 1;
+		u64 tlp_cd_ena : 1;
+	} cn70xx;
+	struct cvmx_pemx_ecc_ena_cn70xx cn70xxp1;
+	struct cvmx_pemx_ecc_ena_cn73xx {
+		u64 reserved_35_63 : 29;
+		u64 qhdr_b1_ena : 1;
+		u64 qhdr_b0_ena : 1;
+		u64 rtry_ena : 1;
+		u64 reserved_11_31 : 21;
+		u64 m2s_c_ena : 1;
+		u64 m2s_d_ena : 1;
+		u64 c_c_ena : 1;
+		u64 c_d1_ena : 1;
+		u64 c_d0_ena : 1;
+		u64 n_c_ena : 1;
+		u64 n_d1_ena : 1;
+		u64 n_d0_ena : 1;
+		u64 p_c_ena : 1;
+		u64 p_d1_ena : 1;
+		u64 p_d0_ena : 1;
+	} cn73xx;
+	struct cvmx_pemx_ecc_ena_cn73xx cn78xx;
+	struct cvmx_pemx_ecc_ena_cn78xxp1 {
+		u64 reserved_35_63 : 29;
+		u64 qhdr_b1_ena : 1;
+		u64 qhdr_b0_ena : 1;
+		u64 rtry_ena : 1;
+		u64 reserved_9_31 : 23;
+		u64 c_c_ena : 1;
+		u64 c_d1_ena : 1;
+		u64 c_d0_ena : 1;
+		u64 n_c_ena : 1;
+		u64 n_d1_ena : 1;
+		u64 n_d0_ena : 1;
+		u64 p_c_ena : 1;
+		u64 p_d1_ena : 1;
+		u64 p_d0_ena : 1;
+	} cn78xxp1;
+	struct cvmx_pemx_ecc_ena_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_ecc_ena cvmx_pemx_ecc_ena_t;
+
+/**
+ * cvmx_pem#_ecc_synd_ctrl
+ *
+ * This register contains syndrome control for TLP FIFO ECC RAMs.
+ *
+ */
+union cvmx_pemx_ecc_synd_ctrl {
+	u64 u64;
+	struct cvmx_pemx_ecc_synd_ctrl_s {
+		u64 reserved_38_63 : 26;
+		u64 qhdr_b1_syn : 2;
+		u64 qhdr_b0_syn : 2;
+		u64 rtry_syn : 2;
+		u64 reserved_22_31 : 10;
+		u64 m2s_c_syn : 2;
+		u64 m2s_d_syn : 2;
+		u64 c_c_syn : 2;
+		u64 c_d1_syn : 2;
+		u64 c_d0_syn : 2;
+		u64 reserved_0_11 : 12;
+	} s;
+	struct cvmx_pemx_ecc_synd_ctrl_cn70xx {
+		u64 reserved_12_63 : 52;
+		u64 tlp_nc_syn : 2;
+		u64 tlp_nd_syn : 2;
+		u64 tlp_pc_syn : 2;
+		u64 tlp_pd_syn : 2;
+		u64 tlp_cc_syn : 2;
+		u64 tlp_cd_syn : 2;
+	} cn70xx;
+	struct cvmx_pemx_ecc_synd_ctrl_cn70xx cn70xxp1;
+	struct cvmx_pemx_ecc_synd_ctrl_cn73xx {
+		u64 reserved_38_63 : 26;
+		u64 qhdr_b1_syn : 2;
+		u64 qhdr_b0_syn : 2;
+		u64 rtry_syn : 2;
+		u64 reserved_22_31 : 10;
+		u64 m2s_c_syn : 2;
+		u64 m2s_d_syn : 2;
+		u64 c_c_syn : 2;
+		u64 c_d1_syn : 2;
+		u64 c_d0_syn : 2;
+		u64 n_c_syn : 2;
+		u64 n_d1_syn : 2;
+		u64 n_d0_syn : 2;
+		u64 p_c_syn : 2;
+		u64 p_d1_syn : 2;
+		u64 p_d0_syn : 2;
+	} cn73xx;
+	struct cvmx_pemx_ecc_synd_ctrl_cn73xx cn78xx;
+	struct cvmx_pemx_ecc_synd_ctrl_cn78xxp1 {
+		u64 reserved_38_63 : 26;
+		u64 qhdr_b1_syn : 2;
+		u64 qhdr_b0_syn : 2;
+		u64 rtry_syn : 2;
+		u64 reserved_18_31 : 14;
+		u64 c_c_syn : 2;
+		u64 c_d1_syn : 2;
+		u64 c_d0_syn : 2;
+		u64 n_c_syn : 2;
+		u64 n_d1_syn : 2;
+		u64 n_d0_syn : 2;
+		u64 p_c_syn : 2;
+		u64 p_d1_syn : 2;
+		u64 p_d0_syn : 2;
+	} cn78xxp1;
+	struct cvmx_pemx_ecc_synd_ctrl_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_ecc_synd_ctrl cvmx_pemx_ecc_synd_ctrl_t;
+
+/**
+ * cvmx_pem#_eco
+ */
+union cvmx_pemx_eco {
+	u64 u64;
+	struct cvmx_pemx_eco_s {
+		u64 reserved_8_63 : 56;
+		u64 eco_rw : 8;
+	} s;
+	struct cvmx_pemx_eco_s cn73xx;
+	struct cvmx_pemx_eco_s cn78xx;
+	struct cvmx_pemx_eco_s cnf75xx;
+};
+
+typedef union cvmx_pemx_eco cvmx_pemx_eco_t;
+
+/**
+ * cvmx_pem#_flr_glblcnt_ctl
+ */
+union cvmx_pemx_flr_glblcnt_ctl {
+	u64 u64;
+	struct cvmx_pemx_flr_glblcnt_ctl_s {
+		u64 reserved_4_63 : 60;
+		u64 chge : 1;
+		u64 inc : 1;
+		u64 delta : 2;
+	} s;
+	struct cvmx_pemx_flr_glblcnt_ctl_s cn73xx;
+	struct cvmx_pemx_flr_glblcnt_ctl_s cn78xx;
+	struct cvmx_pemx_flr_glblcnt_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pemx_flr_glblcnt_ctl cvmx_pemx_flr_glblcnt_ctl_t;
+
+/**
+ * cvmx_pem#_flr_pf0_vf_stopreq
+ *
+ * Hardware automatically sets the STOPREQ bit for the VF when it enters a
+ * Function Level Reset (FLR).  Software is responsible for clearing the STOPREQ
+ * bit but must not do so prior to hardware taking down the FLR, which could be
+ * as long as 100ms.  It may be appropriate for software to wait longer before clearing
+ * STOPREQ, software may need to drain deep DPI queues for example.
+ * Whenever PEM receives a request mastered by CNXXXX over S2M (i.e. P or NP),
+ * when STOPREQ is set for the function, PEM will discard the outgoing request
+ * before sending it to the PCIe core.  If a NP, PEM will schedule an immediate
+ * SWI_RSP_ERROR completion for the request - no timeout is required.
+ *
+ * STOPREQ mimics the behavior of PCIEEPVF()_CFG001[ME] for outbound requests that will
+ * master the PCIe bus (P and NP).
+ *
+ * Note that STOPREQ will have no effect on completions returned by CNXXXX over the S2M,
+ * nor on M2S traffic.
+ */
+union cvmx_pemx_flr_pf0_vf_stopreq {
+	u64 u64;
+	struct cvmx_pemx_flr_pf0_vf_stopreq_s {
+		u64 vf_stopreq : 64;
+	} s;
+	struct cvmx_pemx_flr_pf0_vf_stopreq_s cn73xx;
+	struct cvmx_pemx_flr_pf0_vf_stopreq_s cn78xx;
+	struct cvmx_pemx_flr_pf0_vf_stopreq_s cnf75xx;
+};
+
+typedef union cvmx_pemx_flr_pf0_vf_stopreq cvmx_pemx_flr_pf0_vf_stopreq_t;
+
+/**
+ * cvmx_pem#_flr_pf_stopreq
+ *
+ * Hardware automatically sets the STOPREQ bit for the PF when it enters a
+ * Function Level Reset (FLR).  Software is responsible for clearing the STOPREQ
+ * bit but must not do so prior to hardware taking down the FLR, which could be
+ * as long as 100ms.  It may be appropriate for software to wait longer before clearing
+ * STOPREQ, software may need to drain deep DPI queues for example.
+ * Whenever PEM receives a PF or child VF request mastered by CNXXXX over S2M (i.e. P or NP),
+ * when STOPREQ is set for the function, PEM will discard the outgoing request
+ * before sending it to the PCIe core.  If a NP, PEM will schedule an immediate
+ * SWI_RSP_ERROR completion for the request - no timeout is required.
+ *
+ * STOPREQ mimics the behavior of PCIEEP()_CFG001[ME] for outbound requests that will
+ * master the PCIe bus (P and NP).
+ *
+ * STOPREQ will have no effect on completions returned by CNXXXX over the S2M,
+ * nor on M2S traffic.
+ *
+ * When a PF()_STOPREQ is set, none of the associated
+ * PEM()_FLR_PF()_VF_STOPREQ[VF_STOPREQ] will be set.
+ *
+ * STOPREQ is reset when the MAC is reset, and is not reset after a chip soft reset.
+ */
+union cvmx_pemx_flr_pf_stopreq {
+	u64 u64;
+	struct cvmx_pemx_flr_pf_stopreq_s {
+		u64 reserved_1_63 : 63;
+		u64 pf0_stopreq : 1;
+	} s;
+	struct cvmx_pemx_flr_pf_stopreq_s cn73xx;
+	struct cvmx_pemx_flr_pf_stopreq_s cn78xx;
+	struct cvmx_pemx_flr_pf_stopreq_s cnf75xx;
+};
+
+typedef union cvmx_pemx_flr_pf_stopreq cvmx_pemx_flr_pf_stopreq_t;
+
+/**
+ * cvmx_pem#_flr_stopreq_ctl
+ */
+union cvmx_pemx_flr_stopreq_ctl {
+	u64 u64;
+	struct cvmx_pemx_flr_stopreq_ctl_s {
+		u64 reserved_1_63 : 63;
+		u64 stopreqclr : 1;
+	} s;
+	struct cvmx_pemx_flr_stopreq_ctl_s cn78xx;
+	struct cvmx_pemx_flr_stopreq_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pemx_flr_stopreq_ctl cvmx_pemx_flr_stopreq_ctl_t;
+
+/**
+ * cvmx_pem#_flr_zombie_ctl
+ */
+union cvmx_pemx_flr_zombie_ctl {
+	u64 u64;
+	struct cvmx_pemx_flr_zombie_ctl_s {
+		u64 reserved_10_63 : 54;
+		u64 exp : 10;
+	} s;
+	struct cvmx_pemx_flr_zombie_ctl_s cn73xx;
+	struct cvmx_pemx_flr_zombie_ctl_s cn78xx;
+	struct cvmx_pemx_flr_zombie_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pemx_flr_zombie_ctl cvmx_pemx_flr_zombie_ctl_t;
+
+/**
+ * cvmx_pem#_inb_read_credits
+ *
+ * This register contains the number of in-flight read operations from PCIe core to SLI.
+ *
+ */
+union cvmx_pemx_inb_read_credits {
+	u64 u64;
+	struct cvmx_pemx_inb_read_credits_s {
+		u64 reserved_7_63 : 57;
+		u64 num : 7;
+	} s;
+	struct cvmx_pemx_inb_read_credits_cn61xx {
+		u64 reserved_6_63 : 58;
+		u64 num : 6;
+	} cn61xx;
+	struct cvmx_pemx_inb_read_credits_cn61xx cn66xx;
+	struct cvmx_pemx_inb_read_credits_cn61xx cn68xx;
+	struct cvmx_pemx_inb_read_credits_cn61xx cn70xx;
+	struct cvmx_pemx_inb_read_credits_cn61xx cn70xxp1;
+	struct cvmx_pemx_inb_read_credits_s cn73xx;
+	struct cvmx_pemx_inb_read_credits_s cn78xx;
+	struct cvmx_pemx_inb_read_credits_s cn78xxp1;
+	struct cvmx_pemx_inb_read_credits_cn61xx cnf71xx;
+	struct cvmx_pemx_inb_read_credits_s cnf75xx;
+};
+
+typedef union cvmx_pemx_inb_read_credits cvmx_pemx_inb_read_credits_t;
+
+/**
+ * cvmx_pem#_int_enb
+ *
+ * "PEM#_INT_ENB = PEM Interrupt Enable
+ * Enables interrupt conditions for the PEM to generate an RSL interrupt."
+ */
+union cvmx_pemx_int_enb {
+	u64 u64;
+	struct cvmx_pemx_int_enb_s {
+		u64 reserved_14_63 : 50;
+		u64 crs_dr : 1;
+		u64 crs_er : 1;
+		u64 rdlk : 1;
+		u64 exc : 1;
+		u64 un_bx : 1;
+		u64 un_b2 : 1;
+		u64 un_b1 : 1;
+		u64 up_bx : 1;
+		u64 up_b2 : 1;
+		u64 up_b1 : 1;
+		u64 pmem : 1;
+		u64 pmei : 1;
+		u64 se : 1;
+		u64 aeri : 1;
+	} s;
+	struct cvmx_pemx_int_enb_s cn61xx;
+	struct cvmx_pemx_int_enb_s cn63xx;
+	struct cvmx_pemx_int_enb_s cn63xxp1;
+	struct cvmx_pemx_int_enb_s cn66xx;
+	struct cvmx_pemx_int_enb_s cn68xx;
+	struct cvmx_pemx_int_enb_s cn68xxp1;
+	struct cvmx_pemx_int_enb_s cn70xx;
+	struct cvmx_pemx_int_enb_s cn70xxp1;
+	struct cvmx_pemx_int_enb_s cnf71xx;
+};
+
+typedef union cvmx_pemx_int_enb cvmx_pemx_int_enb_t;
+
+/**
+ * cvmx_pem#_int_enb_int
+ *
+ * "PEM#_INT_ENB_INT = PEM Interrupt Enable
+ * Enables interrupt conditions for the PEM to generate an RSL interrupt."
+ */
+union cvmx_pemx_int_enb_int {
+	u64 u64;
+	struct cvmx_pemx_int_enb_int_s {
+		u64 reserved_14_63 : 50;
+		u64 crs_dr : 1;
+		u64 crs_er : 1;
+		u64 rdlk : 1;
+		u64 exc : 1;
+		u64 un_bx : 1;
+		u64 un_b2 : 1;
+		u64 un_b1 : 1;
+		u64 up_bx : 1;
+		u64 up_b2 : 1;
+		u64 up_b1 : 1;
+		u64 pmem : 1;
+		u64 pmei : 1;
+		u64 se : 1;
+		u64 aeri : 1;
+	} s;
+	struct cvmx_pemx_int_enb_int_s cn61xx;
+	struct cvmx_pemx_int_enb_int_s cn63xx;
+	struct cvmx_pemx_int_enb_int_s cn63xxp1;
+	struct cvmx_pemx_int_enb_int_s cn66xx;
+	struct cvmx_pemx_int_enb_int_s cn68xx;
+	struct cvmx_pemx_int_enb_int_s cn68xxp1;
+	struct cvmx_pemx_int_enb_int_s cn70xx;
+	struct cvmx_pemx_int_enb_int_s cn70xxp1;
+	struct cvmx_pemx_int_enb_int_s cnf71xx;
+};
+
+typedef union cvmx_pemx_int_enb_int cvmx_pemx_int_enb_int_t;
+
+/**
+ * cvmx_pem#_int_sum
+ *
+ * This register contains the different interrupt summary bits of the PEM.
+ *
+ */
+union cvmx_pemx_int_sum {
+	u64 u64;
+	struct cvmx_pemx_int_sum_s {
+		u64 intd : 1;
+		u64 intc : 1;
+		u64 intb : 1;
+		u64 inta : 1;
+		u64 reserved_14_59 : 46;
+		u64 crs_dr : 1;
+		u64 crs_er : 1;
+		u64 rdlk : 1;
+		u64 exc : 1;
+		u64 un_bx : 1;
+		u64 un_b2 : 1;
+		u64 un_b1 : 1;
+		u64 up_bx : 1;
+		u64 up_b2 : 1;
+		u64 up_b1 : 1;
+		u64 pmem : 1;
+		u64 pmei : 1;
+		u64 se : 1;
+		u64 aeri : 1;
+	} s;
+	struct cvmx_pemx_int_sum_cn61xx {
+		u64 reserved_14_63 : 50;
+		u64 crs_dr : 1;
+		u64 crs_er : 1;
+		u64 rdlk : 1;
+		u64 exc : 1;
+		u64 un_bx : 1;
+		u64 un_b2 : 1;
+		u64 un_b1 : 1;
+		u64 up_bx : 1;
+		u64 up_b2 : 1;
+		u64 up_b1 : 1;
+		u64 pmem : 1;
+		u64 pmei : 1;
+		u64 se : 1;
+		u64 aeri : 1;
+	} cn61xx;
+	struct cvmx_pemx_int_sum_cn61xx cn63xx;
+	struct cvmx_pemx_int_sum_cn61xx cn63xxp1;
+	struct cvmx_pemx_int_sum_cn61xx cn66xx;
+	struct cvmx_pemx_int_sum_cn61xx cn68xx;
+	struct cvmx_pemx_int_sum_cn61xx cn68xxp1;
+	struct cvmx_pemx_int_sum_cn61xx cn70xx;
+	struct cvmx_pemx_int_sum_cn61xx cn70xxp1;
+	struct cvmx_pemx_int_sum_cn73xx {
+		u64 intd : 1;
+		u64 intc : 1;
+		u64 intb : 1;
+		u64 inta : 1;
+		u64 reserved_14_59 : 46;
+		u64 crs_dr : 1;
+		u64 crs_er : 1;
+		u64 rdlk : 1;
+		u64 reserved_10_10 : 1;
+		u64 un_bx : 1;
+		u64 un_b2 : 1;
+		u64 un_b1 : 1;
+		u64 up_bx : 1;
+		u64 up_b2 : 1;
+		u64 up_b1 : 1;
+		u64 reserved_3_3 : 1;
+		u64 pmei : 1;
+		u64 se : 1;
+		u64 aeri : 1;
+	} cn73xx;
+	struct cvmx_pemx_int_sum_cn73xx cn78xx;
+	struct cvmx_pemx_int_sum_cn73xx cn78xxp1;
+	struct cvmx_pemx_int_sum_cn61xx cnf71xx;
+	struct cvmx_pemx_int_sum_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_int_sum cvmx_pemx_int_sum_t;
+
+/**
+ * cvmx_pem#_on
+ *
+ * This register indicates that PEM is configured and ready.
+ *
+ */
+union cvmx_pemx_on {
+	u64 u64;
+	struct cvmx_pemx_on_s {
+		u64 reserved_2_63 : 62;
+		u64 pemoor : 1;
+		u64 pemon : 1;
+	} s;
+	struct cvmx_pemx_on_s cn70xx;
+	struct cvmx_pemx_on_s cn70xxp1;
+	struct cvmx_pemx_on_s cn73xx;
+	struct cvmx_pemx_on_s cn78xx;
+	struct cvmx_pemx_on_s cn78xxp1;
+	struct cvmx_pemx_on_s cnf75xx;
+};
+
+typedef union cvmx_pemx_on cvmx_pemx_on_t;
+
+/**
+ * cvmx_pem#_p2n_bar0_start
+ *
+ * This register specifies the starting address for memory requests that are to be forwarded to
+ * the SLI in RC mode.
+ */
+union cvmx_pemx_p2n_bar0_start {
+	u64 u64;
+	struct cvmx_pemx_p2n_bar0_start_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pemx_p2n_bar0_start_cn61xx {
+		u64 addr : 50;
+		u64 reserved_0_13 : 14;
+	} cn61xx;
+	struct cvmx_pemx_p2n_bar0_start_cn61xx cn63xx;
+	struct cvmx_pemx_p2n_bar0_start_cn61xx cn63xxp1;
+	struct cvmx_pemx_p2n_bar0_start_cn61xx cn66xx;
+	struct cvmx_pemx_p2n_bar0_start_cn61xx cn68xx;
+	struct cvmx_pemx_p2n_bar0_start_cn61xx cn68xxp1;
+	struct cvmx_pemx_p2n_bar0_start_cn61xx cn70xx;
+	struct cvmx_pemx_p2n_bar0_start_cn61xx cn70xxp1;
+	struct cvmx_pemx_p2n_bar0_start_cn73xx {
+		u64 addr : 41;
+		u64 reserved_0_22 : 23;
+	} cn73xx;
+	struct cvmx_pemx_p2n_bar0_start_cn73xx cn78xx;
+	struct cvmx_pemx_p2n_bar0_start_cn78xxp1 {
+		u64 addr : 49;
+		u64 reserved_0_14 : 15;
+	} cn78xxp1;
+	struct cvmx_pemx_p2n_bar0_start_cn61xx cnf71xx;
+	struct cvmx_pemx_p2n_bar0_start_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_p2n_bar0_start cvmx_pemx_p2n_bar0_start_t;
+
+/**
+ * cvmx_pem#_p2n_bar1_start
+ *
+ * This register specifies the starting address for memory requests that are to be forwarded to
+ * the SLI in RC mode.
+ */
+union cvmx_pemx_p2n_bar1_start {
+	u64 u64;
+	struct cvmx_pemx_p2n_bar1_start_s {
+		u64 addr : 38;
+		u64 reserved_0_25 : 26;
+	} s;
+	struct cvmx_pemx_p2n_bar1_start_s cn61xx;
+	struct cvmx_pemx_p2n_bar1_start_s cn63xx;
+	struct cvmx_pemx_p2n_bar1_start_s cn63xxp1;
+	struct cvmx_pemx_p2n_bar1_start_s cn66xx;
+	struct cvmx_pemx_p2n_bar1_start_s cn68xx;
+	struct cvmx_pemx_p2n_bar1_start_s cn68xxp1;
+	struct cvmx_pemx_p2n_bar1_start_s cn70xx;
+	struct cvmx_pemx_p2n_bar1_start_s cn70xxp1;
+	struct cvmx_pemx_p2n_bar1_start_s cn73xx;
+	struct cvmx_pemx_p2n_bar1_start_s cn78xx;
+	struct cvmx_pemx_p2n_bar1_start_s cn78xxp1;
+	struct cvmx_pemx_p2n_bar1_start_s cnf71xx;
+	struct cvmx_pemx_p2n_bar1_start_s cnf75xx;
+};
+
+typedef union cvmx_pemx_p2n_bar1_start cvmx_pemx_p2n_bar1_start_t;
+
+/**
+ * cvmx_pem#_p2n_bar2_start
+ *
+ * This register specifies the starting address for memory requests that are to be forwarded to
+ * the SLI in RC mode.
+ */
+union cvmx_pemx_p2n_bar2_start {
+	u64 u64;
+	struct cvmx_pemx_p2n_bar2_start_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pemx_p2n_bar2_start_cn61xx {
+		u64 addr : 23;
+		u64 reserved_0_40 : 41;
+	} cn61xx;
+	struct cvmx_pemx_p2n_bar2_start_cn61xx cn63xx;
+	struct cvmx_pemx_p2n_bar2_start_cn61xx cn63xxp1;
+	struct cvmx_pemx_p2n_bar2_start_cn61xx cn66xx;
+	struct cvmx_pemx_p2n_bar2_start_cn61xx cn68xx;
+	struct cvmx_pemx_p2n_bar2_start_cn61xx cn68xxp1;
+	struct cvmx_pemx_p2n_bar2_start_cn61xx cn70xx;
+	struct cvmx_pemx_p2n_bar2_start_cn61xx cn70xxp1;
+	struct cvmx_pemx_p2n_bar2_start_cn73xx {
+		u64 addr : 19;
+		u64 reserved_0_44 : 45;
+	} cn73xx;
+	struct cvmx_pemx_p2n_bar2_start_cn73xx cn78xx;
+	struct cvmx_pemx_p2n_bar2_start_cn73xx cn78xxp1;
+	struct cvmx_pemx_p2n_bar2_start_cn61xx cnf71xx;
+	struct cvmx_pemx_p2n_bar2_start_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_p2n_bar2_start cvmx_pemx_p2n_bar2_start_t;
+
+/**
+ * cvmx_pem#_p2p_bar#_end
+ *
+ * This register specifies the ending address for memory requests that are to be forwarded to the
+ * PCIe peer port.
+ */
+union cvmx_pemx_p2p_barx_end {
+	u64 u64;
+	struct cvmx_pemx_p2p_barx_end_s {
+		u64 addr : 52;
+		u64 reserved_0_11 : 12;
+	} s;
+	struct cvmx_pemx_p2p_barx_end_s cn63xx;
+	struct cvmx_pemx_p2p_barx_end_s cn63xxp1;
+	struct cvmx_pemx_p2p_barx_end_s cn66xx;
+	struct cvmx_pemx_p2p_barx_end_s cn68xx;
+	struct cvmx_pemx_p2p_barx_end_s cn68xxp1;
+	struct cvmx_pemx_p2p_barx_end_s cn73xx;
+	struct cvmx_pemx_p2p_barx_end_s cn78xx;
+	struct cvmx_pemx_p2p_barx_end_s cn78xxp1;
+	struct cvmx_pemx_p2p_barx_end_s cnf75xx;
+};
+
+typedef union cvmx_pemx_p2p_barx_end cvmx_pemx_p2p_barx_end_t;
+
+/**
+ * cvmx_pem#_p2p_bar#_start
+ *
+ * This register specifies the starting address for memory requests that are to be forwarded to
+ * the PCIe peer port.
+ */
+union cvmx_pemx_p2p_barx_start {
+	u64 u64;
+	struct cvmx_pemx_p2p_barx_start_s {
+		u64 addr : 52;
+		u64 reserved_2_11 : 10;
+		u64 dst : 2;
+	} s;
+	struct cvmx_pemx_p2p_barx_start_cn63xx {
+		u64 addr : 52;
+		u64 reserved_0_11 : 12;
+	} cn63xx;
+	struct cvmx_pemx_p2p_barx_start_cn63xx cn63xxp1;
+	struct cvmx_pemx_p2p_barx_start_cn63xx cn66xx;
+	struct cvmx_pemx_p2p_barx_start_cn63xx cn68xx;
+	struct cvmx_pemx_p2p_barx_start_cn63xx cn68xxp1;
+	struct cvmx_pemx_p2p_barx_start_s cn73xx;
+	struct cvmx_pemx_p2p_barx_start_s cn78xx;
+	struct cvmx_pemx_p2p_barx_start_s cn78xxp1;
+	struct cvmx_pemx_p2p_barx_start_s cnf75xx;
+};
+
+typedef union cvmx_pemx_p2p_barx_start cvmx_pemx_p2p_barx_start_t;
+
+/**
+ * cvmx_pem#_qlm
+ *
+ * This register configures the PEM3 QLM.
+ *
+ */
+union cvmx_pemx_qlm {
+	u64 u64;
+	struct cvmx_pemx_qlm_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pemx_qlm_cn73xx {
+		u64 reserved_1_63 : 63;
+		u64 pemdlmsel : 1;
+	} cn73xx;
+	struct cvmx_pemx_qlm_cn78xx {
+		u64 reserved_1_63 : 63;
+		u64 pem3qlm : 1;
+	} cn78xx;
+	struct cvmx_pemx_qlm_cn78xx cn78xxp1;
+	struct cvmx_pemx_qlm_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_qlm cvmx_pemx_qlm_t;
+
+/**
+ * cvmx_pem#_spi_ctl
+ *
+ * PEM#_SPI_CTL register.
+ *
+ */
+union cvmx_pemx_spi_ctl {
+	u64 u64;
+	struct cvmx_pemx_spi_ctl_s {
+		u64 reserved_14_63 : 50;
+		u64 start_busy : 1;
+		u64 tvalid : 1;
+		u64 cmd : 3;
+		u64 adr : 9;
+	} s;
+	struct cvmx_pemx_spi_ctl_s cn70xx;
+	struct cvmx_pemx_spi_ctl_s cn70xxp1;
+	struct cvmx_pemx_spi_ctl_s cn73xx;
+	struct cvmx_pemx_spi_ctl_s cn78xx;
+	struct cvmx_pemx_spi_ctl_s cn78xxp1;
+	struct cvmx_pemx_spi_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pemx_spi_ctl cvmx_pemx_spi_ctl_t;
+
+/**
+ * cvmx_pem#_spi_data
+ *
+ * This register contains the most recently read or written SPI data and is unpredictable upon
+ * power-up. Is valid after a PEM()_SPI_CTL[CMD]=READ/RDSR when hardware clears
+ * PEM()_SPI_CTL[START_BUSY]. Is written after a PEM()_SPI_CTL[CMD]=WRITE/WRSR
+ * when hardware clears PEM()_SPI_CTL[START_BUSY].
+ */
+union cvmx_pemx_spi_data {
+	u64 u64;
+	struct cvmx_pemx_spi_data_s {
+		u64 preamble : 16;
+		u64 reserved_45_47 : 3;
+		u64 cs2 : 1;
+		u64 adr : 12;
+		u64 data : 32;
+	} s;
+	struct cvmx_pemx_spi_data_s cn70xx;
+	struct cvmx_pemx_spi_data_s cn70xxp1;
+	struct cvmx_pemx_spi_data_s cn73xx;
+	struct cvmx_pemx_spi_data_s cn78xx;
+	struct cvmx_pemx_spi_data_s cn78xxp1;
+	struct cvmx_pemx_spi_data_s cnf75xx;
+};
+
+typedef union cvmx_pemx_spi_data cvmx_pemx_spi_data_t;
+
+/**
+ * cvmx_pem#_strap
+ *
+ * "Below are in pesc_csr
+ * The input strapping pins"
+ */
+union cvmx_pemx_strap {
+	u64 u64;
+	struct cvmx_pemx_strap_s {
+		u64 reserved_5_63 : 59;
+		u64 miopem2dlm5sel : 1;
+		u64 pilaneswap : 1;
+		u64 reserved_0_2 : 3;
+	} s;
+	struct cvmx_pemx_strap_cn70xx {
+		u64 reserved_4_63 : 60;
+		u64 pilaneswap : 1;
+		u64 pimode : 3;
+	} cn70xx;
+	struct cvmx_pemx_strap_cn70xx cn70xxp1;
+	struct cvmx_pemx_strap_cn73xx {
+		u64 reserved_5_63 : 59;
+		u64 miopem2dlm5sel : 1;
+		u64 pilaneswap : 1;
+		u64 pilanes8 : 1;
+		u64 pimode : 2;
+	} cn73xx;
+	struct cvmx_pemx_strap_cn78xx {
+		u64 reserved_4_63 : 60;
+		u64 pilaneswap : 1;
+		u64 pilanes8 : 1;
+		u64 pimode : 2;
+	} cn78xx;
+	struct cvmx_pemx_strap_cn78xx cn78xxp1;
+	struct cvmx_pemx_strap_cnf75xx {
+		u64 reserved_5_63 : 59;
+		u64 miopem2dlm5sel : 1;
+		u64 pilaneswap : 1;
+		u64 pilanes4 : 1;
+		u64 pimode : 2;
+	} cnf75xx;
+};
+
+typedef union cvmx_pemx_strap cvmx_pemx_strap_t;
+
+/**
+ * cvmx_pem#_tlp_credits
+ *
+ * This register specifies the number of credits for use in moving TLPs. When this register is
+ * written, the credit values are reset to the register value. A write to this register should
+ * take place before traffic flow starts.
+ */
+union cvmx_pemx_tlp_credits {
+	u64 u64;
+	struct cvmx_pemx_tlp_credits_s {
+		u64 reserved_56_63 : 8;
+		u64 peai_ppf : 8;
+		u64 pem_cpl : 8;
+		u64 pem_np : 8;
+		u64 pem_p : 8;
+		u64 sli_cpl : 8;
+		u64 sli_np : 8;
+		u64 sli_p : 8;
+	} s;
+	struct cvmx_pemx_tlp_credits_cn61xx {
+		u64 reserved_56_63 : 8;
+		u64 peai_ppf : 8;
+		u64 reserved_24_47 : 24;
+		u64 sli_cpl : 8;
+		u64 sli_np : 8;
+		u64 sli_p : 8;
+	} cn61xx;
+	struct cvmx_pemx_tlp_credits_s cn63xx;
+	struct cvmx_pemx_tlp_credits_s cn63xxp1;
+	struct cvmx_pemx_tlp_credits_s cn66xx;
+	struct cvmx_pemx_tlp_credits_s cn68xx;
+	struct cvmx_pemx_tlp_credits_s cn68xxp1;
+	struct cvmx_pemx_tlp_credits_cn61xx cn70xx;
+	struct cvmx_pemx_tlp_credits_cn61xx cn70xxp1;
+	struct cvmx_pemx_tlp_credits_cn73xx {
+		u64 reserved_48_63 : 16;
+		u64 pem_cpl : 8;
+		u64 pem_np : 8;
+		u64 pem_p : 8;
+		u64 sli_cpl : 8;
+		u64 sli_np : 8;
+		u64 sli_p : 8;
+	} cn73xx;
+	struct cvmx_pemx_tlp_credits_cn73xx cn78xx;
+	struct cvmx_pemx_tlp_credits_cn73xx cn78xxp1;
+	struct cvmx_pemx_tlp_credits_cn61xx cnf71xx;
+	struct cvmx_pemx_tlp_credits_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pemx_tlp_credits cvmx_pemx_tlp_credits_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pexp-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-pexp-defs.h
new file mode 100644
index 0000000..333c2ca
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pexp-defs.h
@@ -0,0 +1,1382 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) definitions for
+ * OCTEON PEXP.
+ */
+
+#ifndef __CVMX_PEXP_DEFS_H__
+#define __CVMX_PEXP_DEFS_H__
+
+#define CVMX_PEXP_NPEI_BAR1_INDEXX(offset)	(0x00011F0000008000ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_BIST_STATUS		(0x00011F0000008580ull)
+#define CVMX_PEXP_NPEI_BIST_STATUS2		(0x00011F0000008680ull)
+#define CVMX_PEXP_NPEI_CTL_PORT0		(0x00011F0000008250ull)
+#define CVMX_PEXP_NPEI_CTL_PORT1		(0x00011F0000008260ull)
+#define CVMX_PEXP_NPEI_CTL_STATUS		(0x00011F0000008570ull)
+#define CVMX_PEXP_NPEI_CTL_STATUS2		(0x00011F000000BC00ull)
+#define CVMX_PEXP_NPEI_DATA_OUT_CNT		(0x00011F00000085F0ull)
+#define CVMX_PEXP_NPEI_DBG_DATA			(0x00011F0000008510ull)
+#define CVMX_PEXP_NPEI_DBG_SELECT		(0x00011F0000008500ull)
+#define CVMX_PEXP_NPEI_DMA0_INT_LEVEL		(0x00011F00000085C0ull)
+#define CVMX_PEXP_NPEI_DMA1_INT_LEVEL		(0x00011F00000085D0ull)
+#define CVMX_PEXP_NPEI_DMAX_COUNTS(offset)	(0x00011F0000008450ull + ((offset) & 7) * 16)
+#define CVMX_PEXP_NPEI_DMAX_DBELL(offset)	(0x00011F00000083B0ull + ((offset) & 7) * 16)
+#define CVMX_PEXP_NPEI_DMAX_IBUFF_SADDR(offset) (0x00011F0000008400ull + ((offset) & 7) * 16)
+#define CVMX_PEXP_NPEI_DMAX_NADDR(offset)	(0x00011F00000084A0ull + ((offset) & 7) * 16)
+#define CVMX_PEXP_NPEI_DMA_CNTS			(0x00011F00000085E0ull)
+#define CVMX_PEXP_NPEI_DMA_CONTROL		(0x00011F00000083A0ull)
+#define CVMX_PEXP_NPEI_DMA_PCIE_REQ_NUM		(0x00011F00000085B0ull)
+#define CVMX_PEXP_NPEI_DMA_STATE1		(0x00011F00000086C0ull)
+#define CVMX_PEXP_NPEI_DMA_STATE1_P1		(0x00011F0000008680ull)
+#define CVMX_PEXP_NPEI_DMA_STATE2		(0x00011F00000086D0ull)
+#define CVMX_PEXP_NPEI_DMA_STATE2_P1		(0x00011F0000008690ull)
+#define CVMX_PEXP_NPEI_DMA_STATE3_P1		(0x00011F00000086A0ull)
+#define CVMX_PEXP_NPEI_DMA_STATE4_P1		(0x00011F00000086B0ull)
+#define CVMX_PEXP_NPEI_DMA_STATE5_P1		(0x00011F00000086C0ull)
+#define CVMX_PEXP_NPEI_INT_A_ENB		(0x00011F0000008560ull)
+#define CVMX_PEXP_NPEI_INT_A_ENB2		(0x00011F000000BCE0ull)
+#define CVMX_PEXP_NPEI_INT_A_SUM		(0x00011F0000008550ull)
+#define CVMX_PEXP_NPEI_INT_ENB			(0x00011F0000008540ull)
+#define CVMX_PEXP_NPEI_INT_ENB2			(0x00011F000000BCD0ull)
+#define CVMX_PEXP_NPEI_INT_INFO			(0x00011F0000008590ull)
+#define CVMX_PEXP_NPEI_INT_SUM			(0x00011F0000008530ull)
+#define CVMX_PEXP_NPEI_INT_SUM2			(0x00011F000000BCC0ull)
+#define CVMX_PEXP_NPEI_LAST_WIN_RDATA0		(0x00011F0000008600ull)
+#define CVMX_PEXP_NPEI_LAST_WIN_RDATA1		(0x00011F0000008610ull)
+#define CVMX_PEXP_NPEI_MEM_ACCESS_CTL		(0x00011F00000084F0ull)
+#define CVMX_PEXP_NPEI_MEM_ACCESS_SUBIDX(offset)                                                   \
+	(0x00011F0000008280ull + ((offset) & 31) * 16 - 16 * 12)
+#define CVMX_PEXP_NPEI_MSI_ENB0			      (0x00011F000000BC50ull)
+#define CVMX_PEXP_NPEI_MSI_ENB1			      (0x00011F000000BC60ull)
+#define CVMX_PEXP_NPEI_MSI_ENB2			      (0x00011F000000BC70ull)
+#define CVMX_PEXP_NPEI_MSI_ENB3			      (0x00011F000000BC80ull)
+#define CVMX_PEXP_NPEI_MSI_RCV0			      (0x00011F000000BC10ull)
+#define CVMX_PEXP_NPEI_MSI_RCV1			      (0x00011F000000BC20ull)
+#define CVMX_PEXP_NPEI_MSI_RCV2			      (0x00011F000000BC30ull)
+#define CVMX_PEXP_NPEI_MSI_RCV3			      (0x00011F000000BC40ull)
+#define CVMX_PEXP_NPEI_MSI_RD_MAP		      (0x00011F000000BCA0ull)
+#define CVMX_PEXP_NPEI_MSI_W1C_ENB0		      (0x00011F000000BCF0ull)
+#define CVMX_PEXP_NPEI_MSI_W1C_ENB1		      (0x00011F000000BD00ull)
+#define CVMX_PEXP_NPEI_MSI_W1C_ENB2		      (0x00011F000000BD10ull)
+#define CVMX_PEXP_NPEI_MSI_W1C_ENB3		      (0x00011F000000BD20ull)
+#define CVMX_PEXP_NPEI_MSI_W1S_ENB0		      (0x00011F000000BD30ull)
+#define CVMX_PEXP_NPEI_MSI_W1S_ENB1		      (0x00011F000000BD40ull)
+#define CVMX_PEXP_NPEI_MSI_W1S_ENB2		      (0x00011F000000BD50ull)
+#define CVMX_PEXP_NPEI_MSI_W1S_ENB3		      (0x00011F000000BD60ull)
+#define CVMX_PEXP_NPEI_MSI_WR_MAP		      (0x00011F000000BC90ull)
+#define CVMX_PEXP_NPEI_PCIE_CREDIT_CNT		      (0x00011F000000BD70ull)
+#define CVMX_PEXP_NPEI_PCIE_MSI_RCV		      (0x00011F000000BCB0ull)
+#define CVMX_PEXP_NPEI_PCIE_MSI_RCV_B1		      (0x00011F0000008650ull)
+#define CVMX_PEXP_NPEI_PCIE_MSI_RCV_B2		      (0x00011F0000008660ull)
+#define CVMX_PEXP_NPEI_PCIE_MSI_RCV_B3		      (0x00011F0000008670ull)
+#define CVMX_PEXP_NPEI_PKTX_CNTS(offset)	      (0x00011F000000A400ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_PKTX_INSTR_BADDR(offset)	      (0x00011F000000A800ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_PKTX_INSTR_BAOFF_DBELL(offset) (0x00011F000000AC00ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_PKTX_INSTR_FIFO_RSIZE(offset)  (0x00011F000000B000ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_PKTX_INSTR_HEADER(offset)      (0x00011F000000B400ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_PKTX_IN_BP(offset)	      (0x00011F000000B800ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_PKTX_SLIST_BADDR(offset)	      (0x00011F0000009400ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_PKTX_SLIST_BAOFF_DBELL(offset) (0x00011F0000009800ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_PKTX_SLIST_FIFO_RSIZE(offset)  (0x00011F0000009C00ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_PKT_CNT_INT		      (0x00011F0000009110ull)
+#define CVMX_PEXP_NPEI_PKT_CNT_INT_ENB		      (0x00011F0000009130ull)
+#define CVMX_PEXP_NPEI_PKT_DATA_OUT_ES		      (0x00011F00000090B0ull)
+#define CVMX_PEXP_NPEI_PKT_DATA_OUT_NS		      (0x00011F00000090A0ull)
+#define CVMX_PEXP_NPEI_PKT_DATA_OUT_ROR		      (0x00011F0000009090ull)
+#define CVMX_PEXP_NPEI_PKT_DPADDR		      (0x00011F0000009080ull)
+#define CVMX_PEXP_NPEI_PKT_INPUT_CONTROL	      (0x00011F0000009150ull)
+#define CVMX_PEXP_NPEI_PKT_INSTR_ENB		      (0x00011F0000009000ull)
+#define CVMX_PEXP_NPEI_PKT_INSTR_RD_SIZE	      (0x00011F0000009190ull)
+#define CVMX_PEXP_NPEI_PKT_INSTR_SIZE		      (0x00011F0000009020ull)
+#define CVMX_PEXP_NPEI_PKT_INT_LEVELS		      (0x00011F0000009100ull)
+#define CVMX_PEXP_NPEI_PKT_IN_BP		      (0x00011F00000086B0ull)
+#define CVMX_PEXP_NPEI_PKT_IN_DONEX_CNTS(offset)      (0x00011F000000A000ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_NPEI_PKT_IN_INSTR_COUNTS	      (0x00011F00000086A0ull)
+#define CVMX_PEXP_NPEI_PKT_IN_PCIE_PORT		      (0x00011F00000091A0ull)
+#define CVMX_PEXP_NPEI_PKT_IPTR			      (0x00011F0000009070ull)
+#define CVMX_PEXP_NPEI_PKT_OUTPUT_WMARK		      (0x00011F0000009160ull)
+#define CVMX_PEXP_NPEI_PKT_OUT_BMODE		      (0x00011F00000090D0ull)
+#define CVMX_PEXP_NPEI_PKT_OUT_ENB		      (0x00011F0000009010ull)
+#define CVMX_PEXP_NPEI_PKT_PCIE_PORT		      (0x00011F00000090E0ull)
+#define CVMX_PEXP_NPEI_PKT_PORT_IN_RST		      (0x00011F0000008690ull)
+#define CVMX_PEXP_NPEI_PKT_SLIST_ES		      (0x00011F0000009050ull)
+#define CVMX_PEXP_NPEI_PKT_SLIST_ID_SIZE	      (0x00011F0000009180ull)
+#define CVMX_PEXP_NPEI_PKT_SLIST_NS		      (0x00011F0000009040ull)
+#define CVMX_PEXP_NPEI_PKT_SLIST_ROR		      (0x00011F0000009030ull)
+#define CVMX_PEXP_NPEI_PKT_TIME_INT		      (0x00011F0000009120ull)
+#define CVMX_PEXP_NPEI_PKT_TIME_INT_ENB		      (0x00011F0000009140ull)
+#define CVMX_PEXP_NPEI_RSL_INT_BLOCKS		      (0x00011F0000008520ull)
+#define CVMX_PEXP_NPEI_SCRATCH_1		      (0x00011F0000008270ull)
+#define CVMX_PEXP_NPEI_STATE1			      (0x00011F0000008620ull)
+#define CVMX_PEXP_NPEI_STATE2			      (0x00011F0000008630ull)
+#define CVMX_PEXP_NPEI_STATE3			      (0x00011F0000008640ull)
+#define CVMX_PEXP_NPEI_WINDOW_CTL		      (0x00011F0000008380ull)
+#define CVMX_PEXP_NQM_VFX_ACQ(offset)		      (0x0001450000000030ull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_NQM_VFX_AQA(offset)		      (0x0001450000000024ull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_NQM_VFX_ASQ(offset)		      (0x0001450000000028ull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_NQM_VFX_CAP(offset)		      (0x0001450000000000ull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_NQM_VFX_CC(offset)		      (0x0001450000000014ull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_NQM_VFX_CQX_HDBL(offset, block_id)                                               \
+	(0x0001450000001004ull + (((offset) & 31) + ((block_id) & 2047) * 0x4000ull) * 8)
+#define CVMX_PEXP_NQM_VFX_CSTS(offset)	   (0x000145000000001Cull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_NQM_VFX_INTMC(offset)	   (0x0001450000000010ull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_NQM_VFX_INTMS(offset)	   (0x000145000000000Cull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_NQM_VFX_MSIX_PBA(offset) (0x0001450000010200ull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_NQM_VFX_NSSR(offset)	   (0x0001450000000020ull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_NQM_VFX_SQX_TDBL(offset, block_id)                                               \
+	(0x0001450000001000ull + (((offset) & 31) + ((block_id) & 2047) * 0x4000ull) * 8)
+#define CVMX_PEXP_NQM_VFX_VECX_MSIX_ADDR(offset, block_id)                                         \
+	(0x0001450000010000ull + (((offset) & 31) + ((block_id) & 2047) * 0x2000ull) * 16)
+#define CVMX_PEXP_NQM_VFX_VECX_MSIX_CTL(offset, block_id)                                          \
+	(0x0001450000010008ull + (((offset) & 31) + ((block_id) & 2047) * 0x2000ull) * 16)
+#define CVMX_PEXP_NQM_VFX_VS(offset)		 (0x0001450000000008ull + ((offset) & 2047) * 0x20000ull)
+#define CVMX_PEXP_SLITB_MSIXX_TABLE_ADDR(offset) (0x00011F0000004000ull + ((offset) & 127) * 16)
+#define CVMX_PEXP_SLITB_MSIXX_TABLE_DATA(offset) (0x00011F0000004008ull + ((offset) & 127) * 16)
+#define CVMX_PEXP_SLITB_MSIX_MACX_PFX_TABLE_ADDR(offset, block_id)                                 \
+	(0x00011F0000002000ull + ((offset) & 1) * 4096 + ((block_id) & 3) * 0x10ull)
+#define CVMX_PEXP_SLITB_MSIX_MACX_PFX_TABLE_DATA(offset, block_id)                                 \
+	(0x00011F0000002008ull + ((offset) & 1) * 4096 + ((block_id) & 3) * 0x10ull)
+#define CVMX_PEXP_SLITB_PFX_PKT_CNT_INT(offset)	 (0x00011F0000008000ull + ((offset) & 7) * 16)
+#define CVMX_PEXP_SLITB_PFX_PKT_INT(offset)	 (0x00011F0000008300ull + ((offset) & 7) * 16)
+#define CVMX_PEXP_SLITB_PFX_PKT_IN_INT(offset)	 (0x00011F0000008200ull + ((offset) & 7) * 16)
+#define CVMX_PEXP_SLITB_PFX_PKT_RING_RST(offset) (0x00011F0000008400ull + ((offset) & 7) * 16)
+#define CVMX_PEXP_SLITB_PFX_PKT_TIME_INT(offset) (0x00011F0000008100ull + ((offset) & 7) * 16)
+#define CVMX_PEXP_SLITB_PKTX_PF_VF_MBOX_SIGX(offset, block_id)                                     \
+	(0x00011F0000011000ull + (((offset) & 1) + ((block_id) & 127) * 0x4000ull) * 8)
+#define CVMX_PEXP_SLI_BIST_STATUS CVMX_PEXP_SLI_BIST_STATUS_FUNC()
+static inline u64 CVMX_PEXP_SLI_BIST_STATUS_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010580ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010580ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000028580ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000028580ull;
+	}
+	return 0x00011F0000028580ull;
+}
+
+static inline u64 CVMX_PEXP_SLI_CTL_PORTX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010050ull + (offset) * 16;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010050ull + (offset) * 16;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010050ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000106E0ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000286E0ull + (offset) * 16;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000286E0ull + (offset) * 16;
+	}
+	return 0x00011F00000286E0ull + (offset) * 16;
+}
+
+#define CVMX_PEXP_SLI_CTL_STATUS CVMX_PEXP_SLI_CTL_STATUS_FUNC()
+static inline u64 CVMX_PEXP_SLI_CTL_STATUS_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010570ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010570ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000028570ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000028570ull;
+	}
+	return 0x00011F0000028570ull;
+}
+
+#define CVMX_PEXP_SLI_DATA_OUT_CNT CVMX_PEXP_SLI_DATA_OUT_CNT_FUNC()
+static inline u64 CVMX_PEXP_SLI_DATA_OUT_CNT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000105F0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000105F0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000285F0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000285F0ull;
+	}
+	return 0x00011F00000285F0ull;
+}
+
+#define CVMX_PEXP_SLI_DBG_DATA	 (0x00011F0000010310ull)
+#define CVMX_PEXP_SLI_DBG_SELECT (0x00011F0000010300ull)
+static inline u64 CVMX_PEXP_SLI_DMAX_CNT(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010400ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010400ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000028400ull + (offset) * 16;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000028400ull + (offset) * 16;
+	}
+	return 0x00011F0000028400ull + (offset) * 16;
+}
+
+static inline u64 CVMX_PEXP_SLI_DMAX_INT_LEVEL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000103E0ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000103E0ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000283E0ull + (offset) * 16;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000283E0ull + (offset) * 16;
+	}
+	return 0x00011F00000283E0ull + (offset) * 16;
+}
+
+static inline u64 CVMX_PEXP_SLI_DMAX_TIM(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010420ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010420ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000028420ull + (offset) * 16;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000028420ull + (offset) * 16;
+	}
+	return 0x00011F0000028420ull + (offset) * 16;
+}
+
+#define CVMX_PEXP_SLI_INT_ENB_CIU	    (0x00011F0000013CD0ull)
+#define CVMX_PEXP_SLI_INT_ENB_PORTX(offset) (0x00011F0000010340ull + ((offset) & 3) * 16)
+#define CVMX_PEXP_SLI_INT_SUM		    (0x00011F0000010330ull)
+#define CVMX_PEXP_SLI_LAST_WIN_RDATA0	    (0x00011F0000010600ull)
+#define CVMX_PEXP_SLI_LAST_WIN_RDATA1	    (0x00011F0000010610ull)
+#define CVMX_PEXP_SLI_LAST_WIN_RDATA2	    (0x00011F00000106C0ull)
+#define CVMX_PEXP_SLI_LAST_WIN_RDATA3	    (0x00011F00000106D0ull)
+#define CVMX_PEXP_SLI_MACX_PFX_DMA_VF_INT(offset, block_id)                                        \
+	(0x00011F0000027280ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_MACX_PFX_DMA_VF_INT_ENB(offset, block_id)                                    \
+	(0x00011F0000027500ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_MACX_PFX_FLR_VF_INT(offset, block_id)                                        \
+	(0x00011F0000027400ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_MACX_PFX_INT_ENB(offset, block_id)                                           \
+	(0x00011F0000027080ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_MACX_PFX_INT_SUM(offset, block_id)                                           \
+	(0x00011F0000027000ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_MACX_PFX_MBOX_INT(offset, block_id)                                          \
+	(0x00011F0000027380ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_MACX_PFX_PKT_VF_INT(offset, block_id)                                        \
+	(0x00011F0000027300ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_MACX_PFX_PKT_VF_INT_ENB(offset, block_id)                                    \
+	(0x00011F0000027580ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_MACX_PFX_PP_VF_INT(offset, block_id)                                         \
+	(0x00011F0000027200ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_MACX_PFX_PP_VF_INT_ENB(offset, block_id)                                     \
+	(0x00011F0000027480ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_MAC_CREDIT_CNT CVMX_PEXP_SLI_MAC_CREDIT_CNT_FUNC()
+static inline u64 CVMX_PEXP_SLI_MAC_CREDIT_CNT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013D70ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013D70ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000023D70ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000023D70ull;
+	}
+	return 0x00011F0000023D70ull;
+}
+
+#define CVMX_PEXP_SLI_MAC_CREDIT_CNT2 CVMX_PEXP_SLI_MAC_CREDIT_CNT2_FUNC()
+static inline u64 CVMX_PEXP_SLI_MAC_CREDIT_CNT2_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013E10ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013E10ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000023E10ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000023E10ull;
+	}
+	return 0x00011F0000023E10ull;
+}
+
+#define CVMX_PEXP_SLI_MEM_ACCESS_CTL CVMX_PEXP_SLI_MEM_ACCESS_CTL_FUNC()
+static inline u64 CVMX_PEXP_SLI_MEM_ACCESS_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000102F0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000102F0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000282F0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000282F0ull;
+	}
+	return 0x00011F00000282F0ull;
+}
+
+static inline u64 CVMX_PEXP_SLI_MEM_ACCESS_SUBIDX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000100E0ull + (offset) * 16 - 16 * 12;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000100E0ull + (offset) * 16 - 16 * 12;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000280E0ull + (offset) * 16 - 16 * 12;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000280E0ull + (offset) * 16 - 16 * 12;
+	}
+	return 0x00011F00000280E0ull + (offset) * 16 - 16 * 12;
+}
+
+#define CVMX_PEXP_SLI_MEM_CTL CVMX_PEXP_SLI_MEM_CTL_FUNC()
+static inline u64 CVMX_PEXP_SLI_MEM_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000105E0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000285E0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000285E0ull;
+	}
+	return 0x00011F00000285E0ull;
+}
+
+#define CVMX_PEXP_SLI_MEM_INT_SUM CVMX_PEXP_SLI_MEM_INT_SUM_FUNC()
+static inline u64 CVMX_PEXP_SLI_MEM_INT_SUM_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000105D0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000285D0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000285D0ull;
+	}
+	return 0x00011F00000285D0ull;
+}
+
+static inline u64 CVMX_PEXP_SLI_MSIXX_TABLE_ADDR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000016000ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000000000ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000000000ull + (offset) * 16;
+	}
+	return 0x00011F0000000000ull + (offset) * 16;
+}
+
+static inline u64 CVMX_PEXP_SLI_MSIXX_TABLE_DATA(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000016008ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000000008ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000000008ull + (offset) * 16;
+	}
+	return 0x00011F0000000008ull + (offset) * 16;
+}
+
+#define CVMX_PEXP_SLI_MSIX_MACX_PF_TABLE_ADDR(offset) (0x00011F0000017C00ull + ((offset) & 3) * 16)
+#define CVMX_PEXP_SLI_MSIX_MACX_PF_TABLE_DATA(offset) (0x00011F0000017C08ull + ((offset) & 3) * 16)
+#define CVMX_PEXP_SLI_MSIX_PBA0			      CVMX_PEXP_SLI_MSIX_PBA0_FUNC()
+static inline u64 CVMX_PEXP_SLI_MSIX_PBA0_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000017000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000001000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000001000ull;
+	}
+	return 0x00011F0000001000ull;
+}
+
+#define CVMX_PEXP_SLI_MSIX_PBA1 CVMX_PEXP_SLI_MSIX_PBA1_FUNC()
+static inline u64 CVMX_PEXP_SLI_MSIX_PBA1_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000017010ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000001008ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000001008ull;
+	}
+	return 0x00011F0000001008ull;
+}
+
+#define CVMX_PEXP_SLI_MSI_ENB0 (0x00011F0000013C50ull)
+#define CVMX_PEXP_SLI_MSI_ENB1 (0x00011F0000013C60ull)
+#define CVMX_PEXP_SLI_MSI_ENB2 (0x00011F0000013C70ull)
+#define CVMX_PEXP_SLI_MSI_ENB3 (0x00011F0000013C80ull)
+#define CVMX_PEXP_SLI_MSI_RCV0 CVMX_PEXP_SLI_MSI_RCV0_FUNC()
+static inline u64 CVMX_PEXP_SLI_MSI_RCV0_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013C10ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013C10ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000023C10ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000023C10ull;
+	}
+	return 0x00011F0000023C10ull;
+}
+
+#define CVMX_PEXP_SLI_MSI_RCV1 CVMX_PEXP_SLI_MSI_RCV1_FUNC()
+static inline u64 CVMX_PEXP_SLI_MSI_RCV1_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013C20ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013C20ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000023C20ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000023C20ull;
+	}
+	return 0x00011F0000023C20ull;
+}
+
+#define CVMX_PEXP_SLI_MSI_RCV2 CVMX_PEXP_SLI_MSI_RCV2_FUNC()
+static inline u64 CVMX_PEXP_SLI_MSI_RCV2_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013C30ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013C30ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000023C30ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000023C30ull;
+	}
+	return 0x00011F0000023C30ull;
+}
+
+#define CVMX_PEXP_SLI_MSI_RCV3 CVMX_PEXP_SLI_MSI_RCV3_FUNC()
+static inline u64 CVMX_PEXP_SLI_MSI_RCV3_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013C40ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013C40ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000023C40ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000023C40ull;
+	}
+	return 0x00011F0000023C40ull;
+}
+
+#define CVMX_PEXP_SLI_MSI_RD_MAP CVMX_PEXP_SLI_MSI_RD_MAP_FUNC()
+static inline u64 CVMX_PEXP_SLI_MSI_RD_MAP_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013CA0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013CA0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000023CA0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000023CA0ull;
+	}
+	return 0x00011F0000023CA0ull;
+}
+
+#define CVMX_PEXP_SLI_MSI_W1C_ENB0 (0x00011F0000013CF0ull)
+#define CVMX_PEXP_SLI_MSI_W1C_ENB1 (0x00011F0000013D00ull)
+#define CVMX_PEXP_SLI_MSI_W1C_ENB2 (0x00011F0000013D10ull)
+#define CVMX_PEXP_SLI_MSI_W1C_ENB3 (0x00011F0000013D20ull)
+#define CVMX_PEXP_SLI_MSI_W1S_ENB0 (0x00011F0000013D30ull)
+#define CVMX_PEXP_SLI_MSI_W1S_ENB1 (0x00011F0000013D40ull)
+#define CVMX_PEXP_SLI_MSI_W1S_ENB2 (0x00011F0000013D50ull)
+#define CVMX_PEXP_SLI_MSI_W1S_ENB3 (0x00011F0000013D60ull)
+#define CVMX_PEXP_SLI_MSI_WR_MAP   CVMX_PEXP_SLI_MSI_WR_MAP_FUNC()
+static inline u64 CVMX_PEXP_SLI_MSI_WR_MAP_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013C90ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013C90ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000023C90ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000023C90ull;
+	}
+	return 0x00011F0000023C90ull;
+}
+
+#define CVMX_PEXP_SLI_PCIE_MSI_RCV CVMX_PEXP_SLI_PCIE_MSI_RCV_FUNC()
+static inline u64 CVMX_PEXP_SLI_PCIE_MSI_RCV_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013CB0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013CB0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000023CB0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000023CB0ull;
+	}
+	return 0x00011F0000023CB0ull;
+}
+
+#define CVMX_PEXP_SLI_PCIE_MSI_RCV_B1 CVMX_PEXP_SLI_PCIE_MSI_RCV_B1_FUNC()
+static inline u64 CVMX_PEXP_SLI_PCIE_MSI_RCV_B1_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010650ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010650ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000028650ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000028650ull;
+	}
+	return 0x00011F0000028650ull;
+}
+
+#define CVMX_PEXP_SLI_PCIE_MSI_RCV_B2 CVMX_PEXP_SLI_PCIE_MSI_RCV_B2_FUNC()
+static inline u64 CVMX_PEXP_SLI_PCIE_MSI_RCV_B2_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010660ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010660ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000028660ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000028660ull;
+	}
+	return 0x00011F0000028660ull;
+}
+
+#define CVMX_PEXP_SLI_PCIE_MSI_RCV_B3 CVMX_PEXP_SLI_PCIE_MSI_RCV_B3_FUNC()
+static inline u64 CVMX_PEXP_SLI_PCIE_MSI_RCV_B3_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010670ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010670ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000028670ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000028670ull;
+	}
+	return 0x00011F0000028670ull;
+}
+
+static inline u64 CVMX_PEXP_SLI_PKTX_CNTS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000012400ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000012400ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000100B0ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000100B0ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F00000100B0ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_PEXP_SLI_PKTX_ERROR_INFO(offset) (0x00011F00000100C0ull + ((offset) & 63) * 0x20000ull)
+static inline u64 CVMX_PEXP_SLI_PKTX_INPUT_CONTROL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000014000ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000010000ull + (offset) * 0x20000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010000ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F0000010000ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_PEXP_SLI_PKTX_INSTR_BADDR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000012800ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000012800ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000010010ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010010ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F0000010010ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_PEXP_SLI_PKTX_INSTR_BAOFF_DBELL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000012C00ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000012C00ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000010020ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010020ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F0000010020ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_PEXP_SLI_PKTX_INSTR_FIFO_RSIZE(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013000ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013000ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000010030ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010030ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F0000010030ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_PEXP_SLI_PKTX_INSTR_HEADER(offset) (0x00011F0000013400ull + ((offset) & 31) * 16)
+static inline u64 CVMX_PEXP_SLI_PKTX_INT_LEVELS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000014400ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000100A0ull + (offset) * 0x20000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000100A0ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F00000100A0ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_PEXP_SLI_PKTX_IN_BP(offset)    (0x00011F0000013800ull + ((offset) & 31) * 16)
+#define CVMX_PEXP_SLI_PKTX_MBOX_INT(offset) (0x00011F0000010210ull + ((offset) & 63) * 0x20000ull)
+static inline u64 CVMX_PEXP_SLI_PKTX_OUTPUT_CONTROL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000014800ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000010050ull + (offset) * 0x20000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010050ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F0000010050ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_PEXP_SLI_PKTX_OUT_SIZE(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010C00ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010C00ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000010060ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010060ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F0000010060ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_PEXP_SLI_PKTX_PF_VF_MBOX_SIGX(offset, block_id)                                       \
+	(0x00011F0000010200ull + (((offset) & 1) + ((block_id) & 63) * 0x4000ull) * 8)
+static inline u64 CVMX_PEXP_SLI_PKTX_SLIST_BADDR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000011400ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000011400ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000010070ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010070ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F0000010070ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_PEXP_SLI_PKTX_SLIST_BAOFF_DBELL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000011800ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000011800ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000010080ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010080ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F0000010080ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_PEXP_SLI_PKTX_SLIST_FIFO_RSIZE(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000011C00ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000011C00ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000010090ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010090ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F0000010090ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_PEXP_SLI_PKTX_VF_INT_SUM(offset) (0x00011F00000100D0ull + ((offset) & 63) * 0x20000ull)
+#define CVMX_PEXP_SLI_PKTX_VF_SIG(offset)     (0x00011F0000014C00ull + ((offset) & 63) * 16)
+#define CVMX_PEXP_SLI_PKT_BIST_STATUS	      (0x00011F0000029220ull)
+#define CVMX_PEXP_SLI_PKT_CNT_INT	      CVMX_PEXP_SLI_PKT_CNT_INT_FUNC()
+static inline u64 CVMX_PEXP_SLI_PKT_CNT_INT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000011130ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000011130ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000029130ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000029130ull;
+	}
+	return 0x00011F0000029130ull;
+}
+
+#define CVMX_PEXP_SLI_PKT_CNT_INT_ENB	(0x00011F0000011150ull)
+#define CVMX_PEXP_SLI_PKT_CTL		(0x00011F0000011220ull)
+#define CVMX_PEXP_SLI_PKT_DATA_OUT_ES	(0x00011F00000110B0ull)
+#define CVMX_PEXP_SLI_PKT_DATA_OUT_NS	(0x00011F00000110A0ull)
+#define CVMX_PEXP_SLI_PKT_DATA_OUT_ROR	(0x00011F0000011090ull)
+#define CVMX_PEXP_SLI_PKT_DPADDR	(0x00011F0000011080ull)
+#define CVMX_PEXP_SLI_PKT_GBL_CONTROL	(0x00011F0000029210ull)
+#define CVMX_PEXP_SLI_PKT_INPUT_CONTROL (0x00011F0000011170ull)
+#define CVMX_PEXP_SLI_PKT_INSTR_ENB	(0x00011F0000011000ull)
+#define CVMX_PEXP_SLI_PKT_INSTR_RD_SIZE (0x00011F00000111A0ull)
+#define CVMX_PEXP_SLI_PKT_INSTR_SIZE	(0x00011F0000011020ull)
+#define CVMX_PEXP_SLI_PKT_INT		CVMX_PEXP_SLI_PKT_INT_FUNC()
+static inline u64 CVMX_PEXP_SLI_PKT_INT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000011160ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000029160ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000029160ull;
+	}
+	return 0x00011F0000029160ull;
+}
+
+#define CVMX_PEXP_SLI_PKT_INT_LEVELS (0x00011F0000011120ull)
+#define CVMX_PEXP_SLI_PKT_IN_BP	     (0x00011F0000011210ull)
+static inline u64 CVMX_PEXP_SLI_PKT_IN_DONEX_CNTS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000012000ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000012000ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000010040ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010040ull + (offset) * 0x20000ull;
+	}
+	return 0x00011F0000010040ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_PEXP_SLI_PKT_IN_INSTR_COUNTS CVMX_PEXP_SLI_PKT_IN_INSTR_COUNTS_FUNC()
+static inline u64 CVMX_PEXP_SLI_PKT_IN_INSTR_COUNTS_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000011200ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000011200ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000029200ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000029200ull;
+	}
+	return 0x00011F0000029200ull;
+}
+
+#define CVMX_PEXP_SLI_PKT_IN_INT CVMX_PEXP_SLI_PKT_IN_INT_FUNC()
+static inline u64 CVMX_PEXP_SLI_PKT_IN_INT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000011150ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000029150ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000029150ull;
+	}
+	return 0x00011F0000029150ull;
+}
+
+#define CVMX_PEXP_SLI_PKT_IN_JABBER    (0x00011F0000029170ull)
+#define CVMX_PEXP_SLI_PKT_IN_PCIE_PORT (0x00011F00000111B0ull)
+#define CVMX_PEXP_SLI_PKT_IPTR	       (0x00011F0000011070ull)
+#define CVMX_PEXP_SLI_PKT_MAC0_SIG0    (0x00011F0000011300ull)
+#define CVMX_PEXP_SLI_PKT_MAC0_SIG1    (0x00011F0000011310ull)
+#define CVMX_PEXP_SLI_PKT_MAC1_SIG0    (0x00011F0000011320ull)
+#define CVMX_PEXP_SLI_PKT_MAC1_SIG1    (0x00011F0000011330ull)
+#define CVMX_PEXP_SLI_PKT_MACX_PFX_RINFO(offset, block_id)                                         \
+	(0x00011F0000029030ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_PEXP_SLI_PKT_MACX_RINFO(offset) (0x00011F0000011030ull + ((offset) & 3) * 16)
+#define CVMX_PEXP_SLI_PKT_MEM_CTL	     CVMX_PEXP_SLI_PKT_MEM_CTL_FUNC()
+static inline u64 CVMX_PEXP_SLI_PKT_MEM_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000011120ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000029120ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000029120ull;
+	}
+	return 0x00011F0000029120ull;
+}
+
+#define CVMX_PEXP_SLI_PKT_OUTPUT_WMARK CVMX_PEXP_SLI_PKT_OUTPUT_WMARK_FUNC()
+static inline u64 CVMX_PEXP_SLI_PKT_OUTPUT_WMARK_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000011180ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000011180ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000029180ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000029180ull;
+	}
+	return 0x00011F0000029180ull;
+}
+
+#define CVMX_PEXP_SLI_PKT_OUT_BMODE	 (0x00011F00000110D0ull)
+#define CVMX_PEXP_SLI_PKT_OUT_BP_EN	 (0x00011F0000011240ull)
+#define CVMX_PEXP_SLI_PKT_OUT_BP_EN2_W1C (0x00011F0000029290ull)
+#define CVMX_PEXP_SLI_PKT_OUT_BP_EN2_W1S (0x00011F0000029270ull)
+#define CVMX_PEXP_SLI_PKT_OUT_BP_EN_W1C	 (0x00011F0000029280ull)
+#define CVMX_PEXP_SLI_PKT_OUT_BP_EN_W1S	 (0x00011F0000029260ull)
+#define CVMX_PEXP_SLI_PKT_OUT_ENB	 (0x00011F0000011010ull)
+#define CVMX_PEXP_SLI_PKT_PCIE_PORT	 (0x00011F00000110E0ull)
+#define CVMX_PEXP_SLI_PKT_PKIND_VALID	 (0x00011F0000029190ull)
+#define CVMX_PEXP_SLI_PKT_PORT_IN_RST	 (0x00011F00000111F0ull)
+#define CVMX_PEXP_SLI_PKT_RING_RST	 CVMX_PEXP_SLI_PKT_RING_RST_FUNC()
+static inline u64 CVMX_PEXP_SLI_PKT_RING_RST_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000111E0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000291E0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000291E0ull;
+	}
+	return 0x00011F00000291E0ull;
+}
+
+#define CVMX_PEXP_SLI_PKT_SLIST_ES  (0x00011F0000011050ull)
+#define CVMX_PEXP_SLI_PKT_SLIST_NS  (0x00011F0000011040ull)
+#define CVMX_PEXP_SLI_PKT_SLIST_ROR (0x00011F0000011030ull)
+#define CVMX_PEXP_SLI_PKT_TIME_INT  CVMX_PEXP_SLI_PKT_TIME_INT_FUNC()
+static inline u64 CVMX_PEXP_SLI_PKT_TIME_INT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000011140ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000011140ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000029140ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000029140ull;
+	}
+	return 0x00011F0000029140ull;
+}
+
+#define CVMX_PEXP_SLI_PKT_TIME_INT_ENB	  (0x00011F0000011160ull)
+#define CVMX_PEXP_SLI_PORTX_PKIND(offset) (0x00011F0000010800ull + ((offset) & 31) * 16)
+static inline u64 CVMX_PEXP_SLI_S2M_PORTX_CTL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013D80ull + (offset) * 16;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013D80ull + (offset) * 16;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000013D80ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000013D80ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000023D80ull + (offset) * 16;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000023D80ull + (offset) * 16;
+	}
+	return 0x00011F0000023D80ull + (offset) * 16;
+}
+
+#define CVMX_PEXP_SLI_SCRATCH_1 CVMX_PEXP_SLI_SCRATCH_1_FUNC()
+static inline u64 CVMX_PEXP_SLI_SCRATCH_1_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000103C0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000103C0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000283C0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000283C0ull;
+	}
+	return 0x00011F00000283C0ull;
+}
+
+#define CVMX_PEXP_SLI_SCRATCH_2 CVMX_PEXP_SLI_SCRATCH_2_FUNC()
+static inline u64 CVMX_PEXP_SLI_SCRATCH_2_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000103D0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000103D0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000283D0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000283D0ull;
+	}
+	return 0x00011F00000283D0ull;
+}
+
+#define CVMX_PEXP_SLI_STATE1 CVMX_PEXP_SLI_STATE1_FUNC()
+static inline u64 CVMX_PEXP_SLI_STATE1_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010620ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010620ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000028620ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000028620ull;
+	}
+	return 0x00011F0000028620ull;
+}
+
+#define CVMX_PEXP_SLI_STATE2 CVMX_PEXP_SLI_STATE2_FUNC()
+static inline u64 CVMX_PEXP_SLI_STATE2_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010630ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010630ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000028630ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000028630ull;
+	}
+	return 0x00011F0000028630ull;
+}
+
+#define CVMX_PEXP_SLI_STATE3 CVMX_PEXP_SLI_STATE3_FUNC()
+static inline u64 CVMX_PEXP_SLI_STATE3_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000010640ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000010640ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000028640ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000028640ull;
+	}
+	return 0x00011F0000028640ull;
+}
+
+#define CVMX_PEXP_SLI_TX_PIPE	 (0x00011F0000011230ull)
+#define CVMX_PEXP_SLI_WINDOW_CTL CVMX_PEXP_SLI_WINDOW_CTL_FUNC()
+static inline u64 CVMX_PEXP_SLI_WINDOW_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000102E0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F00000102E0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F00000282E0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F00000282E0ull;
+	}
+	return 0x00011F00000282E0ull;
+}
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pip-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-pip-defs.h
new file mode 100644
index 0000000..574e80b
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pip-defs.h
@@ -0,0 +1,3040 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon pip.
+ */
+
+#ifndef __CVMX_PIP_DEFS_H__
+#define __CVMX_PIP_DEFS_H__
+
+#define CVMX_PIP_ALT_SKIP_CFGX(offset)	     (0x00011800A0002A00ull + ((offset) & 3) * 8)
+#define CVMX_PIP_BCK_PRS		     (0x00011800A0000038ull)
+#define CVMX_PIP_BIST_STATUS		     (0x00011800A0000000ull)
+#define CVMX_PIP_BSEL_EXT_CFGX(offset)	     (0x00011800A0002800ull + ((offset) & 3) * 16)
+#define CVMX_PIP_BSEL_EXT_POSX(offset)	     (0x00011800A0002808ull + ((offset) & 3) * 16)
+#define CVMX_PIP_BSEL_TBL_ENTX(offset)	     (0x00011800A0003000ull + ((offset) & 511) * 8)
+#define CVMX_PIP_CLKEN			     (0x00011800A0000040ull)
+#define CVMX_PIP_CRC_CTLX(offset)	     (0x00011800A0000040ull + ((offset) & 1) * 8)
+#define CVMX_PIP_CRC_IVX(offset)	     (0x00011800A0000050ull + ((offset) & 1) * 8)
+#define CVMX_PIP_DEC_IPSECX(offset)	     (0x00011800A0000080ull + ((offset) & 3) * 8)
+#define CVMX_PIP_DSA_SRC_GRP		     (0x00011800A0000190ull)
+#define CVMX_PIP_DSA_VID_GRP		     (0x00011800A0000198ull)
+#define CVMX_PIP_FRM_LEN_CHKX(offset)	     (0x00011800A0000180ull + ((offset) & 1) * 8)
+#define CVMX_PIP_GBL_CFG		     (0x00011800A0000028ull)
+#define CVMX_PIP_GBL_CTL		     (0x00011800A0000020ull)
+#define CVMX_PIP_HG_PRI_QOS		     (0x00011800A00001A0ull)
+#define CVMX_PIP_INT_EN			     (0x00011800A0000010ull)
+#define CVMX_PIP_INT_REG		     (0x00011800A0000008ull)
+#define CVMX_PIP_IP_OFFSET		     (0x00011800A0000060ull)
+#define CVMX_PIP_PRI_TBLX(offset)	     (0x00011800A0004000ull + ((offset) & 255) * 8)
+#define CVMX_PIP_PRT_CFGBX(offset)	     (0x00011800A0008000ull + ((offset) & 63) * 8)
+#define CVMX_PIP_PRT_CFGX(offset)	     (0x00011800A0000200ull + ((offset) & 63) * 8)
+#define CVMX_PIP_PRT_TAGX(offset)	     (0x00011800A0000400ull + ((offset) & 63) * 8)
+#define CVMX_PIP_QOS_DIFFX(offset)	     (0x00011800A0000600ull + ((offset) & 63) * 8)
+#define CVMX_PIP_QOS_VLANX(offset)	     (0x00011800A00000C0ull + ((offset) & 7) * 8)
+#define CVMX_PIP_QOS_WATCHX(offset)	     (0x00011800A0000100ull + ((offset) & 7) * 8)
+#define CVMX_PIP_RAW_WORD		     (0x00011800A00000B0ull)
+#define CVMX_PIP_SFT_RST		     (0x00011800A0000030ull)
+#define CVMX_PIP_STAT0_PRTX(offset)	     (0x00011800A0000800ull + ((offset) & 63) * 80)
+#define CVMX_PIP_STAT0_X(offset)	     (0x00011800A0040000ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT10_PRTX(offset)	     (0x00011800A0001480ull + ((offset) & 63) * 16)
+#define CVMX_PIP_STAT10_X(offset)	     (0x00011800A0040050ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT11_PRTX(offset)	     (0x00011800A0001488ull + ((offset) & 63) * 16)
+#define CVMX_PIP_STAT11_X(offset)	     (0x00011800A0040058ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT1_PRTX(offset)	     (0x00011800A0000808ull + ((offset) & 63) * 80)
+#define CVMX_PIP_STAT1_X(offset)	     (0x00011800A0040008ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT2_PRTX(offset)	     (0x00011800A0000810ull + ((offset) & 63) * 80)
+#define CVMX_PIP_STAT2_X(offset)	     (0x00011800A0040010ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT3_PRTX(offset)	     (0x00011800A0000818ull + ((offset) & 63) * 80)
+#define CVMX_PIP_STAT3_X(offset)	     (0x00011800A0040018ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT4_PRTX(offset)	     (0x00011800A0000820ull + ((offset) & 63) * 80)
+#define CVMX_PIP_STAT4_X(offset)	     (0x00011800A0040020ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT5_PRTX(offset)	     (0x00011800A0000828ull + ((offset) & 63) * 80)
+#define CVMX_PIP_STAT5_X(offset)	     (0x00011800A0040028ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT6_PRTX(offset)	     (0x00011800A0000830ull + ((offset) & 63) * 80)
+#define CVMX_PIP_STAT6_X(offset)	     (0x00011800A0040030ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT7_PRTX(offset)	     (0x00011800A0000838ull + ((offset) & 63) * 80)
+#define CVMX_PIP_STAT7_X(offset)	     (0x00011800A0040038ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT8_PRTX(offset)	     (0x00011800A0000840ull + ((offset) & 63) * 80)
+#define CVMX_PIP_STAT8_X(offset)	     (0x00011800A0040040ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT9_PRTX(offset)	     (0x00011800A0000848ull + ((offset) & 63) * 80)
+#define CVMX_PIP_STAT9_X(offset)	     (0x00011800A0040048ull + ((offset) & 63) * 128)
+#define CVMX_PIP_STAT_CTL		     (0x00011800A0000018ull)
+#define CVMX_PIP_STAT_INB_ERRSX(offset)	     (0x00011800A0001A10ull + ((offset) & 63) * 32)
+#define CVMX_PIP_STAT_INB_ERRS_PKNDX(offset) (0x00011800A0020010ull + ((offset) & 63) * 32)
+#define CVMX_PIP_STAT_INB_OCTSX(offset)	     (0x00011800A0001A08ull + ((offset) & 63) * 32)
+#define CVMX_PIP_STAT_INB_OCTS_PKNDX(offset) (0x00011800A0020008ull + ((offset) & 63) * 32)
+#define CVMX_PIP_STAT_INB_PKTSX(offset)	     (0x00011800A0001A00ull + ((offset) & 63) * 32)
+#define CVMX_PIP_STAT_INB_PKTS_PKNDX(offset) (0x00011800A0020000ull + ((offset) & 63) * 32)
+#define CVMX_PIP_SUB_PKIND_FCSX(offset)	     (0x00011800A0080000ull)
+#define CVMX_PIP_TAG_INCX(offset)	     (0x00011800A0001800ull + ((offset) & 63) * 8)
+#define CVMX_PIP_TAG_MASK		     (0x00011800A0000070ull)
+#define CVMX_PIP_TAG_SECRET		     (0x00011800A0000068ull)
+#define CVMX_PIP_TODO_ENTRY		     (0x00011800A0000078ull)
+#define CVMX_PIP_VLAN_ETYPESX(offset)	     (0x00011800A00001C0ull + ((offset) & 1) * 8)
+#define CVMX_PIP_XSTAT0_PRTX(offset)	     (0x00011800A0002000ull + ((offset) & 63) * 80 - 80 * 40)
+#define CVMX_PIP_XSTAT10_PRTX(offset)	     (0x00011800A0001700ull + ((offset) & 63) * 16 - 16 * 40)
+#define CVMX_PIP_XSTAT11_PRTX(offset)	     (0x00011800A0001708ull + ((offset) & 63) * 16 - 16 * 40)
+#define CVMX_PIP_XSTAT1_PRTX(offset)	     (0x00011800A0002008ull + ((offset) & 63) * 80 - 80 * 40)
+#define CVMX_PIP_XSTAT2_PRTX(offset)	     (0x00011800A0002010ull + ((offset) & 63) * 80 - 80 * 40)
+#define CVMX_PIP_XSTAT3_PRTX(offset)	     (0x00011800A0002018ull + ((offset) & 63) * 80 - 80 * 40)
+#define CVMX_PIP_XSTAT4_PRTX(offset)	     (0x00011800A0002020ull + ((offset) & 63) * 80 - 80 * 40)
+#define CVMX_PIP_XSTAT5_PRTX(offset)	     (0x00011800A0002028ull + ((offset) & 63) * 80 - 80 * 40)
+#define CVMX_PIP_XSTAT6_PRTX(offset)	     (0x00011800A0002030ull + ((offset) & 63) * 80 - 80 * 40)
+#define CVMX_PIP_XSTAT7_PRTX(offset)	     (0x00011800A0002038ull + ((offset) & 63) * 80 - 80 * 40)
+#define CVMX_PIP_XSTAT8_PRTX(offset)	     (0x00011800A0002040ull + ((offset) & 63) * 80 - 80 * 40)
+#define CVMX_PIP_XSTAT9_PRTX(offset)	     (0x00011800A0002048ull + ((offset) & 63) * 80 - 80 * 40)
+
+/**
+ * cvmx_pip_alt_skip_cfg#
+ *
+ * Notes:
+ * The actual SKIP I determined by HW is based on the packet contents.  BIT0 and
+ * BIT1 make up a two value value that the selects the skip value as follows.
+ *
+ *    lookup_value = LEN ? ( packet_in_bits[BIT1], packet_in_bits[BIT0] ) : ( 0, packet_in_bits[BIT0] );
+ *    SKIP I       = lookup_value == 3 ? SKIP3 :
+ *                   lookup_value == 2 ? SKIP2 :
+ *                   lookup_value == 1 ? SKIP1 :
+ *                   PIP_PRT_CFG<pknd>[SKIP];
+ */
+union cvmx_pip_alt_skip_cfgx {
+	u64 u64;
+	struct cvmx_pip_alt_skip_cfgx_s {
+		u64 reserved_57_63 : 7;
+		u64 len : 1;
+		u64 reserved_46_55 : 10;
+		u64 bit1 : 6;
+		u64 reserved_38_39 : 2;
+		u64 bit0 : 6;
+		u64 reserved_23_31 : 9;
+		u64 skip3 : 7;
+		u64 reserved_15_15 : 1;
+		u64 skip2 : 7;
+		u64 reserved_7_7 : 1;
+		u64 skip1 : 7;
+	} s;
+	struct cvmx_pip_alt_skip_cfgx_s cn61xx;
+	struct cvmx_pip_alt_skip_cfgx_s cn66xx;
+	struct cvmx_pip_alt_skip_cfgx_s cn68xx;
+	struct cvmx_pip_alt_skip_cfgx_s cn70xx;
+	struct cvmx_pip_alt_skip_cfgx_s cn70xxp1;
+	struct cvmx_pip_alt_skip_cfgx_s cnf71xx;
+};
+
+typedef union cvmx_pip_alt_skip_cfgx cvmx_pip_alt_skip_cfgx_t;
+
+/**
+ * cvmx_pip_bck_prs
+ *
+ * When to assert backpressure based on the todo list filling up
+ *
+ */
+union cvmx_pip_bck_prs {
+	u64 u64;
+	struct cvmx_pip_bck_prs_s {
+		u64 bckprs : 1;
+		u64 reserved_13_62 : 50;
+		u64 hiwater : 5;
+		u64 reserved_5_7 : 3;
+		u64 lowater : 5;
+	} s;
+	struct cvmx_pip_bck_prs_s cn38xx;
+	struct cvmx_pip_bck_prs_s cn38xxp2;
+	struct cvmx_pip_bck_prs_s cn56xx;
+	struct cvmx_pip_bck_prs_s cn56xxp1;
+	struct cvmx_pip_bck_prs_s cn58xx;
+	struct cvmx_pip_bck_prs_s cn58xxp1;
+	struct cvmx_pip_bck_prs_s cn61xx;
+	struct cvmx_pip_bck_prs_s cn63xx;
+	struct cvmx_pip_bck_prs_s cn63xxp1;
+	struct cvmx_pip_bck_prs_s cn66xx;
+	struct cvmx_pip_bck_prs_s cn68xx;
+	struct cvmx_pip_bck_prs_s cn68xxp1;
+	struct cvmx_pip_bck_prs_s cn70xx;
+	struct cvmx_pip_bck_prs_s cn70xxp1;
+	struct cvmx_pip_bck_prs_s cnf71xx;
+};
+
+typedef union cvmx_pip_bck_prs cvmx_pip_bck_prs_t;
+
+/**
+ * cvmx_pip_bist_status
+ *
+ * PIP_BIST_STATUS = PIP's BIST Results
+ *
+ */
+union cvmx_pip_bist_status {
+	u64 u64;
+	struct cvmx_pip_bist_status_s {
+		u64 reserved_22_63 : 42;
+		u64 bist : 22;
+	} s;
+	struct cvmx_pip_bist_status_cn30xx {
+		u64 reserved_18_63 : 46;
+		u64 bist : 18;
+	} cn30xx;
+	struct cvmx_pip_bist_status_cn30xx cn31xx;
+	struct cvmx_pip_bist_status_cn30xx cn38xx;
+	struct cvmx_pip_bist_status_cn30xx cn38xxp2;
+	struct cvmx_pip_bist_status_cn50xx {
+		u64 reserved_17_63 : 47;
+		u64 bist : 17;
+	} cn50xx;
+	struct cvmx_pip_bist_status_cn30xx cn52xx;
+	struct cvmx_pip_bist_status_cn30xx cn52xxp1;
+	struct cvmx_pip_bist_status_cn30xx cn56xx;
+	struct cvmx_pip_bist_status_cn30xx cn56xxp1;
+	struct cvmx_pip_bist_status_cn30xx cn58xx;
+	struct cvmx_pip_bist_status_cn30xx cn58xxp1;
+	struct cvmx_pip_bist_status_cn61xx {
+		u64 reserved_20_63 : 44;
+		u64 bist : 20;
+	} cn61xx;
+	struct cvmx_pip_bist_status_cn30xx cn63xx;
+	struct cvmx_pip_bist_status_cn30xx cn63xxp1;
+	struct cvmx_pip_bist_status_cn61xx cn66xx;
+	struct cvmx_pip_bist_status_s cn68xx;
+	struct cvmx_pip_bist_status_cn61xx cn68xxp1;
+	struct cvmx_pip_bist_status_cn61xx cn70xx;
+	struct cvmx_pip_bist_status_cn61xx cn70xxp1;
+	struct cvmx_pip_bist_status_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pip_bist_status cvmx_pip_bist_status_t;
+
+/**
+ * cvmx_pip_bsel_ext_cfg#
+ *
+ * tag, offset, and skip values to be used when using the corresponding extractor.
+ *
+ */
+union cvmx_pip_bsel_ext_cfgx {
+	u64 u64;
+	struct cvmx_pip_bsel_ext_cfgx_s {
+		u64 reserved_56_63 : 8;
+		u64 upper_tag : 16;
+		u64 tag : 8;
+		u64 reserved_25_31 : 7;
+		u64 offset : 9;
+		u64 reserved_7_15 : 9;
+		u64 skip : 7;
+	} s;
+	struct cvmx_pip_bsel_ext_cfgx_s cn61xx;
+	struct cvmx_pip_bsel_ext_cfgx_s cn68xx;
+	struct cvmx_pip_bsel_ext_cfgx_s cn70xx;
+	struct cvmx_pip_bsel_ext_cfgx_s cn70xxp1;
+	struct cvmx_pip_bsel_ext_cfgx_s cnf71xx;
+};
+
+typedef union cvmx_pip_bsel_ext_cfgx cvmx_pip_bsel_ext_cfgx_t;
+
+/**
+ * cvmx_pip_bsel_ext_pos#
+ *
+ * bit positions and valids to be used when using the corresponding extractor.
+ *
+ */
+union cvmx_pip_bsel_ext_posx {
+	u64 u64;
+	struct cvmx_pip_bsel_ext_posx_s {
+		u64 pos7_val : 1;
+		u64 pos7 : 7;
+		u64 pos6_val : 1;
+		u64 pos6 : 7;
+		u64 pos5_val : 1;
+		u64 pos5 : 7;
+		u64 pos4_val : 1;
+		u64 pos4 : 7;
+		u64 pos3_val : 1;
+		u64 pos3 : 7;
+		u64 pos2_val : 1;
+		u64 pos2 : 7;
+		u64 pos1_val : 1;
+		u64 pos1 : 7;
+		u64 pos0_val : 1;
+		u64 pos0 : 7;
+	} s;
+	struct cvmx_pip_bsel_ext_posx_s cn61xx;
+	struct cvmx_pip_bsel_ext_posx_s cn68xx;
+	struct cvmx_pip_bsel_ext_posx_s cn70xx;
+	struct cvmx_pip_bsel_ext_posx_s cn70xxp1;
+	struct cvmx_pip_bsel_ext_posx_s cnf71xx;
+};
+
+typedef union cvmx_pip_bsel_ext_posx cvmx_pip_bsel_ext_posx_t;
+
+/**
+ * cvmx_pip_bsel_tbl_ent#
+ *
+ * PIP_BSEL_TBL_ENTX = Entry for the extractor table
+ *
+ */
+union cvmx_pip_bsel_tbl_entx {
+	u64 u64;
+	struct cvmx_pip_bsel_tbl_entx_s {
+		u64 tag_en : 1;
+		u64 grp_en : 1;
+		u64 tt_en : 1;
+		u64 qos_en : 1;
+		u64 reserved_40_59 : 20;
+		u64 tag : 8;
+		u64 reserved_22_31 : 10;
+		u64 grp : 6;
+		u64 reserved_10_15 : 6;
+		u64 tt : 2;
+		u64 reserved_3_7 : 5;
+		u64 qos : 3;
+	} s;
+	struct cvmx_pip_bsel_tbl_entx_cn61xx {
+		u64 tag_en : 1;
+		u64 grp_en : 1;
+		u64 tt_en : 1;
+		u64 qos_en : 1;
+		u64 reserved_40_59 : 20;
+		u64 tag : 8;
+		u64 reserved_20_31 : 12;
+		u64 grp : 4;
+		u64 reserved_10_15 : 6;
+		u64 tt : 2;
+		u64 reserved_3_7 : 5;
+		u64 qos : 3;
+	} cn61xx;
+	struct cvmx_pip_bsel_tbl_entx_s cn68xx;
+	struct cvmx_pip_bsel_tbl_entx_cn61xx cn70xx;
+	struct cvmx_pip_bsel_tbl_entx_cn61xx cn70xxp1;
+	struct cvmx_pip_bsel_tbl_entx_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pip_bsel_tbl_entx cvmx_pip_bsel_tbl_entx_t;
+
+/**
+ * cvmx_pip_clken
+ */
+union cvmx_pip_clken {
+	u64 u64;
+	struct cvmx_pip_clken_s {
+		u64 reserved_1_63 : 63;
+		u64 clken : 1;
+	} s;
+	struct cvmx_pip_clken_s cn61xx;
+	struct cvmx_pip_clken_s cn63xx;
+	struct cvmx_pip_clken_s cn63xxp1;
+	struct cvmx_pip_clken_s cn66xx;
+	struct cvmx_pip_clken_s cn68xx;
+	struct cvmx_pip_clken_s cn68xxp1;
+	struct cvmx_pip_clken_s cn70xx;
+	struct cvmx_pip_clken_s cn70xxp1;
+	struct cvmx_pip_clken_s cnf71xx;
+};
+
+typedef union cvmx_pip_clken cvmx_pip_clken_t;
+
+/**
+ * cvmx_pip_crc_ctl#
+ *
+ * PIP_CRC_CTL = PIP CRC Control Register
+ *
+ * Controls datapath reflection when calculating CRC
+ */
+union cvmx_pip_crc_ctlx {
+	u64 u64;
+	struct cvmx_pip_crc_ctlx_s {
+		u64 reserved_2_63 : 62;
+		u64 invres : 1;
+		u64 reflect : 1;
+	} s;
+	struct cvmx_pip_crc_ctlx_s cn38xx;
+	struct cvmx_pip_crc_ctlx_s cn38xxp2;
+	struct cvmx_pip_crc_ctlx_s cn58xx;
+	struct cvmx_pip_crc_ctlx_s cn58xxp1;
+};
+
+typedef union cvmx_pip_crc_ctlx cvmx_pip_crc_ctlx_t;
+
+/**
+ * cvmx_pip_crc_iv#
+ *
+ * PIP_CRC_IV = PIP CRC IV Register
+ *
+ * Determines the IV used by the CRC algorithm
+ *
+ * Notes:
+ * * PIP_CRC_IV
+ * PIP_CRC_IV controls the initial state of the CRC algorithm.  Octane can
+ * support a wide range of CRC algorithms and as such, the IV must be
+ * carefully constructed to meet the specific algorithm.  The code below
+ * determines the value to program into Octane based on the algorthim's IV
+ * and width.  In the case of Octane, the width should always be 32.
+ *
+ * PIP_CRC_IV0 sets the IV for ports 0-15 while PIP_CRC_IV1 sets the IV for
+ * ports 16-31.
+ *
+ *  unsigned octane_crc_iv(unsigned algorithm_iv, unsigned poly, unsigned w)
+ *  [
+ *    int i;
+ *    int doit;
+ *    unsigned int current_val = algorithm_iv;
+ *
+ *    for(i = 0; i < w; i++) [
+ *      doit = current_val & 0x1;
+ *
+ *      if(doit) current_val ^= poly;
+ *      assert(!(current_val & 0x1));
+ *
+ *      current_val = (current_val >> 1) | (doit << (w-1));
+ *    ]
+ *
+ *    return current_val;
+ *  ]
+ */
+union cvmx_pip_crc_ivx {
+	u64 u64;
+	struct cvmx_pip_crc_ivx_s {
+		u64 reserved_32_63 : 32;
+		u64 iv : 32;
+	} s;
+	struct cvmx_pip_crc_ivx_s cn38xx;
+	struct cvmx_pip_crc_ivx_s cn38xxp2;
+	struct cvmx_pip_crc_ivx_s cn58xx;
+	struct cvmx_pip_crc_ivx_s cn58xxp1;
+};
+
+typedef union cvmx_pip_crc_ivx cvmx_pip_crc_ivx_t;
+
+/**
+ * cvmx_pip_dec_ipsec#
+ *
+ * PIP sets the dec_ipsec based on TCP or UDP destination port.
+ *
+ */
+union cvmx_pip_dec_ipsecx {
+	u64 u64;
+	struct cvmx_pip_dec_ipsecx_s {
+		u64 reserved_18_63 : 46;
+		u64 tcp : 1;
+		u64 udp : 1;
+		u64 dprt : 16;
+	} s;
+	struct cvmx_pip_dec_ipsecx_s cn30xx;
+	struct cvmx_pip_dec_ipsecx_s cn31xx;
+	struct cvmx_pip_dec_ipsecx_s cn38xx;
+	struct cvmx_pip_dec_ipsecx_s cn38xxp2;
+	struct cvmx_pip_dec_ipsecx_s cn50xx;
+	struct cvmx_pip_dec_ipsecx_s cn52xx;
+	struct cvmx_pip_dec_ipsecx_s cn52xxp1;
+	struct cvmx_pip_dec_ipsecx_s cn56xx;
+	struct cvmx_pip_dec_ipsecx_s cn56xxp1;
+	struct cvmx_pip_dec_ipsecx_s cn58xx;
+	struct cvmx_pip_dec_ipsecx_s cn58xxp1;
+	struct cvmx_pip_dec_ipsecx_s cn61xx;
+	struct cvmx_pip_dec_ipsecx_s cn63xx;
+	struct cvmx_pip_dec_ipsecx_s cn63xxp1;
+	struct cvmx_pip_dec_ipsecx_s cn66xx;
+	struct cvmx_pip_dec_ipsecx_s cn68xx;
+	struct cvmx_pip_dec_ipsecx_s cn68xxp1;
+	struct cvmx_pip_dec_ipsecx_s cn70xx;
+	struct cvmx_pip_dec_ipsecx_s cn70xxp1;
+	struct cvmx_pip_dec_ipsecx_s cnf71xx;
+};
+
+typedef union cvmx_pip_dec_ipsecx cvmx_pip_dec_ipsecx_t;
+
+/**
+ * cvmx_pip_dsa_src_grp
+ */
+union cvmx_pip_dsa_src_grp {
+	u64 u64;
+	struct cvmx_pip_dsa_src_grp_s {
+		u64 map15 : 4;
+		u64 map14 : 4;
+		u64 map13 : 4;
+		u64 map12 : 4;
+		u64 map11 : 4;
+		u64 map10 : 4;
+		u64 map9 : 4;
+		u64 map8 : 4;
+		u64 map7 : 4;
+		u64 map6 : 4;
+		u64 map5 : 4;
+		u64 map4 : 4;
+		u64 map3 : 4;
+		u64 map2 : 4;
+		u64 map1 : 4;
+		u64 map0 : 4;
+	} s;
+	struct cvmx_pip_dsa_src_grp_s cn52xx;
+	struct cvmx_pip_dsa_src_grp_s cn52xxp1;
+	struct cvmx_pip_dsa_src_grp_s cn56xx;
+	struct cvmx_pip_dsa_src_grp_s cn61xx;
+	struct cvmx_pip_dsa_src_grp_s cn63xx;
+	struct cvmx_pip_dsa_src_grp_s cn63xxp1;
+	struct cvmx_pip_dsa_src_grp_s cn66xx;
+	struct cvmx_pip_dsa_src_grp_s cn68xx;
+	struct cvmx_pip_dsa_src_grp_s cn68xxp1;
+	struct cvmx_pip_dsa_src_grp_s cn70xx;
+	struct cvmx_pip_dsa_src_grp_s cn70xxp1;
+	struct cvmx_pip_dsa_src_grp_s cnf71xx;
+};
+
+typedef union cvmx_pip_dsa_src_grp cvmx_pip_dsa_src_grp_t;
+
+/**
+ * cvmx_pip_dsa_vid_grp
+ */
+union cvmx_pip_dsa_vid_grp {
+	u64 u64;
+	struct cvmx_pip_dsa_vid_grp_s {
+		u64 map15 : 4;
+		u64 map14 : 4;
+		u64 map13 : 4;
+		u64 map12 : 4;
+		u64 map11 : 4;
+		u64 map10 : 4;
+		u64 map9 : 4;
+		u64 map8 : 4;
+		u64 map7 : 4;
+		u64 map6 : 4;
+		u64 map5 : 4;
+		u64 map4 : 4;
+		u64 map3 : 4;
+		u64 map2 : 4;
+		u64 map1 : 4;
+		u64 map0 : 4;
+	} s;
+	struct cvmx_pip_dsa_vid_grp_s cn52xx;
+	struct cvmx_pip_dsa_vid_grp_s cn52xxp1;
+	struct cvmx_pip_dsa_vid_grp_s cn56xx;
+	struct cvmx_pip_dsa_vid_grp_s cn61xx;
+	struct cvmx_pip_dsa_vid_grp_s cn63xx;
+	struct cvmx_pip_dsa_vid_grp_s cn63xxp1;
+	struct cvmx_pip_dsa_vid_grp_s cn66xx;
+	struct cvmx_pip_dsa_vid_grp_s cn68xx;
+	struct cvmx_pip_dsa_vid_grp_s cn68xxp1;
+	struct cvmx_pip_dsa_vid_grp_s cn70xx;
+	struct cvmx_pip_dsa_vid_grp_s cn70xxp1;
+	struct cvmx_pip_dsa_vid_grp_s cnf71xx;
+};
+
+typedef union cvmx_pip_dsa_vid_grp cvmx_pip_dsa_vid_grp_t;
+
+/**
+ * cvmx_pip_frm_len_chk#
+ *
+ * Notes:
+ * PIP_FRM_LEN_CHK0 is used for packets on packet interface0, PCI, PCI RAW, and PKO loopback ports.
+ * PIP_FRM_LEN_CHK1 is unused.
+ */
+union cvmx_pip_frm_len_chkx {
+	u64 u64;
+	struct cvmx_pip_frm_len_chkx_s {
+		u64 reserved_32_63 : 32;
+		u64 maxlen : 16;
+		u64 minlen : 16;
+	} s;
+	struct cvmx_pip_frm_len_chkx_s cn50xx;
+	struct cvmx_pip_frm_len_chkx_s cn52xx;
+	struct cvmx_pip_frm_len_chkx_s cn52xxp1;
+	struct cvmx_pip_frm_len_chkx_s cn56xx;
+	struct cvmx_pip_frm_len_chkx_s cn56xxp1;
+	struct cvmx_pip_frm_len_chkx_s cn61xx;
+	struct cvmx_pip_frm_len_chkx_s cn63xx;
+	struct cvmx_pip_frm_len_chkx_s cn63xxp1;
+	struct cvmx_pip_frm_len_chkx_s cn66xx;
+	struct cvmx_pip_frm_len_chkx_s cn68xx;
+	struct cvmx_pip_frm_len_chkx_s cn68xxp1;
+	struct cvmx_pip_frm_len_chkx_s cn70xx;
+	struct cvmx_pip_frm_len_chkx_s cn70xxp1;
+	struct cvmx_pip_frm_len_chkx_s cnf71xx;
+};
+
+typedef union cvmx_pip_frm_len_chkx cvmx_pip_frm_len_chkx_t;
+
+/**
+ * cvmx_pip_gbl_cfg
+ *
+ * Global config information that applies to all ports.
+ *
+ */
+union cvmx_pip_gbl_cfg {
+	u64 u64;
+	struct cvmx_pip_gbl_cfg_s {
+		u64 reserved_19_63 : 45;
+		u64 tag_syn : 1;
+		u64 ip6_udp : 1;
+		u64 max_l2 : 1;
+		u64 reserved_11_15 : 5;
+		u64 raw_shf : 3;
+		u64 reserved_3_7 : 5;
+		u64 nip_shf : 3;
+	} s;
+	struct cvmx_pip_gbl_cfg_s cn30xx;
+	struct cvmx_pip_gbl_cfg_s cn31xx;
+	struct cvmx_pip_gbl_cfg_s cn38xx;
+	struct cvmx_pip_gbl_cfg_s cn38xxp2;
+	struct cvmx_pip_gbl_cfg_s cn50xx;
+	struct cvmx_pip_gbl_cfg_s cn52xx;
+	struct cvmx_pip_gbl_cfg_s cn52xxp1;
+	struct cvmx_pip_gbl_cfg_s cn56xx;
+	struct cvmx_pip_gbl_cfg_s cn56xxp1;
+	struct cvmx_pip_gbl_cfg_s cn58xx;
+	struct cvmx_pip_gbl_cfg_s cn58xxp1;
+	struct cvmx_pip_gbl_cfg_s cn61xx;
+	struct cvmx_pip_gbl_cfg_s cn63xx;
+	struct cvmx_pip_gbl_cfg_s cn63xxp1;
+	struct cvmx_pip_gbl_cfg_s cn66xx;
+	struct cvmx_pip_gbl_cfg_s cn68xx;
+	struct cvmx_pip_gbl_cfg_s cn68xxp1;
+	struct cvmx_pip_gbl_cfg_s cn70xx;
+	struct cvmx_pip_gbl_cfg_s cn70xxp1;
+	struct cvmx_pip_gbl_cfg_s cnf71xx;
+};
+
+typedef union cvmx_pip_gbl_cfg cvmx_pip_gbl_cfg_t;
+
+/**
+ * cvmx_pip_gbl_ctl
+ *
+ * Global control information.  These are the global checker enables for
+ * IPv4/IPv6 and TCP/UDP parsing.  The enables effect all ports.
+ */
+union cvmx_pip_gbl_ctl {
+	u64 u64;
+	struct cvmx_pip_gbl_ctl_s {
+		u64 reserved_29_63 : 35;
+		u64 egrp_dis : 1;
+		u64 ihmsk_dis : 1;
+		u64 dsa_grp_tvid : 1;
+		u64 dsa_grp_scmd : 1;
+		u64 dsa_grp_sid : 1;
+		u64 reserved_21_23 : 3;
+		u64 ring_en : 1;
+		u64 reserved_17_19 : 3;
+		u64 ignrs : 1;
+		u64 vs_wqe : 1;
+		u64 vs_qos : 1;
+		u64 l2_mal : 1;
+		u64 tcp_flag : 1;
+		u64 l4_len : 1;
+		u64 l4_chk : 1;
+		u64 l4_prt : 1;
+		u64 l4_mal : 1;
+		u64 reserved_6_7 : 2;
+		u64 ip6_eext : 2;
+		u64 ip4_opts : 1;
+		u64 ip_hop : 1;
+		u64 ip_mal : 1;
+		u64 ip_chk : 1;
+	} s;
+	struct cvmx_pip_gbl_ctl_cn30xx {
+		u64 reserved_17_63 : 47;
+		u64 ignrs : 1;
+		u64 vs_wqe : 1;
+		u64 vs_qos : 1;
+		u64 l2_mal : 1;
+		u64 tcp_flag : 1;
+		u64 l4_len : 1;
+		u64 l4_chk : 1;
+		u64 l4_prt : 1;
+		u64 l4_mal : 1;
+		u64 reserved_6_7 : 2;
+		u64 ip6_eext : 2;
+		u64 ip4_opts : 1;
+		u64 ip_hop : 1;
+		u64 ip_mal : 1;
+		u64 ip_chk : 1;
+	} cn30xx;
+	struct cvmx_pip_gbl_ctl_cn30xx cn31xx;
+	struct cvmx_pip_gbl_ctl_cn30xx cn38xx;
+	struct cvmx_pip_gbl_ctl_cn30xx cn38xxp2;
+	struct cvmx_pip_gbl_ctl_cn30xx cn50xx;
+	struct cvmx_pip_gbl_ctl_cn52xx {
+		u64 reserved_27_63 : 37;
+		u64 dsa_grp_tvid : 1;
+		u64 dsa_grp_scmd : 1;
+		u64 dsa_grp_sid : 1;
+		u64 reserved_21_23 : 3;
+		u64 ring_en : 1;
+		u64 reserved_17_19 : 3;
+		u64 ignrs : 1;
+		u64 vs_wqe : 1;
+		u64 vs_qos : 1;
+		u64 l2_mal : 1;
+		u64 tcp_flag : 1;
+		u64 l4_len : 1;
+		u64 l4_chk : 1;
+		u64 l4_prt : 1;
+		u64 l4_mal : 1;
+		u64 reserved_6_7 : 2;
+		u64 ip6_eext : 2;
+		u64 ip4_opts : 1;
+		u64 ip_hop : 1;
+		u64 ip_mal : 1;
+		u64 ip_chk : 1;
+	} cn52xx;
+	struct cvmx_pip_gbl_ctl_cn52xx cn52xxp1;
+	struct cvmx_pip_gbl_ctl_cn52xx cn56xx;
+	struct cvmx_pip_gbl_ctl_cn56xxp1 {
+		u64 reserved_21_63 : 43;
+		u64 ring_en : 1;
+		u64 reserved_17_19 : 3;
+		u64 ignrs : 1;
+		u64 vs_wqe : 1;
+		u64 vs_qos : 1;
+		u64 l2_mal : 1;
+		u64 tcp_flag : 1;
+		u64 l4_len : 1;
+		u64 l4_chk : 1;
+		u64 l4_prt : 1;
+		u64 l4_mal : 1;
+		u64 reserved_6_7 : 2;
+		u64 ip6_eext : 2;
+		u64 ip4_opts : 1;
+		u64 ip_hop : 1;
+		u64 ip_mal : 1;
+		u64 ip_chk : 1;
+	} cn56xxp1;
+	struct cvmx_pip_gbl_ctl_cn30xx cn58xx;
+	struct cvmx_pip_gbl_ctl_cn30xx cn58xxp1;
+	struct cvmx_pip_gbl_ctl_cn61xx {
+		u64 reserved_28_63 : 36;
+		u64 ihmsk_dis : 1;
+		u64 dsa_grp_tvid : 1;
+		u64 dsa_grp_scmd : 1;
+		u64 dsa_grp_sid : 1;
+		u64 reserved_21_23 : 3;
+		u64 ring_en : 1;
+		u64 reserved_17_19 : 3;
+		u64 ignrs : 1;
+		u64 vs_wqe : 1;
+		u64 vs_qos : 1;
+		u64 l2_mal : 1;
+		u64 tcp_flag : 1;
+		u64 l4_len : 1;
+		u64 l4_chk : 1;
+		u64 l4_prt : 1;
+		u64 l4_mal : 1;
+		u64 reserved_6_7 : 2;
+		u64 ip6_eext : 2;
+		u64 ip4_opts : 1;
+		u64 ip_hop : 1;
+		u64 ip_mal : 1;
+		u64 ip_chk : 1;
+	} cn61xx;
+	struct cvmx_pip_gbl_ctl_cn61xx cn63xx;
+	struct cvmx_pip_gbl_ctl_cn61xx cn63xxp1;
+	struct cvmx_pip_gbl_ctl_cn61xx cn66xx;
+	struct cvmx_pip_gbl_ctl_cn68xx {
+		u64 reserved_29_63 : 35;
+		u64 egrp_dis : 1;
+		u64 ihmsk_dis : 1;
+		u64 dsa_grp_tvid : 1;
+		u64 dsa_grp_scmd : 1;
+		u64 dsa_grp_sid : 1;
+		u64 reserved_17_23 : 7;
+		u64 ignrs : 1;
+		u64 vs_wqe : 1;
+		u64 vs_qos : 1;
+		u64 l2_mal : 1;
+		u64 tcp_flag : 1;
+		u64 l4_len : 1;
+		u64 l4_chk : 1;
+		u64 l4_prt : 1;
+		u64 l4_mal : 1;
+		u64 reserved_6_7 : 2;
+		u64 ip6_eext : 2;
+		u64 ip4_opts : 1;
+		u64 ip_hop : 1;
+		u64 ip_mal : 1;
+		u64 ip_chk : 1;
+	} cn68xx;
+	struct cvmx_pip_gbl_ctl_cn68xxp1 {
+		u64 reserved_28_63 : 36;
+		u64 ihmsk_dis : 1;
+		u64 dsa_grp_tvid : 1;
+		u64 dsa_grp_scmd : 1;
+		u64 dsa_grp_sid : 1;
+		u64 reserved_17_23 : 7;
+		u64 ignrs : 1;
+		u64 vs_wqe : 1;
+		u64 vs_qos : 1;
+		u64 l2_mal : 1;
+		u64 tcp_flag : 1;
+		u64 l4_len : 1;
+		u64 l4_chk : 1;
+		u64 l4_prt : 1;
+		u64 l4_mal : 1;
+		u64 reserved_6_7 : 2;
+		u64 ip6_eext : 2;
+		u64 ip4_opts : 1;
+		u64 ip_hop : 1;
+		u64 ip_mal : 1;
+		u64 ip_chk : 1;
+	} cn68xxp1;
+	struct cvmx_pip_gbl_ctl_cn61xx cn70xx;
+	struct cvmx_pip_gbl_ctl_cn61xx cn70xxp1;
+	struct cvmx_pip_gbl_ctl_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pip_gbl_ctl cvmx_pip_gbl_ctl_t;
+
+/**
+ * cvmx_pip_hg_pri_qos
+ *
+ * Notes:
+ * This register controls accesses to the HG_QOS_TABLE.  To write an entry of
+ * the table, write PIP_HG_PRI_QOS with PRI=table address, QOS=priority level,
+ * UP_QOS=1.  To read an entry of the table, write PIP_HG_PRI_QOS with
+ * PRI=table address, QOS=dont_carepriority level, UP_QOS=0 and then read
+ * PIP_HG_PRI_QOS.  The table data will be in PIP_HG_PRI_QOS[QOS].
+ */
+union cvmx_pip_hg_pri_qos {
+	u64 u64;
+	struct cvmx_pip_hg_pri_qos_s {
+		u64 reserved_13_63 : 51;
+		u64 up_qos : 1;
+		u64 reserved_11_11 : 1;
+		u64 qos : 3;
+		u64 reserved_6_7 : 2;
+		u64 pri : 6;
+	} s;
+	struct cvmx_pip_hg_pri_qos_s cn52xx;
+	struct cvmx_pip_hg_pri_qos_s cn52xxp1;
+	struct cvmx_pip_hg_pri_qos_s cn56xx;
+	struct cvmx_pip_hg_pri_qos_s cn61xx;
+	struct cvmx_pip_hg_pri_qos_s cn63xx;
+	struct cvmx_pip_hg_pri_qos_s cn63xxp1;
+	struct cvmx_pip_hg_pri_qos_s cn66xx;
+	struct cvmx_pip_hg_pri_qos_s cn70xx;
+	struct cvmx_pip_hg_pri_qos_s cn70xxp1;
+	struct cvmx_pip_hg_pri_qos_s cnf71xx;
+};
+
+typedef union cvmx_pip_hg_pri_qos cvmx_pip_hg_pri_qos_t;
+
+/**
+ * cvmx_pip_int_en
+ *
+ * Determines if hardward should raise an interrupt to software
+ * when an exception event occurs.
+ */
+union cvmx_pip_int_en {
+	u64 u64;
+	struct cvmx_pip_int_en_s {
+		u64 reserved_13_63 : 51;
+		u64 punyerr : 1;
+		u64 lenerr : 1;
+		u64 maxerr : 1;
+		u64 minerr : 1;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 crcerr : 1;
+		u64 pktdrp : 1;
+	} s;
+	struct cvmx_pip_int_en_cn30xx {
+		u64 reserved_9_63 : 55;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 crcerr : 1;
+		u64 pktdrp : 1;
+	} cn30xx;
+	struct cvmx_pip_int_en_cn30xx cn31xx;
+	struct cvmx_pip_int_en_cn30xx cn38xx;
+	struct cvmx_pip_int_en_cn30xx cn38xxp2;
+	struct cvmx_pip_int_en_cn50xx {
+		u64 reserved_12_63 : 52;
+		u64 lenerr : 1;
+		u64 maxerr : 1;
+		u64 minerr : 1;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 reserved_1_1 : 1;
+		u64 pktdrp : 1;
+	} cn50xx;
+	struct cvmx_pip_int_en_cn52xx {
+		u64 reserved_13_63 : 51;
+		u64 punyerr : 1;
+		u64 lenerr : 1;
+		u64 maxerr : 1;
+		u64 minerr : 1;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 reserved_1_1 : 1;
+		u64 pktdrp : 1;
+	} cn52xx;
+	struct cvmx_pip_int_en_cn52xx cn52xxp1;
+	struct cvmx_pip_int_en_s cn56xx;
+	struct cvmx_pip_int_en_cn56xxp1 {
+		u64 reserved_12_63 : 52;
+		u64 lenerr : 1;
+		u64 maxerr : 1;
+		u64 minerr : 1;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 crcerr : 1;
+		u64 pktdrp : 1;
+	} cn56xxp1;
+	struct cvmx_pip_int_en_cn58xx {
+		u64 reserved_13_63 : 51;
+		u64 punyerr : 1;
+		u64 reserved_9_11 : 3;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 crcerr : 1;
+		u64 pktdrp : 1;
+	} cn58xx;
+	struct cvmx_pip_int_en_cn30xx cn58xxp1;
+	struct cvmx_pip_int_en_s cn61xx;
+	struct cvmx_pip_int_en_s cn63xx;
+	struct cvmx_pip_int_en_s cn63xxp1;
+	struct cvmx_pip_int_en_s cn66xx;
+	struct cvmx_pip_int_en_s cn68xx;
+	struct cvmx_pip_int_en_s cn68xxp1;
+	struct cvmx_pip_int_en_s cn70xx;
+	struct cvmx_pip_int_en_s cn70xxp1;
+	struct cvmx_pip_int_en_s cnf71xx;
+};
+
+typedef union cvmx_pip_int_en cvmx_pip_int_en_t;
+
+/**
+ * cvmx_pip_int_reg
+ *
+ * Any exception event that occurs is captured in the PIP_INT_REG.
+ * PIP_INT_REG will set the exception bit regardless of the value
+ * of PIP_INT_EN.  PIP_INT_EN only controls if an interrupt is
+ * raised to software.
+ */
+union cvmx_pip_int_reg {
+	u64 u64;
+	struct cvmx_pip_int_reg_s {
+		u64 reserved_13_63 : 51;
+		u64 punyerr : 1;
+		u64 lenerr : 1;
+		u64 maxerr : 1;
+		u64 minerr : 1;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 crcerr : 1;
+		u64 pktdrp : 1;
+	} s;
+	struct cvmx_pip_int_reg_cn30xx {
+		u64 reserved_9_63 : 55;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 crcerr : 1;
+		u64 pktdrp : 1;
+	} cn30xx;
+	struct cvmx_pip_int_reg_cn30xx cn31xx;
+	struct cvmx_pip_int_reg_cn30xx cn38xx;
+	struct cvmx_pip_int_reg_cn30xx cn38xxp2;
+	struct cvmx_pip_int_reg_cn50xx {
+		u64 reserved_12_63 : 52;
+		u64 lenerr : 1;
+		u64 maxerr : 1;
+		u64 minerr : 1;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 reserved_1_1 : 1;
+		u64 pktdrp : 1;
+	} cn50xx;
+	struct cvmx_pip_int_reg_cn52xx {
+		u64 reserved_13_63 : 51;
+		u64 punyerr : 1;
+		u64 lenerr : 1;
+		u64 maxerr : 1;
+		u64 minerr : 1;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 reserved_1_1 : 1;
+		u64 pktdrp : 1;
+	} cn52xx;
+	struct cvmx_pip_int_reg_cn52xx cn52xxp1;
+	struct cvmx_pip_int_reg_s cn56xx;
+	struct cvmx_pip_int_reg_cn56xxp1 {
+		u64 reserved_12_63 : 52;
+		u64 lenerr : 1;
+		u64 maxerr : 1;
+		u64 minerr : 1;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 crcerr : 1;
+		u64 pktdrp : 1;
+	} cn56xxp1;
+	struct cvmx_pip_int_reg_cn58xx {
+		u64 reserved_13_63 : 51;
+		u64 punyerr : 1;
+		u64 reserved_9_11 : 3;
+		u64 beperr : 1;
+		u64 feperr : 1;
+		u64 todoovr : 1;
+		u64 skprunt : 1;
+		u64 badtag : 1;
+		u64 prtnxa : 1;
+		u64 bckprs : 1;
+		u64 crcerr : 1;
+		u64 pktdrp : 1;
+	} cn58xx;
+	struct cvmx_pip_int_reg_cn30xx cn58xxp1;
+	struct cvmx_pip_int_reg_s cn61xx;
+	struct cvmx_pip_int_reg_s cn63xx;
+	struct cvmx_pip_int_reg_s cn63xxp1;
+	struct cvmx_pip_int_reg_s cn66xx;
+	struct cvmx_pip_int_reg_s cn68xx;
+	struct cvmx_pip_int_reg_s cn68xxp1;
+	struct cvmx_pip_int_reg_s cn70xx;
+	struct cvmx_pip_int_reg_s cn70xxp1;
+	struct cvmx_pip_int_reg_s cnf71xx;
+};
+
+typedef union cvmx_pip_int_reg cvmx_pip_int_reg_t;
+
+/**
+ * cvmx_pip_ip_offset
+ *
+ * An 8-byte offset to find the start of the IP header in the data portion of IP workQ entires
+ *
+ */
+union cvmx_pip_ip_offset {
+	u64 u64;
+	struct cvmx_pip_ip_offset_s {
+		u64 reserved_3_63 : 61;
+		u64 offset : 3;
+	} s;
+	struct cvmx_pip_ip_offset_s cn30xx;
+	struct cvmx_pip_ip_offset_s cn31xx;
+	struct cvmx_pip_ip_offset_s cn38xx;
+	struct cvmx_pip_ip_offset_s cn38xxp2;
+	struct cvmx_pip_ip_offset_s cn50xx;
+	struct cvmx_pip_ip_offset_s cn52xx;
+	struct cvmx_pip_ip_offset_s cn52xxp1;
+	struct cvmx_pip_ip_offset_s cn56xx;
+	struct cvmx_pip_ip_offset_s cn56xxp1;
+	struct cvmx_pip_ip_offset_s cn58xx;
+	struct cvmx_pip_ip_offset_s cn58xxp1;
+	struct cvmx_pip_ip_offset_s cn61xx;
+	struct cvmx_pip_ip_offset_s cn63xx;
+	struct cvmx_pip_ip_offset_s cn63xxp1;
+	struct cvmx_pip_ip_offset_s cn66xx;
+	struct cvmx_pip_ip_offset_s cn68xx;
+	struct cvmx_pip_ip_offset_s cn68xxp1;
+	struct cvmx_pip_ip_offset_s cn70xx;
+	struct cvmx_pip_ip_offset_s cn70xxp1;
+	struct cvmx_pip_ip_offset_s cnf71xx;
+};
+
+typedef union cvmx_pip_ip_offset cvmx_pip_ip_offset_t;
+
+/**
+ * cvmx_pip_pri_tbl#
+ *
+ * Notes:
+ * The priority level from HiGig header is as follows
+ *
+ * HiGig/HiGig+ PRI = [1'b0, CNG[1:0], COS[2:0]]
+ * HiGig2       PRI = [DP[1:0], TC[3:0]]
+ *
+ * DSA          PRI = WORD0[15:13]
+ *
+ * VLAN         PRI = VLAN[15:13]
+ *
+ * DIFFSERV         = IP.TOS/CLASS<7:2>
+ */
+union cvmx_pip_pri_tblx {
+	u64 u64;
+	struct cvmx_pip_pri_tblx_s {
+		u64 diff2_padd : 8;
+		u64 hg2_padd : 8;
+		u64 vlan2_padd : 8;
+		u64 reserved_38_39 : 2;
+		u64 diff2_bpid : 6;
+		u64 reserved_30_31 : 2;
+		u64 hg2_bpid : 6;
+		u64 reserved_22_23 : 2;
+		u64 vlan2_bpid : 6;
+		u64 reserved_11_15 : 5;
+		u64 diff2_qos : 3;
+		u64 reserved_7_7 : 1;
+		u64 hg2_qos : 3;
+		u64 reserved_3_3 : 1;
+		u64 vlan2_qos : 3;
+	} s;
+	struct cvmx_pip_pri_tblx_s cn68xx;
+	struct cvmx_pip_pri_tblx_s cn68xxp1;
+};
+
+typedef union cvmx_pip_pri_tblx cvmx_pip_pri_tblx_t;
+
+/**
+ * cvmx_pip_prt_cfg#
+ *
+ * PIP_PRT_CFGX = Per port config information
+ *
+ */
+union cvmx_pip_prt_cfgx {
+	u64 u64;
+	struct cvmx_pip_prt_cfgx_s {
+		u64 reserved_55_63 : 9;
+		u64 ih_pri : 1;
+		u64 len_chk_sel : 1;
+		u64 pad_len : 1;
+		u64 vlan_len : 1;
+		u64 lenerr_en : 1;
+		u64 maxerr_en : 1;
+		u64 minerr_en : 1;
+		u64 grp_wat_47 : 4;
+		u64 qos_wat_47 : 4;
+		u64 reserved_37_39 : 3;
+		u64 rawdrp : 1;
+		u64 tag_inc : 2;
+		u64 dyn_rs : 1;
+		u64 inst_hdr : 1;
+		u64 grp_wat : 4;
+		u64 hg_qos : 1;
+		u64 qos : 3;
+		u64 qos_wat : 4;
+		u64 qos_vsel : 1;
+		u64 qos_vod : 1;
+		u64 qos_diff : 1;
+		u64 qos_vlan : 1;
+		u64 reserved_13_15 : 3;
+		u64 crc_en : 1;
+		u64 higig_en : 1;
+		u64 dsa_en : 1;
+		cvmx_pip_port_parse_mode_t mode : 2;
+		u64 reserved_7_7 : 1;
+		u64 skip : 7;
+	} s;
+	struct cvmx_pip_prt_cfgx_cn30xx {
+		u64 reserved_37_63 : 27;
+		u64 rawdrp : 1;
+		u64 tag_inc : 2;
+		u64 dyn_rs : 1;
+		u64 inst_hdr : 1;
+		u64 grp_wat : 4;
+		u64 reserved_27_27 : 1;
+		u64 qos : 3;
+		u64 qos_wat : 4;
+		u64 reserved_18_19 : 2;
+		u64 qos_diff : 1;
+		u64 qos_vlan : 1;
+		u64 reserved_10_15 : 6;
+		cvmx_pip_port_parse_mode_t mode : 2;
+		u64 reserved_7_7 : 1;
+		u64 skip : 7;
+	} cn30xx;
+	struct cvmx_pip_prt_cfgx_cn30xx cn31xx;
+	struct cvmx_pip_prt_cfgx_cn38xx {
+		u64 reserved_37_63 : 27;
+		u64 rawdrp : 1;
+		u64 tag_inc : 2;
+		u64 dyn_rs : 1;
+		u64 inst_hdr : 1;
+		u64 grp_wat : 4;
+		u64 reserved_27_27 : 1;
+		u64 qos : 3;
+		u64 qos_wat : 4;
+		u64 reserved_18_19 : 2;
+		u64 qos_diff : 1;
+		u64 qos_vlan : 1;
+		u64 reserved_13_15 : 3;
+		u64 crc_en : 1;
+		u64 reserved_10_11 : 2;
+		cvmx_pip_port_parse_mode_t mode : 2;
+		u64 reserved_7_7 : 1;
+		u64 skip : 7;
+	} cn38xx;
+	struct cvmx_pip_prt_cfgx_cn38xx cn38xxp2;
+	struct cvmx_pip_prt_cfgx_cn50xx {
+		u64 reserved_53_63 : 11;
+		u64 pad_len : 1;
+		u64 vlan_len : 1;
+		u64 lenerr_en : 1;
+		u64 maxerr_en : 1;
+		u64 minerr_en : 1;
+		u64 grp_wat_47 : 4;
+		u64 qos_wat_47 : 4;
+		u64 reserved_37_39 : 3;
+		u64 rawdrp : 1;
+		u64 tag_inc : 2;
+		u64 dyn_rs : 1;
+		u64 inst_hdr : 1;
+		u64 grp_wat : 4;
+		u64 reserved_27_27 : 1;
+		u64 qos : 3;
+		u64 qos_wat : 4;
+		u64 reserved_19_19 : 1;
+		u64 qos_vod : 1;
+		u64 qos_diff : 1;
+		u64 qos_vlan : 1;
+		u64 reserved_13_15 : 3;
+		u64 crc_en : 1;
+		u64 reserved_10_11 : 2;
+		cvmx_pip_port_parse_mode_t mode : 2;
+		u64 reserved_7_7 : 1;
+		u64 skip : 7;
+	} cn50xx;
+	struct cvmx_pip_prt_cfgx_cn52xx {
+		u64 reserved_53_63 : 11;
+		u64 pad_len : 1;
+		u64 vlan_len : 1;
+		u64 lenerr_en : 1;
+		u64 maxerr_en : 1;
+		u64 minerr_en : 1;
+		u64 grp_wat_47 : 4;
+		u64 qos_wat_47 : 4;
+		u64 reserved_37_39 : 3;
+		u64 rawdrp : 1;
+		u64 tag_inc : 2;
+		u64 dyn_rs : 1;
+		u64 inst_hdr : 1;
+		u64 grp_wat : 4;
+		u64 hg_qos : 1;
+		u64 qos : 3;
+		u64 qos_wat : 4;
+		u64 qos_vsel : 1;
+		u64 qos_vod : 1;
+		u64 qos_diff : 1;
+		u64 qos_vlan : 1;
+		u64 reserved_13_15 : 3;
+		u64 crc_en : 1;
+		u64 higig_en : 1;
+		u64 dsa_en : 1;
+		cvmx_pip_port_parse_mode_t mode : 2;
+		u64 reserved_7_7 : 1;
+		u64 skip : 7;
+	} cn52xx;
+	struct cvmx_pip_prt_cfgx_cn52xx cn52xxp1;
+	struct cvmx_pip_prt_cfgx_cn52xx cn56xx;
+	struct cvmx_pip_prt_cfgx_cn50xx cn56xxp1;
+	struct cvmx_pip_prt_cfgx_cn58xx {
+		u64 reserved_37_63 : 27;
+		u64 rawdrp : 1;
+		u64 tag_inc : 2;
+		u64 dyn_rs : 1;
+		u64 inst_hdr : 1;
+		u64 grp_wat : 4;
+		u64 reserved_27_27 : 1;
+		u64 qos : 3;
+		u64 qos_wat : 4;
+		u64 reserved_19_19 : 1;
+		u64 qos_vod : 1;
+		u64 qos_diff : 1;
+		u64 qos_vlan : 1;
+		u64 reserved_13_15 : 3;
+		u64 crc_en : 1;
+		u64 reserved_10_11 : 2;
+		cvmx_pip_port_parse_mode_t mode : 2;
+		u64 reserved_7_7 : 1;
+		u64 skip : 7;
+	} cn58xx;
+	struct cvmx_pip_prt_cfgx_cn58xx cn58xxp1;
+	struct cvmx_pip_prt_cfgx_cn52xx cn61xx;
+	struct cvmx_pip_prt_cfgx_cn52xx cn63xx;
+	struct cvmx_pip_prt_cfgx_cn52xx cn63xxp1;
+	struct cvmx_pip_prt_cfgx_cn52xx cn66xx;
+	struct cvmx_pip_prt_cfgx_cn68xx {
+		u64 reserved_55_63 : 9;
+		u64 ih_pri : 1;
+		u64 len_chk_sel : 1;
+		u64 pad_len : 1;
+		u64 vlan_len : 1;
+		u64 lenerr_en : 1;
+		u64 maxerr_en : 1;
+		u64 minerr_en : 1;
+		u64 grp_wat_47 : 4;
+		u64 qos_wat_47 : 4;
+		u64 reserved_37_39 : 3;
+		u64 rawdrp : 1;
+		u64 tag_inc : 2;
+		u64 dyn_rs : 1;
+		u64 inst_hdr : 1;
+		u64 grp_wat : 4;
+		u64 hg_qos : 1;
+		u64 qos : 3;
+		u64 qos_wat : 4;
+		u64 reserved_19_19 : 1;
+		u64 qos_vod : 1;
+		u64 qos_diff : 1;
+		u64 qos_vlan : 1;
+		u64 reserved_13_15 : 3;
+		u64 crc_en : 1;
+		u64 higig_en : 1;
+		u64 dsa_en : 1;
+		cvmx_pip_port_parse_mode_t mode : 2;
+		u64 reserved_7_7 : 1;
+		u64 skip : 7;
+	} cn68xx;
+	struct cvmx_pip_prt_cfgx_cn68xx cn68xxp1;
+	struct cvmx_pip_prt_cfgx_cn52xx cn70xx;
+	struct cvmx_pip_prt_cfgx_cn52xx cn70xxp1;
+	struct cvmx_pip_prt_cfgx_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pip_prt_cfgx cvmx_pip_prt_cfgx_t;
+
+/**
+ * cvmx_pip_prt_cfgb#
+ *
+ * Notes:
+ * PIP_PRT_CFGB* does not exist prior to pass 1.2.
+ *
+ */
+union cvmx_pip_prt_cfgbx {
+	u64 u64;
+	struct cvmx_pip_prt_cfgbx_s {
+		u64 reserved_39_63 : 25;
+		u64 alt_skp_sel : 2;
+		u64 alt_skp_en : 1;
+		u64 reserved_35_35 : 1;
+		u64 bsel_num : 2;
+		u64 bsel_en : 1;
+		u64 reserved_24_31 : 8;
+		u64 base : 8;
+		u64 reserved_6_15 : 10;
+		u64 bpid : 6;
+	} s;
+	struct cvmx_pip_prt_cfgbx_cn61xx {
+		u64 reserved_39_63 : 25;
+		u64 alt_skp_sel : 2;
+		u64 alt_skp_en : 1;
+		u64 reserved_35_35 : 1;
+		u64 bsel_num : 2;
+		u64 bsel_en : 1;
+		u64 reserved_0_31 : 32;
+	} cn61xx;
+	struct cvmx_pip_prt_cfgbx_cn66xx {
+		u64 reserved_39_63 : 25;
+		u64 alt_skp_sel : 2;
+		u64 alt_skp_en : 1;
+		u64 reserved_0_35 : 36;
+	} cn66xx;
+	struct cvmx_pip_prt_cfgbx_s cn68xx;
+	struct cvmx_pip_prt_cfgbx_cn68xxp1 {
+		u64 reserved_24_63 : 40;
+		u64 base : 8;
+		u64 reserved_6_15 : 10;
+		u64 bpid : 6;
+	} cn68xxp1;
+	struct cvmx_pip_prt_cfgbx_cn61xx cn70xx;
+	struct cvmx_pip_prt_cfgbx_cn61xx cn70xxp1;
+	struct cvmx_pip_prt_cfgbx_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pip_prt_cfgbx cvmx_pip_prt_cfgbx_t;
+
+/**
+ * cvmx_pip_prt_tag#
+ *
+ * PIP_PRT_TAGX = Per port config information
+ *
+ */
+union cvmx_pip_prt_tagx {
+	u64 u64;
+	struct cvmx_pip_prt_tagx_s {
+		u64 reserved_54_63 : 10;
+		u64 portadd_en : 1;
+		u64 inc_hwchk : 1;
+		u64 reserved_50_51 : 2;
+		u64 grptagbase_msb : 2;
+		u64 reserved_46_47 : 2;
+		u64 grptagmask_msb : 2;
+		u64 reserved_42_43 : 2;
+		u64 grp_msb : 2;
+		u64 grptagbase : 4;
+		u64 grptagmask : 4;
+		u64 grptag : 1;
+		u64 grptag_mskip : 1;
+		u64 tag_mode : 2;
+		u64 inc_vs : 2;
+		u64 inc_vlan : 1;
+		u64 inc_prt_flag : 1;
+		u64 ip6_dprt_flag : 1;
+		u64 ip4_dprt_flag : 1;
+		u64 ip6_sprt_flag : 1;
+		u64 ip4_sprt_flag : 1;
+		u64 ip6_nxth_flag : 1;
+		u64 ip4_pctl_flag : 1;
+		u64 ip6_dst_flag : 1;
+		u64 ip4_dst_flag : 1;
+		u64 ip6_src_flag : 1;
+		u64 ip4_src_flag : 1;
+		cvmx_pow_tag_type_t tcp6_tag_type : 2;
+		cvmx_pow_tag_type_t tcp4_tag_type : 2;
+		cvmx_pow_tag_type_t ip6_tag_type : 2;
+		cvmx_pow_tag_type_t ip4_tag_type : 2;
+		cvmx_pow_tag_type_t non_tag_type : 2;
+		u64 grp : 4;
+	} s;
+	struct cvmx_pip_prt_tagx_cn30xx {
+		u64 reserved_40_63 : 24;
+		u64 grptagbase : 4;
+		u64 grptagmask : 4;
+		u64 grptag : 1;
+		u64 reserved_30_30 : 1;
+		u64 tag_mode : 2;
+		u64 inc_vs : 2;
+		u64 inc_vlan : 1;
+		u64 inc_prt_flag : 1;
+		u64 ip6_dprt_flag : 1;
+		u64 ip4_dprt_flag : 1;
+		u64 ip6_sprt_flag : 1;
+		u64 ip4_sprt_flag : 1;
+		u64 ip6_nxth_flag : 1;
+		u64 ip4_pctl_flag : 1;
+		u64 ip6_dst_flag : 1;
+		u64 ip4_dst_flag : 1;
+		u64 ip6_src_flag : 1;
+		u64 ip4_src_flag : 1;
+		cvmx_pow_tag_type_t tcp6_tag_type : 2;
+		cvmx_pow_tag_type_t tcp4_tag_type : 2;
+		cvmx_pow_tag_type_t ip6_tag_type : 2;
+		cvmx_pow_tag_type_t ip4_tag_type : 2;
+		cvmx_pow_tag_type_t non_tag_type : 2;
+		u64 grp : 4;
+	} cn30xx;
+	struct cvmx_pip_prt_tagx_cn30xx cn31xx;
+	struct cvmx_pip_prt_tagx_cn30xx cn38xx;
+	struct cvmx_pip_prt_tagx_cn30xx cn38xxp2;
+	struct cvmx_pip_prt_tagx_cn50xx {
+		u64 reserved_40_63 : 24;
+		u64 grptagbase : 4;
+		u64 grptagmask : 4;
+		u64 grptag : 1;
+		u64 grptag_mskip : 1;
+		u64 tag_mode : 2;
+		u64 inc_vs : 2;
+		u64 inc_vlan : 1;
+		u64 inc_prt_flag : 1;
+		u64 ip6_dprt_flag : 1;
+		u64 ip4_dprt_flag : 1;
+		u64 ip6_sprt_flag : 1;
+		u64 ip4_sprt_flag : 1;
+		u64 ip6_nxth_flag : 1;
+		u64 ip4_pctl_flag : 1;
+		u64 ip6_dst_flag : 1;
+		u64 ip4_dst_flag : 1;
+		u64 ip6_src_flag : 1;
+		u64 ip4_src_flag : 1;
+		cvmx_pow_tag_type_t tcp6_tag_type : 2;
+		cvmx_pow_tag_type_t tcp4_tag_type : 2;
+		cvmx_pow_tag_type_t ip6_tag_type : 2;
+		cvmx_pow_tag_type_t ip4_tag_type : 2;
+		cvmx_pow_tag_type_t non_tag_type : 2;
+		u64 grp : 4;
+	} cn50xx;
+	struct cvmx_pip_prt_tagx_cn50xx cn52xx;
+	struct cvmx_pip_prt_tagx_cn50xx cn52xxp1;
+	struct cvmx_pip_prt_tagx_cn50xx cn56xx;
+	struct cvmx_pip_prt_tagx_cn50xx cn56xxp1;
+	struct cvmx_pip_prt_tagx_cn30xx cn58xx;
+	struct cvmx_pip_prt_tagx_cn30xx cn58xxp1;
+	struct cvmx_pip_prt_tagx_cn50xx cn61xx;
+	struct cvmx_pip_prt_tagx_cn50xx cn63xx;
+	struct cvmx_pip_prt_tagx_cn50xx cn63xxp1;
+	struct cvmx_pip_prt_tagx_cn50xx cn66xx;
+	struct cvmx_pip_prt_tagx_s cn68xx;
+	struct cvmx_pip_prt_tagx_s cn68xxp1;
+	struct cvmx_pip_prt_tagx_cn50xx cn70xx;
+	struct cvmx_pip_prt_tagx_cn50xx cn70xxp1;
+	struct cvmx_pip_prt_tagx_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pip_prt_tagx cvmx_pip_prt_tagx_t;
+
+/**
+ * cvmx_pip_qos_diff#
+ *
+ * PIP_QOS_DIFFX = QOS Diffserv Tables
+ *
+ */
+union cvmx_pip_qos_diffx {
+	u64 u64;
+	struct cvmx_pip_qos_diffx_s {
+		u64 reserved_3_63 : 61;
+		u64 qos : 3;
+	} s;
+	struct cvmx_pip_qos_diffx_s cn30xx;
+	struct cvmx_pip_qos_diffx_s cn31xx;
+	struct cvmx_pip_qos_diffx_s cn38xx;
+	struct cvmx_pip_qos_diffx_s cn38xxp2;
+	struct cvmx_pip_qos_diffx_s cn50xx;
+	struct cvmx_pip_qos_diffx_s cn52xx;
+	struct cvmx_pip_qos_diffx_s cn52xxp1;
+	struct cvmx_pip_qos_diffx_s cn56xx;
+	struct cvmx_pip_qos_diffx_s cn56xxp1;
+	struct cvmx_pip_qos_diffx_s cn58xx;
+	struct cvmx_pip_qos_diffx_s cn58xxp1;
+	struct cvmx_pip_qos_diffx_s cn61xx;
+	struct cvmx_pip_qos_diffx_s cn63xx;
+	struct cvmx_pip_qos_diffx_s cn63xxp1;
+	struct cvmx_pip_qos_diffx_s cn66xx;
+	struct cvmx_pip_qos_diffx_s cn70xx;
+	struct cvmx_pip_qos_diffx_s cn70xxp1;
+	struct cvmx_pip_qos_diffx_s cnf71xx;
+};
+
+typedef union cvmx_pip_qos_diffx cvmx_pip_qos_diffx_t;
+
+/**
+ * cvmx_pip_qos_vlan#
+ *
+ * If the PIP indentifies a packet is DSA/VLAN tagged, then the QOS
+ * can be set based on the DSA/VLAN user priority.  These eight register
+ * comprise the QOS values for all DSA/VLAN user priority values.
+ */
+union cvmx_pip_qos_vlanx {
+	u64 u64;
+	struct cvmx_pip_qos_vlanx_s {
+		u64 reserved_7_63 : 57;
+		u64 qos1 : 3;
+		u64 reserved_3_3 : 1;
+		u64 qos : 3;
+	} s;
+	struct cvmx_pip_qos_vlanx_cn30xx {
+		u64 reserved_3_63 : 61;
+		u64 qos : 3;
+	} cn30xx;
+	struct cvmx_pip_qos_vlanx_cn30xx cn31xx;
+	struct cvmx_pip_qos_vlanx_cn30xx cn38xx;
+	struct cvmx_pip_qos_vlanx_cn30xx cn38xxp2;
+	struct cvmx_pip_qos_vlanx_cn30xx cn50xx;
+	struct cvmx_pip_qos_vlanx_s cn52xx;
+	struct cvmx_pip_qos_vlanx_s cn52xxp1;
+	struct cvmx_pip_qos_vlanx_s cn56xx;
+	struct cvmx_pip_qos_vlanx_cn30xx cn56xxp1;
+	struct cvmx_pip_qos_vlanx_cn30xx cn58xx;
+	struct cvmx_pip_qos_vlanx_cn30xx cn58xxp1;
+	struct cvmx_pip_qos_vlanx_s cn61xx;
+	struct cvmx_pip_qos_vlanx_s cn63xx;
+	struct cvmx_pip_qos_vlanx_s cn63xxp1;
+	struct cvmx_pip_qos_vlanx_s cn66xx;
+	struct cvmx_pip_qos_vlanx_s cn70xx;
+	struct cvmx_pip_qos_vlanx_s cn70xxp1;
+	struct cvmx_pip_qos_vlanx_s cnf71xx;
+};
+
+typedef union cvmx_pip_qos_vlanx cvmx_pip_qos_vlanx_t;
+
+/**
+ * cvmx_pip_qos_watch#
+ *
+ * Sets up the Configuration CSRs for the four QOS Watchers.
+ * Each Watcher can be set to look for a specific protocol,
+ * TCP/UDP destination port, or Ethertype to override the
+ * default QOS value.
+ */
+union cvmx_pip_qos_watchx {
+	u64 u64;
+	struct cvmx_pip_qos_watchx_s {
+		u64 reserved_48_63 : 16;
+		u64 mask : 16;
+		u64 reserved_30_31 : 2;
+		u64 grp : 6;
+		u64 reserved_23_23 : 1;
+		u64 qos : 3;
+		u64 reserved_16_19 : 4;
+		u64 match_value : 16;
+	} s;
+	struct cvmx_pip_qos_watchx_cn30xx {
+		u64 reserved_48_63 : 16;
+		u64 mask : 16;
+		u64 reserved_28_31 : 4;
+		u64 grp : 4;
+		u64 reserved_23_23 : 1;
+		u64 qos : 3;
+		u64 reserved_18_19 : 2;
+
+		cvmx_pip_qos_watch_types match_type : 2;
+		u64 match_value : 16;
+	} cn30xx;
+	struct cvmx_pip_qos_watchx_cn30xx cn31xx;
+	struct cvmx_pip_qos_watchx_cn30xx cn38xx;
+	struct cvmx_pip_qos_watchx_cn30xx cn38xxp2;
+	struct cvmx_pip_qos_watchx_cn50xx {
+		u64 reserved_48_63 : 16;
+		u64 mask : 16;
+		u64 reserved_28_31 : 4;
+		u64 grp : 4;
+		u64 reserved_23_23 : 1;
+		u64 qos : 3;
+		u64 reserved_19_19 : 1;
+
+		cvmx_pip_qos_watch_types match_type : 3;
+		u64 match_value : 16;
+	} cn50xx;
+	struct cvmx_pip_qos_watchx_cn50xx cn52xx;
+	struct cvmx_pip_qos_watchx_cn50xx cn52xxp1;
+	struct cvmx_pip_qos_watchx_cn50xx cn56xx;
+	struct cvmx_pip_qos_watchx_cn50xx cn56xxp1;
+	struct cvmx_pip_qos_watchx_cn30xx cn58xx;
+	struct cvmx_pip_qos_watchx_cn30xx cn58xxp1;
+	struct cvmx_pip_qos_watchx_cn50xx cn61xx;
+	struct cvmx_pip_qos_watchx_cn50xx cn63xx;
+	struct cvmx_pip_qos_watchx_cn50xx cn63xxp1;
+	struct cvmx_pip_qos_watchx_cn50xx cn66xx;
+	struct cvmx_pip_qos_watchx_cn68xx {
+		u64 reserved_48_63 : 16;
+		u64 mask : 16;
+		u64 reserved_30_31 : 2;
+		u64 grp : 6;
+		u64 reserved_23_23 : 1;
+		u64 qos : 3;
+		u64 reserved_19_19 : 1;
+
+		cvmx_pip_qos_watch_types match_type : 3;
+		u64 match_value : 16;
+	} cn68xx;
+	struct cvmx_pip_qos_watchx_cn68xx cn68xxp1;
+	struct cvmx_pip_qos_watchx_cn70xx {
+		u64 reserved_48_63 : 16;
+		u64 mask : 16;
+		u64 reserved_28_31 : 4;
+		u64 grp : 4;
+		u64 reserved_23_23 : 1;
+		u64 qos : 3;
+		u64 reserved_19_19 : 1;
+		u64 typ : 3;
+		u64 match_value : 16;
+	} cn70xx;
+	struct cvmx_pip_qos_watchx_cn70xx cn70xxp1;
+	struct cvmx_pip_qos_watchx_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pip_qos_watchx cvmx_pip_qos_watchx_t;
+
+/**
+ * cvmx_pip_raw_word
+ *
+ * The RAW Word2 to be inserted into the workQ entry of RAWFULL packets.
+ *
+ */
+union cvmx_pip_raw_word {
+	u64 u64;
+	struct cvmx_pip_raw_word_s {
+		u64 reserved_56_63 : 8;
+		u64 word : 56;
+	} s;
+	struct cvmx_pip_raw_word_s cn30xx;
+	struct cvmx_pip_raw_word_s cn31xx;
+	struct cvmx_pip_raw_word_s cn38xx;
+	struct cvmx_pip_raw_word_s cn38xxp2;
+	struct cvmx_pip_raw_word_s cn50xx;
+	struct cvmx_pip_raw_word_s cn52xx;
+	struct cvmx_pip_raw_word_s cn52xxp1;
+	struct cvmx_pip_raw_word_s cn56xx;
+	struct cvmx_pip_raw_word_s cn56xxp1;
+	struct cvmx_pip_raw_word_s cn58xx;
+	struct cvmx_pip_raw_word_s cn58xxp1;
+	struct cvmx_pip_raw_word_s cn61xx;
+	struct cvmx_pip_raw_word_s cn63xx;
+	struct cvmx_pip_raw_word_s cn63xxp1;
+	struct cvmx_pip_raw_word_s cn66xx;
+	struct cvmx_pip_raw_word_s cn68xx;
+	struct cvmx_pip_raw_word_s cn68xxp1;
+	struct cvmx_pip_raw_word_s cn70xx;
+	struct cvmx_pip_raw_word_s cn70xxp1;
+	struct cvmx_pip_raw_word_s cnf71xx;
+};
+
+typedef union cvmx_pip_raw_word cvmx_pip_raw_word_t;
+
+/**
+ * cvmx_pip_sft_rst
+ *
+ * When written to a '1', resets the pip block
+ *
+ */
+union cvmx_pip_sft_rst {
+	u64 u64;
+	struct cvmx_pip_sft_rst_s {
+		u64 reserved_1_63 : 63;
+		u64 rst : 1;
+	} s;
+	struct cvmx_pip_sft_rst_s cn30xx;
+	struct cvmx_pip_sft_rst_s cn31xx;
+	struct cvmx_pip_sft_rst_s cn38xx;
+	struct cvmx_pip_sft_rst_s cn50xx;
+	struct cvmx_pip_sft_rst_s cn52xx;
+	struct cvmx_pip_sft_rst_s cn52xxp1;
+	struct cvmx_pip_sft_rst_s cn56xx;
+	struct cvmx_pip_sft_rst_s cn56xxp1;
+	struct cvmx_pip_sft_rst_s cn58xx;
+	struct cvmx_pip_sft_rst_s cn58xxp1;
+	struct cvmx_pip_sft_rst_s cn61xx;
+	struct cvmx_pip_sft_rst_s cn63xx;
+	struct cvmx_pip_sft_rst_s cn63xxp1;
+	struct cvmx_pip_sft_rst_s cn66xx;
+	struct cvmx_pip_sft_rst_s cn68xx;
+	struct cvmx_pip_sft_rst_s cn68xxp1;
+	struct cvmx_pip_sft_rst_s cn70xx;
+	struct cvmx_pip_sft_rst_s cn70xxp1;
+	struct cvmx_pip_sft_rst_s cnf71xx;
+};
+
+typedef union cvmx_pip_sft_rst cvmx_pip_sft_rst_t;
+
+/**
+ * cvmx_pip_stat0_#
+ *
+ * PIP Statistics Counters
+ *
+ * Note: special stat counter behavior
+ *
+ * 1) Read and write operations must arbitrate for the statistics resources
+ *     along with the packet engines which are incrementing the counters.
+ *     In order to not drop packet information, the packet HW is always a
+ *     higher priority and the CSR requests will only be satisified when
+ *     there are idle cycles.  This can potentially cause long delays if the
+ *     system becomes full.
+ *
+ * 2) stat counters can be cleared in two ways.  If PIP_STAT_CTL[RDCLR] is
+ *     set, then all read accesses will clear the register.  In addition,
+ *     any write to a stats register will also reset the register to zero.
+ *     Please note that the clearing operations must obey rule \#1 above.
+ *
+ * 3) all counters are wrapping - software must ensure they are read periodically
+ *
+ * 4) The counters accumulate statistics for packets that are sent to PKI.  If
+ *    PTP_MODE is enabled, the 8B timestamp is prepended to the packet.  This
+ *    additional 8B of data is captured in the octet counts.
+ *
+ * 5) X represents either the packet's port-kind or backpressure ID as
+ *    determined by PIP_STAT_CTL[MODE]
+ * PIP_STAT0_X = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS
+ */
+union cvmx_pip_stat0_x {
+	u64 u64;
+	struct cvmx_pip_stat0_x_s {
+		u64 drp_pkts : 32;
+		u64 drp_octs : 32;
+	} s;
+	struct cvmx_pip_stat0_x_s cn68xx;
+	struct cvmx_pip_stat0_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat0_x cvmx_pip_stat0_x_t;
+
+/**
+ * cvmx_pip_stat0_prt#
+ *
+ * "PIP Statistics Counters
+ * Note: special stat counter behavior
+ * 1) Read and write operations must arbitrate for the statistics resources
+ * along with the packet engines which are incrementing the counters.
+ * In order to not drop packet information, the packet HW is always a
+ * higher priority and the CSR requests will only be satisified when
+ * there are idle cycles.  This can potentially cause long delays if the
+ * system becomes full.
+ * 2) stat counters can be cleared in two ways.  If PIP_STAT_CTL[RDCLR] is
+ * set, then all read accesses will clear the register.  In addition,
+ * any write to a stats register will also reset the register to zero.
+ * Please note that the clearing operations must obey rule \#1 above.
+ * 3) all counters are wrapping - software must ensure they are read periodically
+ * 4) The counters accumulate statistics for packets that are sent to PKI.  If
+ * PTP_MODE is enabled, the 8B timestamp is prepended to the packet.  This
+ * additional 8B of data is captured in the octet counts.
+ * PIP_STAT0_PRT = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS"
+ */
+union cvmx_pip_stat0_prtx {
+	u64 u64;
+	struct cvmx_pip_stat0_prtx_s {
+		u64 drp_pkts : 32;
+		u64 drp_octs : 32;
+	} s;
+	struct cvmx_pip_stat0_prtx_s cn30xx;
+	struct cvmx_pip_stat0_prtx_s cn31xx;
+	struct cvmx_pip_stat0_prtx_s cn38xx;
+	struct cvmx_pip_stat0_prtx_s cn38xxp2;
+	struct cvmx_pip_stat0_prtx_s cn50xx;
+	struct cvmx_pip_stat0_prtx_s cn52xx;
+	struct cvmx_pip_stat0_prtx_s cn52xxp1;
+	struct cvmx_pip_stat0_prtx_s cn56xx;
+	struct cvmx_pip_stat0_prtx_s cn56xxp1;
+	struct cvmx_pip_stat0_prtx_s cn58xx;
+	struct cvmx_pip_stat0_prtx_s cn58xxp1;
+	struct cvmx_pip_stat0_prtx_s cn61xx;
+	struct cvmx_pip_stat0_prtx_s cn63xx;
+	struct cvmx_pip_stat0_prtx_s cn63xxp1;
+	struct cvmx_pip_stat0_prtx_s cn66xx;
+	struct cvmx_pip_stat0_prtx_s cn70xx;
+	struct cvmx_pip_stat0_prtx_s cn70xxp1;
+	struct cvmx_pip_stat0_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat0_prtx cvmx_pip_stat0_prtx_t;
+
+/**
+ * cvmx_pip_stat10_#
+ *
+ * PIP_STAT10_X = PIP_STAT_L2_MCAST / PIP_STAT_L2_BCAST
+ *
+ */
+union cvmx_pip_stat10_x {
+	u64 u64;
+	struct cvmx_pip_stat10_x_s {
+		u64 bcast : 32;
+		u64 mcast : 32;
+	} s;
+	struct cvmx_pip_stat10_x_s cn68xx;
+	struct cvmx_pip_stat10_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat10_x cvmx_pip_stat10_x_t;
+
+/**
+ * cvmx_pip_stat10_prt#
+ *
+ * PIP_STAT10_PRTX = PIP_STAT_L2_MCAST / PIP_STAT_L2_BCAST
+ *
+ */
+union cvmx_pip_stat10_prtx {
+	u64 u64;
+	struct cvmx_pip_stat10_prtx_s {
+		u64 bcast : 32;
+		u64 mcast : 32;
+	} s;
+	struct cvmx_pip_stat10_prtx_s cn52xx;
+	struct cvmx_pip_stat10_prtx_s cn52xxp1;
+	struct cvmx_pip_stat10_prtx_s cn56xx;
+	struct cvmx_pip_stat10_prtx_s cn56xxp1;
+	struct cvmx_pip_stat10_prtx_s cn61xx;
+	struct cvmx_pip_stat10_prtx_s cn63xx;
+	struct cvmx_pip_stat10_prtx_s cn63xxp1;
+	struct cvmx_pip_stat10_prtx_s cn66xx;
+	struct cvmx_pip_stat10_prtx_s cn70xx;
+	struct cvmx_pip_stat10_prtx_s cn70xxp1;
+	struct cvmx_pip_stat10_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat10_prtx cvmx_pip_stat10_prtx_t;
+
+/**
+ * cvmx_pip_stat11_#
+ *
+ * PIP_STAT11_X = PIP_STAT_L3_MCAST / PIP_STAT_L3_BCAST
+ *
+ */
+union cvmx_pip_stat11_x {
+	u64 u64;
+	struct cvmx_pip_stat11_x_s {
+		u64 bcast : 32;
+		u64 mcast : 32;
+	} s;
+	struct cvmx_pip_stat11_x_s cn68xx;
+	struct cvmx_pip_stat11_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat11_x cvmx_pip_stat11_x_t;
+
+/**
+ * cvmx_pip_stat11_prt#
+ *
+ * PIP_STAT11_PRTX = PIP_STAT_L3_MCAST / PIP_STAT_L3_BCAST
+ *
+ */
+union cvmx_pip_stat11_prtx {
+	u64 u64;
+	struct cvmx_pip_stat11_prtx_s {
+		u64 bcast : 32;
+		u64 mcast : 32;
+	} s;
+	struct cvmx_pip_stat11_prtx_s cn52xx;
+	struct cvmx_pip_stat11_prtx_s cn52xxp1;
+	struct cvmx_pip_stat11_prtx_s cn56xx;
+	struct cvmx_pip_stat11_prtx_s cn56xxp1;
+	struct cvmx_pip_stat11_prtx_s cn61xx;
+	struct cvmx_pip_stat11_prtx_s cn63xx;
+	struct cvmx_pip_stat11_prtx_s cn63xxp1;
+	struct cvmx_pip_stat11_prtx_s cn66xx;
+	struct cvmx_pip_stat11_prtx_s cn70xx;
+	struct cvmx_pip_stat11_prtx_s cn70xxp1;
+	struct cvmx_pip_stat11_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat11_prtx cvmx_pip_stat11_prtx_t;
+
+/**
+ * cvmx_pip_stat1_#
+ *
+ * PIP_STAT1_X = PIP_STAT_OCTS
+ *
+ */
+union cvmx_pip_stat1_x {
+	u64 u64;
+	struct cvmx_pip_stat1_x_s {
+		u64 reserved_48_63 : 16;
+		u64 octs : 48;
+	} s;
+	struct cvmx_pip_stat1_x_s cn68xx;
+	struct cvmx_pip_stat1_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat1_x cvmx_pip_stat1_x_t;
+
+/**
+ * cvmx_pip_stat1_prt#
+ *
+ * PIP_STAT1_PRTX = PIP_STAT_OCTS
+ *
+ */
+union cvmx_pip_stat1_prtx {
+	u64 u64;
+	struct cvmx_pip_stat1_prtx_s {
+		u64 reserved_48_63 : 16;
+		u64 octs : 48;
+	} s;
+	struct cvmx_pip_stat1_prtx_s cn30xx;
+	struct cvmx_pip_stat1_prtx_s cn31xx;
+	struct cvmx_pip_stat1_prtx_s cn38xx;
+	struct cvmx_pip_stat1_prtx_s cn38xxp2;
+	struct cvmx_pip_stat1_prtx_s cn50xx;
+	struct cvmx_pip_stat1_prtx_s cn52xx;
+	struct cvmx_pip_stat1_prtx_s cn52xxp1;
+	struct cvmx_pip_stat1_prtx_s cn56xx;
+	struct cvmx_pip_stat1_prtx_s cn56xxp1;
+	struct cvmx_pip_stat1_prtx_s cn58xx;
+	struct cvmx_pip_stat1_prtx_s cn58xxp1;
+	struct cvmx_pip_stat1_prtx_s cn61xx;
+	struct cvmx_pip_stat1_prtx_s cn63xx;
+	struct cvmx_pip_stat1_prtx_s cn63xxp1;
+	struct cvmx_pip_stat1_prtx_s cn66xx;
+	struct cvmx_pip_stat1_prtx_s cn70xx;
+	struct cvmx_pip_stat1_prtx_s cn70xxp1;
+	struct cvmx_pip_stat1_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat1_prtx cvmx_pip_stat1_prtx_t;
+
+/**
+ * cvmx_pip_stat2_#
+ *
+ * PIP_STAT2_X = PIP_STAT_PKTS     / PIP_STAT_RAW
+ *
+ */
+union cvmx_pip_stat2_x {
+	u64 u64;
+	struct cvmx_pip_stat2_x_s {
+		u64 pkts : 32;
+		u64 raw : 32;
+	} s;
+	struct cvmx_pip_stat2_x_s cn68xx;
+	struct cvmx_pip_stat2_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat2_x cvmx_pip_stat2_x_t;
+
+/**
+ * cvmx_pip_stat2_prt#
+ *
+ * PIP_STAT2_PRTX = PIP_STAT_PKTS     / PIP_STAT_RAW
+ *
+ */
+union cvmx_pip_stat2_prtx {
+	u64 u64;
+	struct cvmx_pip_stat2_prtx_s {
+		u64 pkts : 32;
+		u64 raw : 32;
+	} s;
+	struct cvmx_pip_stat2_prtx_s cn30xx;
+	struct cvmx_pip_stat2_prtx_s cn31xx;
+	struct cvmx_pip_stat2_prtx_s cn38xx;
+	struct cvmx_pip_stat2_prtx_s cn38xxp2;
+	struct cvmx_pip_stat2_prtx_s cn50xx;
+	struct cvmx_pip_stat2_prtx_s cn52xx;
+	struct cvmx_pip_stat2_prtx_s cn52xxp1;
+	struct cvmx_pip_stat2_prtx_s cn56xx;
+	struct cvmx_pip_stat2_prtx_s cn56xxp1;
+	struct cvmx_pip_stat2_prtx_s cn58xx;
+	struct cvmx_pip_stat2_prtx_s cn58xxp1;
+	struct cvmx_pip_stat2_prtx_s cn61xx;
+	struct cvmx_pip_stat2_prtx_s cn63xx;
+	struct cvmx_pip_stat2_prtx_s cn63xxp1;
+	struct cvmx_pip_stat2_prtx_s cn66xx;
+	struct cvmx_pip_stat2_prtx_s cn70xx;
+	struct cvmx_pip_stat2_prtx_s cn70xxp1;
+	struct cvmx_pip_stat2_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat2_prtx cvmx_pip_stat2_prtx_t;
+
+/**
+ * cvmx_pip_stat3_#
+ *
+ * PIP_STAT3_X = PIP_STAT_BCST     / PIP_STAT_MCST
+ *
+ */
+union cvmx_pip_stat3_x {
+	u64 u64;
+	struct cvmx_pip_stat3_x_s {
+		u64 bcst : 32;
+		u64 mcst : 32;
+	} s;
+	struct cvmx_pip_stat3_x_s cn68xx;
+	struct cvmx_pip_stat3_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat3_x cvmx_pip_stat3_x_t;
+
+/**
+ * cvmx_pip_stat3_prt#
+ *
+ * PIP_STAT3_PRTX = PIP_STAT_BCST     / PIP_STAT_MCST
+ *
+ */
+union cvmx_pip_stat3_prtx {
+	u64 u64;
+	struct cvmx_pip_stat3_prtx_s {
+		u64 bcst : 32;
+		u64 mcst : 32;
+	} s;
+	struct cvmx_pip_stat3_prtx_s cn30xx;
+	struct cvmx_pip_stat3_prtx_s cn31xx;
+	struct cvmx_pip_stat3_prtx_s cn38xx;
+	struct cvmx_pip_stat3_prtx_s cn38xxp2;
+	struct cvmx_pip_stat3_prtx_s cn50xx;
+	struct cvmx_pip_stat3_prtx_s cn52xx;
+	struct cvmx_pip_stat3_prtx_s cn52xxp1;
+	struct cvmx_pip_stat3_prtx_s cn56xx;
+	struct cvmx_pip_stat3_prtx_s cn56xxp1;
+	struct cvmx_pip_stat3_prtx_s cn58xx;
+	struct cvmx_pip_stat3_prtx_s cn58xxp1;
+	struct cvmx_pip_stat3_prtx_s cn61xx;
+	struct cvmx_pip_stat3_prtx_s cn63xx;
+	struct cvmx_pip_stat3_prtx_s cn63xxp1;
+	struct cvmx_pip_stat3_prtx_s cn66xx;
+	struct cvmx_pip_stat3_prtx_s cn70xx;
+	struct cvmx_pip_stat3_prtx_s cn70xxp1;
+	struct cvmx_pip_stat3_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat3_prtx cvmx_pip_stat3_prtx_t;
+
+/**
+ * cvmx_pip_stat4_#
+ *
+ * PIP_STAT4_X = PIP_STAT_HIST1    / PIP_STAT_HIST0
+ *
+ */
+union cvmx_pip_stat4_x {
+	u64 u64;
+	struct cvmx_pip_stat4_x_s {
+		u64 h65to127 : 32;
+		u64 h64 : 32;
+	} s;
+	struct cvmx_pip_stat4_x_s cn68xx;
+	struct cvmx_pip_stat4_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat4_x cvmx_pip_stat4_x_t;
+
+/**
+ * cvmx_pip_stat4_prt#
+ *
+ * PIP_STAT4_PRTX = PIP_STAT_HIST1    / PIP_STAT_HIST0
+ *
+ */
+union cvmx_pip_stat4_prtx {
+	u64 u64;
+	struct cvmx_pip_stat4_prtx_s {
+		u64 h65to127 : 32;
+		u64 h64 : 32;
+	} s;
+	struct cvmx_pip_stat4_prtx_s cn30xx;
+	struct cvmx_pip_stat4_prtx_s cn31xx;
+	struct cvmx_pip_stat4_prtx_s cn38xx;
+	struct cvmx_pip_stat4_prtx_s cn38xxp2;
+	struct cvmx_pip_stat4_prtx_s cn50xx;
+	struct cvmx_pip_stat4_prtx_s cn52xx;
+	struct cvmx_pip_stat4_prtx_s cn52xxp1;
+	struct cvmx_pip_stat4_prtx_s cn56xx;
+	struct cvmx_pip_stat4_prtx_s cn56xxp1;
+	struct cvmx_pip_stat4_prtx_s cn58xx;
+	struct cvmx_pip_stat4_prtx_s cn58xxp1;
+	struct cvmx_pip_stat4_prtx_s cn61xx;
+	struct cvmx_pip_stat4_prtx_s cn63xx;
+	struct cvmx_pip_stat4_prtx_s cn63xxp1;
+	struct cvmx_pip_stat4_prtx_s cn66xx;
+	struct cvmx_pip_stat4_prtx_s cn70xx;
+	struct cvmx_pip_stat4_prtx_s cn70xxp1;
+	struct cvmx_pip_stat4_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat4_prtx cvmx_pip_stat4_prtx_t;
+
+/**
+ * cvmx_pip_stat5_#
+ *
+ * PIP_STAT5_X = PIP_STAT_HIST3    / PIP_STAT_HIST2
+ *
+ */
+union cvmx_pip_stat5_x {
+	u64 u64;
+	struct cvmx_pip_stat5_x_s {
+		u64 h256to511 : 32;
+		u64 h128to255 : 32;
+	} s;
+	struct cvmx_pip_stat5_x_s cn68xx;
+	struct cvmx_pip_stat5_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat5_x cvmx_pip_stat5_x_t;
+
+/**
+ * cvmx_pip_stat5_prt#
+ *
+ * PIP_STAT5_PRTX = PIP_STAT_HIST3    / PIP_STAT_HIST2
+ *
+ */
+union cvmx_pip_stat5_prtx {
+	u64 u64;
+	struct cvmx_pip_stat5_prtx_s {
+		u64 h256to511 : 32;
+		u64 h128to255 : 32;
+	} s;
+	struct cvmx_pip_stat5_prtx_s cn30xx;
+	struct cvmx_pip_stat5_prtx_s cn31xx;
+	struct cvmx_pip_stat5_prtx_s cn38xx;
+	struct cvmx_pip_stat5_prtx_s cn38xxp2;
+	struct cvmx_pip_stat5_prtx_s cn50xx;
+	struct cvmx_pip_stat5_prtx_s cn52xx;
+	struct cvmx_pip_stat5_prtx_s cn52xxp1;
+	struct cvmx_pip_stat5_prtx_s cn56xx;
+	struct cvmx_pip_stat5_prtx_s cn56xxp1;
+	struct cvmx_pip_stat5_prtx_s cn58xx;
+	struct cvmx_pip_stat5_prtx_s cn58xxp1;
+	struct cvmx_pip_stat5_prtx_s cn61xx;
+	struct cvmx_pip_stat5_prtx_s cn63xx;
+	struct cvmx_pip_stat5_prtx_s cn63xxp1;
+	struct cvmx_pip_stat5_prtx_s cn66xx;
+	struct cvmx_pip_stat5_prtx_s cn70xx;
+	struct cvmx_pip_stat5_prtx_s cn70xxp1;
+	struct cvmx_pip_stat5_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat5_prtx cvmx_pip_stat5_prtx_t;
+
+/**
+ * cvmx_pip_stat6_#
+ *
+ * PIP_STAT6_X = PIP_STAT_HIST5    / PIP_STAT_HIST4
+ *
+ */
+union cvmx_pip_stat6_x {
+	u64 u64;
+	struct cvmx_pip_stat6_x_s {
+		u64 h1024to1518 : 32;
+		u64 h512to1023 : 32;
+	} s;
+	struct cvmx_pip_stat6_x_s cn68xx;
+	struct cvmx_pip_stat6_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat6_x cvmx_pip_stat6_x_t;
+
+/**
+ * cvmx_pip_stat6_prt#
+ *
+ * PIP_STAT6_PRTX = PIP_STAT_HIST5    / PIP_STAT_HIST4
+ *
+ */
+union cvmx_pip_stat6_prtx {
+	u64 u64;
+	struct cvmx_pip_stat6_prtx_s {
+		u64 h1024to1518 : 32;
+		u64 h512to1023 : 32;
+	} s;
+	struct cvmx_pip_stat6_prtx_s cn30xx;
+	struct cvmx_pip_stat6_prtx_s cn31xx;
+	struct cvmx_pip_stat6_prtx_s cn38xx;
+	struct cvmx_pip_stat6_prtx_s cn38xxp2;
+	struct cvmx_pip_stat6_prtx_s cn50xx;
+	struct cvmx_pip_stat6_prtx_s cn52xx;
+	struct cvmx_pip_stat6_prtx_s cn52xxp1;
+	struct cvmx_pip_stat6_prtx_s cn56xx;
+	struct cvmx_pip_stat6_prtx_s cn56xxp1;
+	struct cvmx_pip_stat6_prtx_s cn58xx;
+	struct cvmx_pip_stat6_prtx_s cn58xxp1;
+	struct cvmx_pip_stat6_prtx_s cn61xx;
+	struct cvmx_pip_stat6_prtx_s cn63xx;
+	struct cvmx_pip_stat6_prtx_s cn63xxp1;
+	struct cvmx_pip_stat6_prtx_s cn66xx;
+	struct cvmx_pip_stat6_prtx_s cn70xx;
+	struct cvmx_pip_stat6_prtx_s cn70xxp1;
+	struct cvmx_pip_stat6_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat6_prtx cvmx_pip_stat6_prtx_t;
+
+/**
+ * cvmx_pip_stat7_#
+ *
+ * PIP_STAT7_X = PIP_STAT_FCS      / PIP_STAT_HIST6
+ *
+ */
+union cvmx_pip_stat7_x {
+	u64 u64;
+	struct cvmx_pip_stat7_x_s {
+		u64 fcs : 32;
+		u64 h1519 : 32;
+	} s;
+	struct cvmx_pip_stat7_x_s cn68xx;
+	struct cvmx_pip_stat7_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat7_x cvmx_pip_stat7_x_t;
+
+/**
+ * cvmx_pip_stat7_prt#
+ *
+ * PIP_STAT7_PRTX = PIP_STAT_FCS      / PIP_STAT_HIST6
+ *
+ *
+ * Notes:
+ * DPI does not check FCS, therefore FCS will never increment on DPI ports 32-35
+ * sRIO does not check FCS, therefore FCS will never increment on sRIO ports 40-47
+ */
+union cvmx_pip_stat7_prtx {
+	u64 u64;
+	struct cvmx_pip_stat7_prtx_s {
+		u64 fcs : 32;
+		u64 h1519 : 32;
+	} s;
+	struct cvmx_pip_stat7_prtx_s cn30xx;
+	struct cvmx_pip_stat7_prtx_s cn31xx;
+	struct cvmx_pip_stat7_prtx_s cn38xx;
+	struct cvmx_pip_stat7_prtx_s cn38xxp2;
+	struct cvmx_pip_stat7_prtx_s cn50xx;
+	struct cvmx_pip_stat7_prtx_s cn52xx;
+	struct cvmx_pip_stat7_prtx_s cn52xxp1;
+	struct cvmx_pip_stat7_prtx_s cn56xx;
+	struct cvmx_pip_stat7_prtx_s cn56xxp1;
+	struct cvmx_pip_stat7_prtx_s cn58xx;
+	struct cvmx_pip_stat7_prtx_s cn58xxp1;
+	struct cvmx_pip_stat7_prtx_s cn61xx;
+	struct cvmx_pip_stat7_prtx_s cn63xx;
+	struct cvmx_pip_stat7_prtx_s cn63xxp1;
+	struct cvmx_pip_stat7_prtx_s cn66xx;
+	struct cvmx_pip_stat7_prtx_s cn70xx;
+	struct cvmx_pip_stat7_prtx_s cn70xxp1;
+	struct cvmx_pip_stat7_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat7_prtx cvmx_pip_stat7_prtx_t;
+
+/**
+ * cvmx_pip_stat8_#
+ *
+ * PIP_STAT8_X = PIP_STAT_FRAG     / PIP_STAT_UNDER
+ *
+ */
+union cvmx_pip_stat8_x {
+	u64 u64;
+	struct cvmx_pip_stat8_x_s {
+		u64 frag : 32;
+		u64 undersz : 32;
+	} s;
+	struct cvmx_pip_stat8_x_s cn68xx;
+	struct cvmx_pip_stat8_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat8_x cvmx_pip_stat8_x_t;
+
+/**
+ * cvmx_pip_stat8_prt#
+ *
+ * PIP_STAT8_PRTX = PIP_STAT_FRAG     / PIP_STAT_UNDER
+ *
+ *
+ * Notes:
+ * DPI does not check FCS, therefore FRAG will never increment on DPI ports 32-35
+ * sRIO does not check FCS, therefore FRAG will never increment on sRIO ports 40-47
+ */
+union cvmx_pip_stat8_prtx {
+	u64 u64;
+	struct cvmx_pip_stat8_prtx_s {
+		u64 frag : 32;
+		u64 undersz : 32;
+	} s;
+	struct cvmx_pip_stat8_prtx_s cn30xx;
+	struct cvmx_pip_stat8_prtx_s cn31xx;
+	struct cvmx_pip_stat8_prtx_s cn38xx;
+	struct cvmx_pip_stat8_prtx_s cn38xxp2;
+	struct cvmx_pip_stat8_prtx_s cn50xx;
+	struct cvmx_pip_stat8_prtx_s cn52xx;
+	struct cvmx_pip_stat8_prtx_s cn52xxp1;
+	struct cvmx_pip_stat8_prtx_s cn56xx;
+	struct cvmx_pip_stat8_prtx_s cn56xxp1;
+	struct cvmx_pip_stat8_prtx_s cn58xx;
+	struct cvmx_pip_stat8_prtx_s cn58xxp1;
+	struct cvmx_pip_stat8_prtx_s cn61xx;
+	struct cvmx_pip_stat8_prtx_s cn63xx;
+	struct cvmx_pip_stat8_prtx_s cn63xxp1;
+	struct cvmx_pip_stat8_prtx_s cn66xx;
+	struct cvmx_pip_stat8_prtx_s cn70xx;
+	struct cvmx_pip_stat8_prtx_s cn70xxp1;
+	struct cvmx_pip_stat8_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat8_prtx cvmx_pip_stat8_prtx_t;
+
+/**
+ * cvmx_pip_stat9_#
+ *
+ * PIP_STAT9_X = PIP_STAT_JABBER   / PIP_STAT_OVER
+ *
+ */
+union cvmx_pip_stat9_x {
+	u64 u64;
+	struct cvmx_pip_stat9_x_s {
+		u64 jabber : 32;
+		u64 oversz : 32;
+	} s;
+	struct cvmx_pip_stat9_x_s cn68xx;
+	struct cvmx_pip_stat9_x_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat9_x cvmx_pip_stat9_x_t;
+
+/**
+ * cvmx_pip_stat9_prt#
+ *
+ * PIP_STAT9_PRTX = PIP_STAT_JABBER   / PIP_STAT_OVER
+ *
+ *
+ * Notes:
+ * DPI does not check FCS, therefore JABBER will never increment on DPI ports 32-35
+ * sRIO does not check FCS, therefore JABBER will never increment on sRIO ports 40-47 due to FCS errors
+ * sRIO does use the JABBER opcode to communicate sRIO error, therefore JABBER can increment under the sRIO error conditions
+ */
+union cvmx_pip_stat9_prtx {
+	u64 u64;
+	struct cvmx_pip_stat9_prtx_s {
+		u64 jabber : 32;
+		u64 oversz : 32;
+	} s;
+	struct cvmx_pip_stat9_prtx_s cn30xx;
+	struct cvmx_pip_stat9_prtx_s cn31xx;
+	struct cvmx_pip_stat9_prtx_s cn38xx;
+	struct cvmx_pip_stat9_prtx_s cn38xxp2;
+	struct cvmx_pip_stat9_prtx_s cn50xx;
+	struct cvmx_pip_stat9_prtx_s cn52xx;
+	struct cvmx_pip_stat9_prtx_s cn52xxp1;
+	struct cvmx_pip_stat9_prtx_s cn56xx;
+	struct cvmx_pip_stat9_prtx_s cn56xxp1;
+	struct cvmx_pip_stat9_prtx_s cn58xx;
+	struct cvmx_pip_stat9_prtx_s cn58xxp1;
+	struct cvmx_pip_stat9_prtx_s cn61xx;
+	struct cvmx_pip_stat9_prtx_s cn63xx;
+	struct cvmx_pip_stat9_prtx_s cn63xxp1;
+	struct cvmx_pip_stat9_prtx_s cn66xx;
+	struct cvmx_pip_stat9_prtx_s cn70xx;
+	struct cvmx_pip_stat9_prtx_s cn70xxp1;
+	struct cvmx_pip_stat9_prtx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat9_prtx cvmx_pip_stat9_prtx_t;
+
+/**
+ * cvmx_pip_stat_ctl
+ *
+ * Controls how the PIP statistics counters are handled.
+ *
+ */
+union cvmx_pip_stat_ctl {
+	u64 u64;
+	struct cvmx_pip_stat_ctl_s {
+		u64 reserved_9_63 : 55;
+		u64 mode : 1;
+		u64 reserved_1_7 : 7;
+		u64 rdclr : 1;
+	} s;
+	struct cvmx_pip_stat_ctl_cn30xx {
+		u64 reserved_1_63 : 63;
+		u64 rdclr : 1;
+	} cn30xx;
+	struct cvmx_pip_stat_ctl_cn30xx cn31xx;
+	struct cvmx_pip_stat_ctl_cn30xx cn38xx;
+	struct cvmx_pip_stat_ctl_cn30xx cn38xxp2;
+	struct cvmx_pip_stat_ctl_cn30xx cn50xx;
+	struct cvmx_pip_stat_ctl_cn30xx cn52xx;
+	struct cvmx_pip_stat_ctl_cn30xx cn52xxp1;
+	struct cvmx_pip_stat_ctl_cn30xx cn56xx;
+	struct cvmx_pip_stat_ctl_cn30xx cn56xxp1;
+	struct cvmx_pip_stat_ctl_cn30xx cn58xx;
+	struct cvmx_pip_stat_ctl_cn30xx cn58xxp1;
+	struct cvmx_pip_stat_ctl_cn30xx cn61xx;
+	struct cvmx_pip_stat_ctl_cn30xx cn63xx;
+	struct cvmx_pip_stat_ctl_cn30xx cn63xxp1;
+	struct cvmx_pip_stat_ctl_cn30xx cn66xx;
+	struct cvmx_pip_stat_ctl_s cn68xx;
+	struct cvmx_pip_stat_ctl_s cn68xxp1;
+	struct cvmx_pip_stat_ctl_cn30xx cn70xx;
+	struct cvmx_pip_stat_ctl_cn30xx cn70xxp1;
+	struct cvmx_pip_stat_ctl_cn30xx cnf71xx;
+};
+
+typedef union cvmx_pip_stat_ctl cvmx_pip_stat_ctl_t;
+
+/**
+ * cvmx_pip_stat_inb_errs#
+ *
+ * Inbound stats collect all data sent to PIP from all packet interfaces.
+ * Its the raw counts of everything that comes into the block.  The counts
+ * will reflect all error packets and packets dropped by the PKI RED engine.
+ * These counts are intended for system debug, but could convey useful
+ * information in production systems.
+ */
+union cvmx_pip_stat_inb_errsx {
+	u64 u64;
+	struct cvmx_pip_stat_inb_errsx_s {
+		u64 reserved_16_63 : 48;
+		u64 errs : 16;
+	} s;
+	struct cvmx_pip_stat_inb_errsx_s cn30xx;
+	struct cvmx_pip_stat_inb_errsx_s cn31xx;
+	struct cvmx_pip_stat_inb_errsx_s cn38xx;
+	struct cvmx_pip_stat_inb_errsx_s cn38xxp2;
+	struct cvmx_pip_stat_inb_errsx_s cn50xx;
+	struct cvmx_pip_stat_inb_errsx_s cn52xx;
+	struct cvmx_pip_stat_inb_errsx_s cn52xxp1;
+	struct cvmx_pip_stat_inb_errsx_s cn56xx;
+	struct cvmx_pip_stat_inb_errsx_s cn56xxp1;
+	struct cvmx_pip_stat_inb_errsx_s cn58xx;
+	struct cvmx_pip_stat_inb_errsx_s cn58xxp1;
+	struct cvmx_pip_stat_inb_errsx_s cn61xx;
+	struct cvmx_pip_stat_inb_errsx_s cn63xx;
+	struct cvmx_pip_stat_inb_errsx_s cn63xxp1;
+	struct cvmx_pip_stat_inb_errsx_s cn66xx;
+	struct cvmx_pip_stat_inb_errsx_s cn70xx;
+	struct cvmx_pip_stat_inb_errsx_s cn70xxp1;
+	struct cvmx_pip_stat_inb_errsx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat_inb_errsx cvmx_pip_stat_inb_errsx_t;
+
+/**
+ * cvmx_pip_stat_inb_errs_pknd#
+ *
+ * PIP_STAT_INB_ERRS_PKNDX = Inbound error packets received by PIP per pkind
+ *
+ * Inbound stats collect all data sent to PIP from all packet interfaces.
+ * Its the raw counts of everything that comes into the block.  The counts
+ * will reflect all error packets and packets dropped by the PKI RED engine.
+ * These counts are intended for system debug, but could convey useful
+ * information in production systems.
+ */
+union cvmx_pip_stat_inb_errs_pkndx {
+	u64 u64;
+	struct cvmx_pip_stat_inb_errs_pkndx_s {
+		u64 reserved_16_63 : 48;
+		u64 errs : 16;
+	} s;
+	struct cvmx_pip_stat_inb_errs_pkndx_s cn68xx;
+	struct cvmx_pip_stat_inb_errs_pkndx_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat_inb_errs_pkndx cvmx_pip_stat_inb_errs_pkndx_t;
+
+/**
+ * cvmx_pip_stat_inb_octs#
+ *
+ * Inbound stats collect all data sent to PIP from all packet interfaces.
+ * Its the raw counts of everything that comes into the block.  The counts
+ * will reflect all error packets and packets dropped by the PKI RED engine.
+ * These counts are intended for system debug, but could convey useful
+ * information in production systems. The OCTS will include the bytes from
+ * timestamp fields in PTP_MODE.
+ */
+union cvmx_pip_stat_inb_octsx {
+	u64 u64;
+	struct cvmx_pip_stat_inb_octsx_s {
+		u64 reserved_48_63 : 16;
+		u64 octs : 48;
+	} s;
+	struct cvmx_pip_stat_inb_octsx_s cn30xx;
+	struct cvmx_pip_stat_inb_octsx_s cn31xx;
+	struct cvmx_pip_stat_inb_octsx_s cn38xx;
+	struct cvmx_pip_stat_inb_octsx_s cn38xxp2;
+	struct cvmx_pip_stat_inb_octsx_s cn50xx;
+	struct cvmx_pip_stat_inb_octsx_s cn52xx;
+	struct cvmx_pip_stat_inb_octsx_s cn52xxp1;
+	struct cvmx_pip_stat_inb_octsx_s cn56xx;
+	struct cvmx_pip_stat_inb_octsx_s cn56xxp1;
+	struct cvmx_pip_stat_inb_octsx_s cn58xx;
+	struct cvmx_pip_stat_inb_octsx_s cn58xxp1;
+	struct cvmx_pip_stat_inb_octsx_s cn61xx;
+	struct cvmx_pip_stat_inb_octsx_s cn63xx;
+	struct cvmx_pip_stat_inb_octsx_s cn63xxp1;
+	struct cvmx_pip_stat_inb_octsx_s cn66xx;
+	struct cvmx_pip_stat_inb_octsx_s cn70xx;
+	struct cvmx_pip_stat_inb_octsx_s cn70xxp1;
+	struct cvmx_pip_stat_inb_octsx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat_inb_octsx cvmx_pip_stat_inb_octsx_t;
+
+/**
+ * cvmx_pip_stat_inb_octs_pknd#
+ *
+ * PIP_STAT_INB_OCTS_PKNDX = Inbound octets received by PIP per pkind
+ *
+ * Inbound stats collect all data sent to PIP from all packet interfaces.
+ * Its the raw counts of everything that comes into the block.  The counts
+ * will reflect all error packets and packets dropped by the PKI RED engine.
+ * These counts are intended for system debug, but could convey useful
+ * information in production systems. The OCTS will include the bytes from
+ * timestamp fields in PTP_MODE.
+ */
+union cvmx_pip_stat_inb_octs_pkndx {
+	u64 u64;
+	struct cvmx_pip_stat_inb_octs_pkndx_s {
+		u64 reserved_48_63 : 16;
+		u64 octs : 48;
+	} s;
+	struct cvmx_pip_stat_inb_octs_pkndx_s cn68xx;
+	struct cvmx_pip_stat_inb_octs_pkndx_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat_inb_octs_pkndx cvmx_pip_stat_inb_octs_pkndx_t;
+
+/**
+ * cvmx_pip_stat_inb_pkts#
+ *
+ * Inbound stats collect all data sent to PIP from all packet interfaces.
+ * Its the raw counts of everything that comes into the block.  The counts
+ * will reflect all error packets and packets dropped by the PKI RED engine.
+ * These counts are intended for system debug, but could convey useful
+ * information in production systems.
+ */
+union cvmx_pip_stat_inb_pktsx {
+	u64 u64;
+	struct cvmx_pip_stat_inb_pktsx_s {
+		u64 reserved_32_63 : 32;
+		u64 pkts : 32;
+	} s;
+	struct cvmx_pip_stat_inb_pktsx_s cn30xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn31xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn38xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn38xxp2;
+	struct cvmx_pip_stat_inb_pktsx_s cn50xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn52xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn52xxp1;
+	struct cvmx_pip_stat_inb_pktsx_s cn56xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn56xxp1;
+	struct cvmx_pip_stat_inb_pktsx_s cn58xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn58xxp1;
+	struct cvmx_pip_stat_inb_pktsx_s cn61xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn63xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn63xxp1;
+	struct cvmx_pip_stat_inb_pktsx_s cn66xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn70xx;
+	struct cvmx_pip_stat_inb_pktsx_s cn70xxp1;
+	struct cvmx_pip_stat_inb_pktsx_s cnf71xx;
+};
+
+typedef union cvmx_pip_stat_inb_pktsx cvmx_pip_stat_inb_pktsx_t;
+
+/**
+ * cvmx_pip_stat_inb_pkts_pknd#
+ *
+ * PIP_STAT_INB_PKTS_PKNDX = Inbound packets received by PIP per pkind
+ *
+ * Inbound stats collect all data sent to PIP from all packet interfaces.
+ * Its the raw counts of everything that comes into the block.  The counts
+ * will reflect all error packets and packets dropped by the PKI RED engine.
+ * These counts are intended for system debug, but could convey useful
+ * information in production systems.
+ */
+union cvmx_pip_stat_inb_pkts_pkndx {
+	u64 u64;
+	struct cvmx_pip_stat_inb_pkts_pkndx_s {
+		u64 reserved_32_63 : 32;
+		u64 pkts : 32;
+	} s;
+	struct cvmx_pip_stat_inb_pkts_pkndx_s cn68xx;
+	struct cvmx_pip_stat_inb_pkts_pkndx_s cn68xxp1;
+};
+
+typedef union cvmx_pip_stat_inb_pkts_pkndx cvmx_pip_stat_inb_pkts_pkndx_t;
+
+/**
+ * cvmx_pip_sub_pkind_fcs#
+ */
+union cvmx_pip_sub_pkind_fcsx {
+	u64 u64;
+	struct cvmx_pip_sub_pkind_fcsx_s {
+		u64 port_bit : 64;
+	} s;
+	struct cvmx_pip_sub_pkind_fcsx_s cn68xx;
+	struct cvmx_pip_sub_pkind_fcsx_s cn68xxp1;
+};
+
+typedef union cvmx_pip_sub_pkind_fcsx cvmx_pip_sub_pkind_fcsx_t;
+
+/**
+ * cvmx_pip_tag_inc#
+ *
+ * # $PIP_TAG_INCX = 0x300+X X=(0..63) RegType=(RSL) RtlReg=(pip_tag_inc_csr_direct_TestbuilderTask)
+ *
+ */
+union cvmx_pip_tag_incx {
+	u64 u64;
+	struct cvmx_pip_tag_incx_s {
+		u64 reserved_8_63 : 56;
+		u64 en : 8;
+	} s;
+	struct cvmx_pip_tag_incx_s cn30xx;
+	struct cvmx_pip_tag_incx_s cn31xx;
+	struct cvmx_pip_tag_incx_s cn38xx;
+	struct cvmx_pip_tag_incx_s cn38xxp2;
+	struct cvmx_pip_tag_incx_s cn50xx;
+	struct cvmx_pip_tag_incx_s cn52xx;
+	struct cvmx_pip_tag_incx_s cn52xxp1;
+	struct cvmx_pip_tag_incx_s cn56xx;
+	struct cvmx_pip_tag_incx_s cn56xxp1;
+	struct cvmx_pip_tag_incx_s cn58xx;
+	struct cvmx_pip_tag_incx_s cn58xxp1;
+	struct cvmx_pip_tag_incx_s cn61xx;
+	struct cvmx_pip_tag_incx_s cn63xx;
+	struct cvmx_pip_tag_incx_s cn63xxp1;
+	struct cvmx_pip_tag_incx_s cn66xx;
+	struct cvmx_pip_tag_incx_s cn68xx;
+	struct cvmx_pip_tag_incx_s cn68xxp1;
+	struct cvmx_pip_tag_incx_s cn70xx;
+	struct cvmx_pip_tag_incx_s cn70xxp1;
+	struct cvmx_pip_tag_incx_s cnf71xx;
+};
+
+typedef union cvmx_pip_tag_incx cvmx_pip_tag_incx_t;
+
+/**
+ * cvmx_pip_tag_mask
+ *
+ * PIP_TAG_MASK = Mask bit in the tag generation
+ *
+ */
+union cvmx_pip_tag_mask {
+	u64 u64;
+	struct cvmx_pip_tag_mask_s {
+		u64 reserved_16_63 : 48;
+		u64 mask : 16;
+	} s;
+	struct cvmx_pip_tag_mask_s cn30xx;
+	struct cvmx_pip_tag_mask_s cn31xx;
+	struct cvmx_pip_tag_mask_s cn38xx;
+	struct cvmx_pip_tag_mask_s cn38xxp2;
+	struct cvmx_pip_tag_mask_s cn50xx;
+	struct cvmx_pip_tag_mask_s cn52xx;
+	struct cvmx_pip_tag_mask_s cn52xxp1;
+	struct cvmx_pip_tag_mask_s cn56xx;
+	struct cvmx_pip_tag_mask_s cn56xxp1;
+	struct cvmx_pip_tag_mask_s cn58xx;
+	struct cvmx_pip_tag_mask_s cn58xxp1;
+	struct cvmx_pip_tag_mask_s cn61xx;
+	struct cvmx_pip_tag_mask_s cn63xx;
+	struct cvmx_pip_tag_mask_s cn63xxp1;
+	struct cvmx_pip_tag_mask_s cn66xx;
+	struct cvmx_pip_tag_mask_s cn68xx;
+	struct cvmx_pip_tag_mask_s cn68xxp1;
+	struct cvmx_pip_tag_mask_s cn70xx;
+	struct cvmx_pip_tag_mask_s cn70xxp1;
+	struct cvmx_pip_tag_mask_s cnf71xx;
+};
+
+typedef union cvmx_pip_tag_mask cvmx_pip_tag_mask_t;
+
+/**
+ * cvmx_pip_tag_secret
+ *
+ * The source and destination IV's provide a mechanism for each Octeon to be unique.
+ *
+ */
+union cvmx_pip_tag_secret {
+	u64 u64;
+	struct cvmx_pip_tag_secret_s {
+		u64 reserved_32_63 : 32;
+		u64 dst : 16;
+		u64 src : 16;
+	} s;
+	struct cvmx_pip_tag_secret_s cn30xx;
+	struct cvmx_pip_tag_secret_s cn31xx;
+	struct cvmx_pip_tag_secret_s cn38xx;
+	struct cvmx_pip_tag_secret_s cn38xxp2;
+	struct cvmx_pip_tag_secret_s cn50xx;
+	struct cvmx_pip_tag_secret_s cn52xx;
+	struct cvmx_pip_tag_secret_s cn52xxp1;
+	struct cvmx_pip_tag_secret_s cn56xx;
+	struct cvmx_pip_tag_secret_s cn56xxp1;
+	struct cvmx_pip_tag_secret_s cn58xx;
+	struct cvmx_pip_tag_secret_s cn58xxp1;
+	struct cvmx_pip_tag_secret_s cn61xx;
+	struct cvmx_pip_tag_secret_s cn63xx;
+	struct cvmx_pip_tag_secret_s cn63xxp1;
+	struct cvmx_pip_tag_secret_s cn66xx;
+	struct cvmx_pip_tag_secret_s cn68xx;
+	struct cvmx_pip_tag_secret_s cn68xxp1;
+	struct cvmx_pip_tag_secret_s cn70xx;
+	struct cvmx_pip_tag_secret_s cn70xxp1;
+	struct cvmx_pip_tag_secret_s cnf71xx;
+};
+
+typedef union cvmx_pip_tag_secret cvmx_pip_tag_secret_t;
+
+/**
+ * cvmx_pip_todo_entry
+ *
+ * Summary of the current packet that has completed and waiting to be processed
+ *
+ */
+union cvmx_pip_todo_entry {
+	u64 u64;
+	struct cvmx_pip_todo_entry_s {
+		u64 val : 1;
+		u64 reserved_62_62 : 1;
+		u64 entry : 62;
+	} s;
+	struct cvmx_pip_todo_entry_s cn30xx;
+	struct cvmx_pip_todo_entry_s cn31xx;
+	struct cvmx_pip_todo_entry_s cn38xx;
+	struct cvmx_pip_todo_entry_s cn38xxp2;
+	struct cvmx_pip_todo_entry_s cn50xx;
+	struct cvmx_pip_todo_entry_s cn52xx;
+	struct cvmx_pip_todo_entry_s cn52xxp1;
+	struct cvmx_pip_todo_entry_s cn56xx;
+	struct cvmx_pip_todo_entry_s cn56xxp1;
+	struct cvmx_pip_todo_entry_s cn58xx;
+	struct cvmx_pip_todo_entry_s cn58xxp1;
+	struct cvmx_pip_todo_entry_s cn61xx;
+	struct cvmx_pip_todo_entry_s cn63xx;
+	struct cvmx_pip_todo_entry_s cn63xxp1;
+	struct cvmx_pip_todo_entry_s cn66xx;
+	struct cvmx_pip_todo_entry_s cn68xx;
+	struct cvmx_pip_todo_entry_s cn68xxp1;
+	struct cvmx_pip_todo_entry_s cn70xx;
+	struct cvmx_pip_todo_entry_s cn70xxp1;
+	struct cvmx_pip_todo_entry_s cnf71xx;
+};
+
+typedef union cvmx_pip_todo_entry cvmx_pip_todo_entry_t;
+
+/**
+ * cvmx_pip_vlan_etypes#
+ */
+union cvmx_pip_vlan_etypesx {
+	u64 u64;
+	struct cvmx_pip_vlan_etypesx_s {
+		u64 type3 : 16;
+		u64 type2 : 16;
+		u64 type1 : 16;
+		u64 type0 : 16;
+	} s;
+	struct cvmx_pip_vlan_etypesx_s cn61xx;
+	struct cvmx_pip_vlan_etypesx_s cn66xx;
+	struct cvmx_pip_vlan_etypesx_s cn68xx;
+	struct cvmx_pip_vlan_etypesx_s cn70xx;
+	struct cvmx_pip_vlan_etypesx_s cn70xxp1;
+	struct cvmx_pip_vlan_etypesx_s cnf71xx;
+};
+
+typedef union cvmx_pip_vlan_etypesx cvmx_pip_vlan_etypesx_t;
+
+/**
+ * cvmx_pip_xstat0_prt#
+ *
+ * PIP_XSTAT0_PRT = PIP_XSTAT_DRP_PKTS / PIP_XSTAT_DRP_OCTS
+ *
+ */
+union cvmx_pip_xstat0_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat0_prtx_s {
+		u64 drp_pkts : 32;
+		u64 drp_octs : 32;
+	} s;
+	struct cvmx_pip_xstat0_prtx_s cn63xx;
+	struct cvmx_pip_xstat0_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat0_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat0_prtx cvmx_pip_xstat0_prtx_t;
+
+/**
+ * cvmx_pip_xstat10_prt#
+ *
+ * PIP_XSTAT10_PRTX = PIP_XSTAT_L2_MCAST / PIP_XSTAT_L2_BCAST
+ *
+ */
+union cvmx_pip_xstat10_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat10_prtx_s {
+		u64 bcast : 32;
+		u64 mcast : 32;
+	} s;
+	struct cvmx_pip_xstat10_prtx_s cn63xx;
+	struct cvmx_pip_xstat10_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat10_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat10_prtx cvmx_pip_xstat10_prtx_t;
+
+/**
+ * cvmx_pip_xstat11_prt#
+ *
+ * PIP_XSTAT11_PRTX = PIP_XSTAT_L3_MCAST / PIP_XSTAT_L3_BCAST
+ *
+ */
+union cvmx_pip_xstat11_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat11_prtx_s {
+		u64 bcast : 32;
+		u64 mcast : 32;
+	} s;
+	struct cvmx_pip_xstat11_prtx_s cn63xx;
+	struct cvmx_pip_xstat11_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat11_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat11_prtx cvmx_pip_xstat11_prtx_t;
+
+/**
+ * cvmx_pip_xstat1_prt#
+ *
+ * PIP_XSTAT1_PRTX = PIP_XSTAT_OCTS
+ *
+ */
+union cvmx_pip_xstat1_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat1_prtx_s {
+		u64 reserved_48_63 : 16;
+		u64 octs : 48;
+	} s;
+	struct cvmx_pip_xstat1_prtx_s cn63xx;
+	struct cvmx_pip_xstat1_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat1_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat1_prtx cvmx_pip_xstat1_prtx_t;
+
+/**
+ * cvmx_pip_xstat2_prt#
+ *
+ * PIP_XSTAT2_PRTX = PIP_XSTAT_PKTS     / PIP_XSTAT_RAW
+ *
+ */
+union cvmx_pip_xstat2_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat2_prtx_s {
+		u64 pkts : 32;
+		u64 raw : 32;
+	} s;
+	struct cvmx_pip_xstat2_prtx_s cn63xx;
+	struct cvmx_pip_xstat2_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat2_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat2_prtx cvmx_pip_xstat2_prtx_t;
+
+/**
+ * cvmx_pip_xstat3_prt#
+ *
+ * PIP_XSTAT3_PRTX = PIP_XSTAT_BCST     / PIP_XSTAT_MCST
+ *
+ */
+union cvmx_pip_xstat3_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat3_prtx_s {
+		u64 bcst : 32;
+		u64 mcst : 32;
+	} s;
+	struct cvmx_pip_xstat3_prtx_s cn63xx;
+	struct cvmx_pip_xstat3_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat3_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat3_prtx cvmx_pip_xstat3_prtx_t;
+
+/**
+ * cvmx_pip_xstat4_prt#
+ *
+ * PIP_XSTAT4_PRTX = PIP_XSTAT_HIST1    / PIP_XSTAT_HIST0
+ *
+ */
+union cvmx_pip_xstat4_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat4_prtx_s {
+		u64 h65to127 : 32;
+		u64 h64 : 32;
+	} s;
+	struct cvmx_pip_xstat4_prtx_s cn63xx;
+	struct cvmx_pip_xstat4_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat4_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat4_prtx cvmx_pip_xstat4_prtx_t;
+
+/**
+ * cvmx_pip_xstat5_prt#
+ *
+ * PIP_XSTAT5_PRTX = PIP_XSTAT_HIST3    / PIP_XSTAT_HIST2
+ *
+ */
+union cvmx_pip_xstat5_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat5_prtx_s {
+		u64 h256to511 : 32;
+		u64 h128to255 : 32;
+	} s;
+	struct cvmx_pip_xstat5_prtx_s cn63xx;
+	struct cvmx_pip_xstat5_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat5_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat5_prtx cvmx_pip_xstat5_prtx_t;
+
+/**
+ * cvmx_pip_xstat6_prt#
+ *
+ * PIP_XSTAT6_PRTX = PIP_XSTAT_HIST5    / PIP_XSTAT_HIST4
+ *
+ */
+union cvmx_pip_xstat6_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat6_prtx_s {
+		u64 h1024to1518 : 32;
+		u64 h512to1023 : 32;
+	} s;
+	struct cvmx_pip_xstat6_prtx_s cn63xx;
+	struct cvmx_pip_xstat6_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat6_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat6_prtx cvmx_pip_xstat6_prtx_t;
+
+/**
+ * cvmx_pip_xstat7_prt#
+ *
+ * PIP_XSTAT7_PRTX = PIP_XSTAT_FCS      / PIP_XSTAT_HIST6
+ *
+ *
+ * Notes:
+ * DPI does not check FCS, therefore FCS will never increment on DPI ports 32-35
+ * sRIO does not check FCS, therefore FCS will never increment on sRIO ports 40-47
+ */
+union cvmx_pip_xstat7_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat7_prtx_s {
+		u64 fcs : 32;
+		u64 h1519 : 32;
+	} s;
+	struct cvmx_pip_xstat7_prtx_s cn63xx;
+	struct cvmx_pip_xstat7_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat7_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat7_prtx cvmx_pip_xstat7_prtx_t;
+
+/**
+ * cvmx_pip_xstat8_prt#
+ *
+ * PIP_XSTAT8_PRTX = PIP_XSTAT_FRAG     / PIP_XSTAT_UNDER
+ *
+ *
+ * Notes:
+ * DPI does not check FCS, therefore FRAG will never increment on DPI ports 32-35
+ * sRIO does not check FCS, therefore FRAG will never increment on sRIO ports 40-47
+ */
+union cvmx_pip_xstat8_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat8_prtx_s {
+		u64 frag : 32;
+		u64 undersz : 32;
+	} s;
+	struct cvmx_pip_xstat8_prtx_s cn63xx;
+	struct cvmx_pip_xstat8_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat8_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat8_prtx cvmx_pip_xstat8_prtx_t;
+
+/**
+ * cvmx_pip_xstat9_prt#
+ *
+ * PIP_XSTAT9_PRTX = PIP_XSTAT_JABBER   / PIP_XSTAT_OVER
+ *
+ *
+ * Notes:
+ * DPI does not check FCS, therefore JABBER will never increment on DPI ports 32-35
+ * sRIO does not check FCS, therefore JABBER will never increment on sRIO ports 40-47 due to FCS errors
+ * sRIO does use the JABBER opcode to communicate sRIO error, therefore JABBER can increment under the sRIO error conditions
+ */
+union cvmx_pip_xstat9_prtx {
+	u64 u64;
+	struct cvmx_pip_xstat9_prtx_s {
+		u64 jabber : 32;
+		u64 oversz : 32;
+	} s;
+	struct cvmx_pip_xstat9_prtx_s cn63xx;
+	struct cvmx_pip_xstat9_prtx_s cn63xxp1;
+	struct cvmx_pip_xstat9_prtx_s cn66xx;
+};
+
+typedef union cvmx_pip_xstat9_prtx cvmx_pip_xstat9_prtx_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pip.h b/arch/mips/mach-octeon/include/mach/cvmx-pip.h
new file mode 100644
index 0000000..013f533
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pip.h
@@ -0,0 +1,1080 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the hardware Packet Input Processing unit.
+ */
+
+#ifndef __CVMX_PIP_H__
+#define __CVMX_PIP_H__
+
+#include "cvmx-wqe.h"
+#include "cvmx-pki.h"
+#include "cvmx-helper-pki.h"
+
+#include "cvmx-helper.h"
+#include "cvmx-helper-util.h"
+#include "cvmx-pki-resources.h"
+
+#define CVMX_PIP_NUM_INPUT_PORTS 46
+#define CVMX_PIP_NUM_WATCHERS	 8
+
+/*
+ * Encodes the different error and exception codes
+ */
+typedef enum {
+	CVMX_PIP_L4_NO_ERR = 0ull,
+	/*        1  = TCP (UDP) packet not long enough to cover TCP (UDP) header */
+	CVMX_PIP_L4_MAL_ERR = 1ull,
+	/*        2  = TCP/UDP checksum failure */
+	CVMX_PIP_CHK_ERR = 2ull,
+	/*        3  = TCP/UDP length check (TCP/UDP length does not match IP length) */
+	CVMX_PIP_L4_LENGTH_ERR = 3ull,
+	/*        4  = illegal TCP/UDP port (either source or dest port is zero) */
+	CVMX_PIP_BAD_PRT_ERR = 4ull,
+	/*        8  = TCP flags = FIN only */
+	CVMX_PIP_TCP_FLG8_ERR = 8ull,
+	/*        9  = TCP flags = 0 */
+	CVMX_PIP_TCP_FLG9_ERR = 9ull,
+	/*        10 = TCP flags = FIN+RST+* */
+	CVMX_PIP_TCP_FLG10_ERR = 10ull,
+	/*        11 = TCP flags = SYN+URG+* */
+	CVMX_PIP_TCP_FLG11_ERR = 11ull,
+	/*        12 = TCP flags = SYN+RST+* */
+	CVMX_PIP_TCP_FLG12_ERR = 12ull,
+	/*        13 = TCP flags = SYN+FIN+* */
+	CVMX_PIP_TCP_FLG13_ERR = 13ull
+} cvmx_pip_l4_err_t;
+
+typedef enum {
+	CVMX_PIP_IP_NO_ERR = 0ull,
+	/*        1 = not IPv4 or IPv6 */
+	CVMX_PIP_NOT_IP = 1ull,
+	/*        2 = IPv4 header checksum violation */
+	CVMX_PIP_IPV4_HDR_CHK = 2ull,
+	/*        3 = malformed (packet not long enough to cover IP hdr) */
+	CVMX_PIP_IP_MAL_HDR = 3ull,
+	/*        4 = malformed (packet not long enough to cover len in IP hdr) */
+	CVMX_PIP_IP_MAL_PKT = 4ull,
+	/*        5 = TTL / hop count equal zero */
+	CVMX_PIP_TTL_HOP = 5ull,
+	/*        6 = IPv4 options / IPv6 early extension headers */
+	CVMX_PIP_OPTS = 6ull
+} cvmx_pip_ip_exc_t;
+
+/**
+ * NOTES
+ *       late collision (data received before collision)
+ *            late collisions cannot be detected by the receiver
+ *            they would appear as JAM bits which would appear as bad FCS
+ *            or carrier extend error which is CVMX_PIP_EXTEND_ERR
+ */
+typedef enum {
+	/**
+	 * No error
+	 */
+	CVMX_PIP_RX_NO_ERR = 0ull,
+
+	CVMX_PIP_PARTIAL_ERR =
+		1ull, /* RGM+SPI            1 = partially received packet (buffering/bandwidth not adequate) */
+	CVMX_PIP_JABBER_ERR =
+		2ull, /* RGM+SPI            2 = receive packet too large and truncated */
+	CVMX_PIP_OVER_FCS_ERR =
+		3ull, /* RGM                3 = max frame error (pkt len > max frame len) (with FCS error) */
+	CVMX_PIP_OVER_ERR =
+		4ull, /* RGM+SPI            4 = max frame error (pkt len > max frame len) */
+	CVMX_PIP_ALIGN_ERR =
+		5ull, /* RGM                5 = nibble error (data not byte multiple - 100M and 10M only) */
+	CVMX_PIP_UNDER_FCS_ERR =
+		6ull, /* RGM                6 = min frame error (pkt len < min frame len) (with FCS error) */
+	CVMX_PIP_GMX_FCS_ERR = 7ull, /* RGM                7 = FCS error */
+	CVMX_PIP_UNDER_ERR =
+		8ull, /* RGM+SPI            8 = min frame error (pkt len < min frame len) */
+	CVMX_PIP_EXTEND_ERR = 9ull, /* RGM                9 = Frame carrier extend error */
+	CVMX_PIP_TERMINATE_ERR =
+		9ull, /* XAUI               9 = Packet was terminated with an idle cycle */
+	CVMX_PIP_LENGTH_ERR =
+		10ull, /* RGM               10 = length mismatch (len did not match len in L2 length/type) */
+	CVMX_PIP_DAT_ERR =
+		11ull, /* RGM               11 = Frame error (some or all data bits marked err) */
+	CVMX_PIP_DIP_ERR = 11ull, /*     SPI           11 = DIP4 error */
+	CVMX_PIP_SKIP_ERR =
+		12ull, /* RGM               12 = packet was not large enough to pass the skipper - no inspection could occur */
+	CVMX_PIP_NIBBLE_ERR =
+		13ull, /* RGM               13 = studder error (data not repeated - 100M and 10M only) */
+	CVMX_PIP_PIP_FCS = 16L, /* RGM+SPI           16 = FCS error */
+	CVMX_PIP_PIP_SKIP_ERR =
+		17L, /* RGM+SPI+PCI       17 = packet was not large enough to pass the skipper - no inspection could occur */
+	CVMX_PIP_PIP_L2_MAL_HDR =
+		18L, /* RGM+SPI+PCI       18 = malformed l2 (packet not long enough to cover L2 hdr) */
+	CVMX_PIP_PUNY_ERR =
+		47L /* SGMII             47 = PUNY error (packet was 4B or less when FCS stripping is enabled) */
+	/* NOTES
+	 *       xx = late collision (data received before collision)
+	 *            late collisions cannot be detected by the receiver
+	 *            they would appear as JAM bits which would appear as bad FCS
+	 *            or carrier extend error which is CVMX_PIP_EXTEND_ERR
+	 */
+} cvmx_pip_rcv_err_t;
+
+/**
+ * This defines the err_code field errors in the work Q entry
+ */
+typedef union {
+	cvmx_pip_l4_err_t l4_err;
+	cvmx_pip_ip_exc_t ip_exc;
+	cvmx_pip_rcv_err_t rcv_err;
+} cvmx_pip_err_t;
+
+/**
+ * Status statistics for a port
+ */
+typedef struct {
+	u64 dropped_octets;
+	u64 dropped_packets;
+	u64 pci_raw_packets;
+	u64 octets;
+	u64 packets;
+	u64 multicast_packets;
+	u64 broadcast_packets;
+	u64 len_64_packets;
+	u64 len_65_127_packets;
+	u64 len_128_255_packets;
+	u64 len_256_511_packets;
+	u64 len_512_1023_packets;
+	u64 len_1024_1518_packets;
+	u64 len_1519_max_packets;
+	u64 fcs_align_err_packets;
+	u64 runt_packets;
+	u64 runt_crc_packets;
+	u64 oversize_packets;
+	u64 oversize_crc_packets;
+	u64 inb_packets;
+	u64 inb_octets;
+	u64 inb_errors;
+	u64 mcast_l2_red_packets;
+	u64 bcast_l2_red_packets;
+	u64 mcast_l3_red_packets;
+	u64 bcast_l3_red_packets;
+} cvmx_pip_port_status_t;
+
+/**
+ * Definition of the PIP custom header that can be prepended
+ * to a packet by external hardware.
+ */
+typedef union {
+	u64 u64;
+	struct {
+		u64 rawfull : 1;
+		u64 reserved0 : 5;
+		cvmx_pip_port_parse_mode_t parse_mode : 2;
+		u64 reserved1 : 1;
+		u64 skip_len : 7;
+		u64 grpext : 2;
+		u64 nqos : 1;
+		u64 ngrp : 1;
+		u64 ntt : 1;
+		u64 ntag : 1;
+		u64 qos : 3;
+		u64 grp : 4;
+		u64 rs : 1;
+		cvmx_pow_tag_type_t tag_type : 2;
+		u64 tag : 32;
+	} s;
+} cvmx_pip_pkt_inst_hdr_t;
+
+enum cvmx_pki_pcam_match {
+	CVMX_PKI_PCAM_MATCH_IP,
+	CVMX_PKI_PCAM_MATCH_IPV4,
+	CVMX_PKI_PCAM_MATCH_IPV6,
+	CVMX_PKI_PCAM_MATCH_TCP
+};
+
+/* CSR typedefs have been moved to cvmx-pip-defs.h */
+static inline int cvmx_pip_config_watcher(int index, int type, u16 match, u16 mask, int grp,
+					  int qos)
+{
+	if (index >= CVMX_PIP_NUM_WATCHERS) {
+		debug("ERROR: pip watcher %d is > than supported\n", index);
+		return -1;
+	}
+	if (octeon_has_feature(OCTEON_FEATURE_PKI)) {
+		/* store in software for now, only when the watcher is enabled program the entry*/
+		if (type == CVMX_PIP_QOS_WATCH_PROTNH) {
+			qos_watcher[index].field = CVMX_PKI_PCAM_TERM_L3_FLAGS;
+			qos_watcher[index].data = (u32)(match << 16);
+			qos_watcher[index].data_mask = (u32)(mask << 16);
+			qos_watcher[index].advance = 0;
+		} else if (type == CVMX_PIP_QOS_WATCH_TCP) {
+			qos_watcher[index].field = CVMX_PKI_PCAM_TERM_L4_PORT;
+			qos_watcher[index].data = 0x060000;
+			qos_watcher[index].data |= (u32)match;
+			qos_watcher[index].data_mask = (u32)(mask);
+			qos_watcher[index].advance = 0;
+		} else if (type == CVMX_PIP_QOS_WATCH_UDP) {
+			qos_watcher[index].field = CVMX_PKI_PCAM_TERM_L4_PORT;
+			qos_watcher[index].data = 0x110000;
+			qos_watcher[index].data |= (u32)match;
+			qos_watcher[index].data_mask = (u32)(mask);
+			qos_watcher[index].advance = 0;
+		} else if (type == 0x4 /*CVMX_PIP_QOS_WATCH_ETHERTYPE*/) {
+			qos_watcher[index].field = CVMX_PKI_PCAM_TERM_ETHTYPE0;
+			if (match == 0x8100) {
+				debug("ERROR: default vlan entry already exist, cant set watcher\n");
+				return -1;
+			}
+			qos_watcher[index].data = (u32)(match << 16);
+			qos_watcher[index].data_mask = (u32)(mask << 16);
+			qos_watcher[index].advance = 4;
+		} else {
+			debug("ERROR: Unsupported watcher type %d\n", type);
+			return -1;
+		}
+		if (grp >= 32) {
+			debug("ERROR: grp %d out of range for backward compat 78xx\n", grp);
+			return -1;
+		}
+		qos_watcher[index].sso_grp = (u8)(grp << 3 | qos);
+		qos_watcher[index].configured = 1;
+	} else {
+		/* Implement it later */
+	}
+	return 0;
+}
+
+static inline int __cvmx_pip_set_tag_type(int node, int style, int tag_type, int field)
+{
+	struct cvmx_pki_style_config style_cfg;
+	int style_num;
+	int pcam_offset;
+	int bank;
+	struct cvmx_pki_pcam_input pcam_input;
+	struct cvmx_pki_pcam_action pcam_action;
+
+	/* All other style parameters remain same except tag type */
+	cvmx_pki_read_style_config(node, style, CVMX_PKI_CLUSTER_ALL, &style_cfg);
+	style_cfg.parm_cfg.tag_type = (enum cvmx_sso_tag_type)tag_type;
+	style_num = cvmx_pki_style_alloc(node, -1);
+	if (style_num < 0) {
+		debug("ERROR: style not available to set tag type\n");
+		return -1;
+	}
+	cvmx_pki_write_style_config(node, style_num, CVMX_PKI_CLUSTER_ALL, &style_cfg);
+	memset(&pcam_input, 0, sizeof(pcam_input));
+	memset(&pcam_action, 0, sizeof(pcam_action));
+	pcam_input.style = style;
+	pcam_input.style_mask = 0xff;
+	if (field == CVMX_PKI_PCAM_MATCH_IP) {
+		pcam_input.field = CVMX_PKI_PCAM_TERM_ETHTYPE0;
+		pcam_input.field_mask = 0xff;
+		pcam_input.data = 0x08000000;
+		pcam_input.data_mask = 0xffff0000;
+		pcam_action.pointer_advance = 4;
+		/* legacy will write to all clusters*/
+		bank = 0;
+		pcam_offset = cvmx_pki_pcam_entry_alloc(node, CVMX_PKI_FIND_AVAL_ENTRY, bank,
+							CVMX_PKI_CLUSTER_ALL);
+		if (pcam_offset < 0) {
+			debug("ERROR: pcam entry not available to enable qos watcher\n");
+			cvmx_pki_style_free(node, style_num);
+			return -1;
+		}
+		pcam_action.parse_mode_chg = CVMX_PKI_PARSE_NO_CHG;
+		pcam_action.layer_type_set = CVMX_PKI_LTYPE_E_NONE;
+		pcam_action.style_add = (u8)(style_num - style);
+		cvmx_pki_pcam_write_entry(node, pcam_offset, CVMX_PKI_CLUSTER_ALL, pcam_input,
+					  pcam_action);
+		field = CVMX_PKI_PCAM_MATCH_IPV6;
+	}
+	if (field == CVMX_PKI_PCAM_MATCH_IPV4) {
+		pcam_input.field = CVMX_PKI_PCAM_TERM_ETHTYPE0;
+		pcam_input.field_mask = 0xff;
+		pcam_input.data = 0x08000000;
+		pcam_input.data_mask = 0xffff0000;
+		pcam_action.pointer_advance = 4;
+	} else if (field == CVMX_PKI_PCAM_MATCH_IPV6) {
+		pcam_input.field = CVMX_PKI_PCAM_TERM_ETHTYPE0;
+		pcam_input.field_mask = 0xff;
+		pcam_input.data = 0x86dd00000;
+		pcam_input.data_mask = 0xffff0000;
+		pcam_action.pointer_advance = 4;
+	} else if (field == CVMX_PKI_PCAM_MATCH_TCP) {
+		pcam_input.field = CVMX_PKI_PCAM_TERM_L4_PORT;
+		pcam_input.field_mask = 0xff;
+		pcam_input.data = 0x60000;
+		pcam_input.data_mask = 0xff0000;
+		pcam_action.pointer_advance = 0;
+	}
+	pcam_action.parse_mode_chg = CVMX_PKI_PARSE_NO_CHG;
+	pcam_action.layer_type_set = CVMX_PKI_LTYPE_E_NONE;
+	pcam_action.style_add = (u8)(style_num - style);
+	bank = pcam_input.field & 0x01;
+	pcam_offset = cvmx_pki_pcam_entry_alloc(node, CVMX_PKI_FIND_AVAL_ENTRY, bank,
+						CVMX_PKI_CLUSTER_ALL);
+	if (pcam_offset < 0) {
+		debug("ERROR: pcam entry not available to enable qos watcher\n");
+		cvmx_pki_style_free(node, style_num);
+		return -1;
+	}
+	cvmx_pki_pcam_write_entry(node, pcam_offset, CVMX_PKI_CLUSTER_ALL, pcam_input, pcam_action);
+	return style_num;
+}
+
+/* Only for legacy internal use */
+static inline int __cvmx_pip_enable_watcher_78xx(int node, int index, int style)
+{
+	struct cvmx_pki_style_config style_cfg;
+	struct cvmx_pki_qpg_config qpg_cfg;
+	struct cvmx_pki_pcam_input pcam_input;
+	struct cvmx_pki_pcam_action pcam_action;
+	int style_num;
+	int qpg_offset;
+	int pcam_offset;
+	int bank;
+
+	if (!qos_watcher[index].configured) {
+		debug("ERROR: qos watcher %d should be configured before enable\n", index);
+		return -1;
+	}
+	/* All other style parameters remain same except grp and qos and qps base */
+	cvmx_pki_read_style_config(node, style, CVMX_PKI_CLUSTER_ALL, &style_cfg);
+	cvmx_pki_read_qpg_entry(node, style_cfg.parm_cfg.qpg_base, &qpg_cfg);
+	qpg_cfg.qpg_base = CVMX_PKI_FIND_AVAL_ENTRY;
+	qpg_cfg.grp_ok = qos_watcher[index].sso_grp;
+	qpg_cfg.grp_bad = qos_watcher[index].sso_grp;
+	qpg_offset = cvmx_helper_pki_set_qpg_entry(node, &qpg_cfg);
+	if (qpg_offset == -1) {
+		debug("Warning: no new qpg entry available to enable watcher\n");
+		return -1;
+	}
+	/* try to reserve the style, if it is not configured already, reserve
+	   and configure it */
+	style_cfg.parm_cfg.qpg_base = qpg_offset;
+	style_num = cvmx_pki_style_alloc(node, -1);
+	if (style_num < 0) {
+		debug("ERROR: style not available to enable qos watcher\n");
+		cvmx_pki_qpg_entry_free(node, qpg_offset, 1);
+		return -1;
+	}
+	cvmx_pki_write_style_config(node, style_num, CVMX_PKI_CLUSTER_ALL, &style_cfg);
+	/* legacy will write to all clusters*/
+	bank = qos_watcher[index].field & 0x01;
+	pcam_offset = cvmx_pki_pcam_entry_alloc(node, CVMX_PKI_FIND_AVAL_ENTRY, bank,
+						CVMX_PKI_CLUSTER_ALL);
+	if (pcam_offset < 0) {
+		debug("ERROR: pcam entry not available to enable qos watcher\n");
+		cvmx_pki_style_free(node, style_num);
+		cvmx_pki_qpg_entry_free(node, qpg_offset, 1);
+		return -1;
+	}
+	memset(&pcam_input, 0, sizeof(pcam_input));
+	memset(&pcam_action, 0, sizeof(pcam_action));
+	pcam_input.style = style;
+	pcam_input.style_mask = 0xff;
+	pcam_input.field = qos_watcher[index].field;
+	pcam_input.field_mask = 0xff;
+	pcam_input.data = qos_watcher[index].data;
+	pcam_input.data_mask = qos_watcher[index].data_mask;
+	pcam_action.parse_mode_chg = CVMX_PKI_PARSE_NO_CHG;
+	pcam_action.layer_type_set = CVMX_PKI_LTYPE_E_NONE;
+	pcam_action.style_add = (u8)(style_num - style);
+	pcam_action.pointer_advance = qos_watcher[index].advance;
+	cvmx_pki_pcam_write_entry(node, pcam_offset, CVMX_PKI_CLUSTER_ALL, pcam_input, pcam_action);
+	return 0;
+}
+
+/**
+ * Configure an ethernet input port
+ *
+ * @param ipd_port Port number to configure
+ * @param port_cfg Port hardware configuration
+ * @param port_tag_cfg Port POW tagging configuration
+ */
+static inline void cvmx_pip_config_port(u64 ipd_port, cvmx_pip_prt_cfgx_t port_cfg,
+					cvmx_pip_prt_tagx_t port_tag_cfg)
+{
+	struct cvmx_pki_qpg_config qpg_cfg;
+	int qpg_offset;
+	u8 tcp_tag = 0xff;
+	u8 ip_tag = 0xaa;
+	int style, nstyle, n4style, n6style;
+
+	if (octeon_has_feature(OCTEON_FEATURE_PKI)) {
+		struct cvmx_pki_port_config pki_prt_cfg;
+		struct cvmx_xport xp = cvmx_helper_ipd_port_to_xport(ipd_port);
+
+		cvmx_pki_get_port_config(ipd_port, &pki_prt_cfg);
+		style = pki_prt_cfg.pkind_cfg.initial_style;
+		if (port_cfg.s.ih_pri || port_cfg.s.vlan_len || port_cfg.s.pad_len)
+			debug("Warning: 78xx: use different config for this option\n");
+		pki_prt_cfg.style_cfg.parm_cfg.minmax_sel = port_cfg.s.len_chk_sel;
+		pki_prt_cfg.style_cfg.parm_cfg.lenerr_en = port_cfg.s.lenerr_en;
+		pki_prt_cfg.style_cfg.parm_cfg.maxerr_en = port_cfg.s.maxerr_en;
+		pki_prt_cfg.style_cfg.parm_cfg.minerr_en = port_cfg.s.minerr_en;
+		pki_prt_cfg.style_cfg.parm_cfg.fcs_chk = port_cfg.s.crc_en;
+		if (port_cfg.s.grp_wat || port_cfg.s.qos_wat || port_cfg.s.grp_wat_47 ||
+		    port_cfg.s.qos_wat_47) {
+			u8 group_mask = (u8)(port_cfg.s.grp_wat | (u8)(port_cfg.s.grp_wat_47 << 4));
+			u8 qos_mask = (u8)(port_cfg.s.qos_wat | (u8)(port_cfg.s.qos_wat_47 << 4));
+			int i;
+
+			for (i = 0; i < CVMX_PIP_NUM_WATCHERS; i++) {
+				if ((group_mask & (1 << i)) || (qos_mask & (1 << i)))
+					__cvmx_pip_enable_watcher_78xx(xp.node, i, style);
+			}
+		}
+		if (port_tag_cfg.s.tag_mode) {
+			if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+				cvmx_printf("Warning: mask tag is not supported in 78xx pass1\n");
+			else {
+			}
+			/* need to implement for 78xx*/
+		}
+		if (port_cfg.s.tag_inc)
+			debug("Warning: 78xx uses differnet method for tag generation\n");
+		pki_prt_cfg.style_cfg.parm_cfg.rawdrp = port_cfg.s.rawdrp;
+		pki_prt_cfg.pkind_cfg.parse_en.inst_hdr = port_cfg.s.inst_hdr;
+		if (port_cfg.s.hg_qos)
+			pki_prt_cfg.style_cfg.parm_cfg.qpg_qos = CVMX_PKI_QPG_QOS_HIGIG;
+		else if (port_cfg.s.qos_vlan)
+			pki_prt_cfg.style_cfg.parm_cfg.qpg_qos = CVMX_PKI_QPG_QOS_VLAN;
+		else if (port_cfg.s.qos_diff)
+			pki_prt_cfg.style_cfg.parm_cfg.qpg_qos = CVMX_PKI_QPG_QOS_DIFFSERV;
+		if (port_cfg.s.qos_vod)
+			debug("Warning: 78xx needs pcam entries installed to achieve qos_vod\n");
+		if (port_cfg.s.qos) {
+			cvmx_pki_read_qpg_entry(xp.node, pki_prt_cfg.style_cfg.parm_cfg.qpg_base,
+						&qpg_cfg);
+			qpg_cfg.qpg_base = CVMX_PKI_FIND_AVAL_ENTRY;
+			qpg_cfg.grp_ok |= port_cfg.s.qos;
+			qpg_cfg.grp_bad |= port_cfg.s.qos;
+			qpg_offset = cvmx_helper_pki_set_qpg_entry(xp.node, &qpg_cfg);
+			if (qpg_offset == -1)
+				debug("Warning: no new qpg entry available, will not modify qos\n");
+			else
+				pki_prt_cfg.style_cfg.parm_cfg.qpg_base = qpg_offset;
+		}
+		if (port_tag_cfg.s.grp != pki_dflt_sso_grp[xp.node].group) {
+			cvmx_pki_read_qpg_entry(xp.node, pki_prt_cfg.style_cfg.parm_cfg.qpg_base,
+						&qpg_cfg);
+			qpg_cfg.qpg_base = CVMX_PKI_FIND_AVAL_ENTRY;
+			qpg_cfg.grp_ok |= (u8)(port_tag_cfg.s.grp << 3);
+			qpg_cfg.grp_bad |= (u8)(port_tag_cfg.s.grp << 3);
+			qpg_offset = cvmx_helper_pki_set_qpg_entry(xp.node, &qpg_cfg);
+			if (qpg_offset == -1)
+				debug("Warning: no new qpg entry available, will not modify group\n");
+			else
+				pki_prt_cfg.style_cfg.parm_cfg.qpg_base = qpg_offset;
+		}
+		pki_prt_cfg.pkind_cfg.parse_en.dsa_en = port_cfg.s.dsa_en;
+		pki_prt_cfg.pkind_cfg.parse_en.hg_en = port_cfg.s.higig_en;
+		pki_prt_cfg.style_cfg.tag_cfg.tag_fields.layer_c_src =
+			port_tag_cfg.s.ip6_src_flag | port_tag_cfg.s.ip4_src_flag;
+		pki_prt_cfg.style_cfg.tag_cfg.tag_fields.layer_c_dst =
+			port_tag_cfg.s.ip6_dst_flag | port_tag_cfg.s.ip4_dst_flag;
+		pki_prt_cfg.style_cfg.tag_cfg.tag_fields.ip_prot_nexthdr =
+			port_tag_cfg.s.ip6_nxth_flag | port_tag_cfg.s.ip4_pctl_flag;
+		pki_prt_cfg.style_cfg.tag_cfg.tag_fields.layer_d_src =
+			port_tag_cfg.s.ip6_sprt_flag | port_tag_cfg.s.ip4_sprt_flag;
+		pki_prt_cfg.style_cfg.tag_cfg.tag_fields.layer_d_dst =
+			port_tag_cfg.s.ip6_dprt_flag | port_tag_cfg.s.ip4_dprt_flag;
+		pki_prt_cfg.style_cfg.tag_cfg.tag_fields.input_port = port_tag_cfg.s.inc_prt_flag;
+		pki_prt_cfg.style_cfg.tag_cfg.tag_fields.first_vlan = port_tag_cfg.s.inc_vlan;
+		pki_prt_cfg.style_cfg.tag_cfg.tag_fields.second_vlan = port_tag_cfg.s.inc_vs;
+
+		if (port_tag_cfg.s.tcp6_tag_type == port_tag_cfg.s.tcp4_tag_type)
+			tcp_tag = port_tag_cfg.s.tcp6_tag_type;
+		if (port_tag_cfg.s.ip6_tag_type == port_tag_cfg.s.ip4_tag_type)
+			ip_tag = port_tag_cfg.s.ip6_tag_type;
+		pki_prt_cfg.style_cfg.parm_cfg.tag_type =
+			(enum cvmx_sso_tag_type)port_tag_cfg.s.non_tag_type;
+		if (tcp_tag == ip_tag && tcp_tag == port_tag_cfg.s.non_tag_type)
+			pki_prt_cfg.style_cfg.parm_cfg.tag_type = (enum cvmx_sso_tag_type)tcp_tag;
+		else if (tcp_tag == ip_tag) {
+			/* allocate and copy style */
+			/* modify tag type */
+			/*pcam entry for ip6 && ip4 match*/
+			/* default is non tag type */
+			__cvmx_pip_set_tag_type(xp.node, style, ip_tag, CVMX_PKI_PCAM_MATCH_IP);
+		} else if (ip_tag == port_tag_cfg.s.non_tag_type) {
+			/* allocate and copy style */
+			/* modify tag type */
+			/*pcam entry for tcp6 & tcp4 match*/
+			/* default is non tag type */
+			__cvmx_pip_set_tag_type(xp.node, style, tcp_tag, CVMX_PKI_PCAM_MATCH_TCP);
+		} else {
+			if (ip_tag != 0xaa) {
+				nstyle = __cvmx_pip_set_tag_type(xp.node, style, ip_tag,
+								 CVMX_PKI_PCAM_MATCH_IP);
+				if (tcp_tag != 0xff)
+					__cvmx_pip_set_tag_type(xp.node, nstyle, tcp_tag,
+								CVMX_PKI_PCAM_MATCH_TCP);
+				else {
+					n4style = __cvmx_pip_set_tag_type(xp.node, nstyle, ip_tag,
+									  CVMX_PKI_PCAM_MATCH_IPV4);
+					__cvmx_pip_set_tag_type(xp.node, n4style,
+								port_tag_cfg.s.tcp4_tag_type,
+								CVMX_PKI_PCAM_MATCH_TCP);
+					n6style = __cvmx_pip_set_tag_type(xp.node, nstyle, ip_tag,
+									  CVMX_PKI_PCAM_MATCH_IPV6);
+					__cvmx_pip_set_tag_type(xp.node, n6style,
+								port_tag_cfg.s.tcp6_tag_type,
+								CVMX_PKI_PCAM_MATCH_TCP);
+				}
+			} else {
+				n4style = __cvmx_pip_set_tag_type(xp.node, style,
+								  port_tag_cfg.s.ip4_tag_type,
+								  CVMX_PKI_PCAM_MATCH_IPV4);
+				n6style = __cvmx_pip_set_tag_type(xp.node, style,
+								  port_tag_cfg.s.ip6_tag_type,
+								  CVMX_PKI_PCAM_MATCH_IPV6);
+				if (tcp_tag != 0xff) {
+					__cvmx_pip_set_tag_type(xp.node, n4style, tcp_tag,
+								CVMX_PKI_PCAM_MATCH_TCP);
+					__cvmx_pip_set_tag_type(xp.node, n6style, tcp_tag,
+								CVMX_PKI_PCAM_MATCH_TCP);
+				} else {
+					__cvmx_pip_set_tag_type(xp.node, n4style,
+								port_tag_cfg.s.tcp4_tag_type,
+								CVMX_PKI_PCAM_MATCH_TCP);
+					__cvmx_pip_set_tag_type(xp.node, n6style,
+								port_tag_cfg.s.tcp6_tag_type,
+								CVMX_PKI_PCAM_MATCH_TCP);
+				}
+			}
+		}
+		pki_prt_cfg.style_cfg.parm_cfg.qpg_dis_padd = !port_tag_cfg.s.portadd_en;
+
+		if (port_cfg.s.mode == 0x1)
+			pki_prt_cfg.pkind_cfg.initial_parse_mode = CVMX_PKI_PARSE_LA_TO_LG;
+		else if (port_cfg.s.mode == 0x2)
+			pki_prt_cfg.pkind_cfg.initial_parse_mode = CVMX_PKI_PARSE_LC_TO_LG;
+		else
+			pki_prt_cfg.pkind_cfg.initial_parse_mode = CVMX_PKI_PARSE_NOTHING;
+		/* This is only for backward compatibility, not all the parameters are supported in 78xx */
+		cvmx_pki_set_port_config(ipd_port, &pki_prt_cfg);
+	} else {
+		if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+			int interface, index, pknd;
+
+			interface = cvmx_helper_get_interface_num(ipd_port);
+			index = cvmx_helper_get_interface_index_num(ipd_port);
+			pknd = cvmx_helper_get_pknd(interface, index);
+
+			ipd_port = pknd; /* overload port_num with pknd */
+		}
+		csr_wr(CVMX_PIP_PRT_CFGX(ipd_port), port_cfg.u64);
+		csr_wr(CVMX_PIP_PRT_TAGX(ipd_port), port_tag_cfg.u64);
+	}
+}
+
+/**
+ * Configure the VLAN priority to QoS queue mapping.
+ *
+ * @param vlan_priority
+ *               VLAN priority (0-7)
+ * @param qos    QoS queue for packets matching this watcher
+ */
+static inline void cvmx_pip_config_vlan_qos(u64 vlan_priority, u64 qos)
+{
+	if (!octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		cvmx_pip_qos_vlanx_t pip_qos_vlanx;
+
+		pip_qos_vlanx.u64 = 0;
+		pip_qos_vlanx.s.qos = qos;
+		csr_wr(CVMX_PIP_QOS_VLANX(vlan_priority), pip_qos_vlanx.u64);
+	}
+}
+
+/**
+ * Configure the Diffserv to QoS queue mapping.
+ *
+ * @param diffserv Diffserv field value (0-63)
+ * @param qos      QoS queue for packets matching this watcher
+ */
+static inline void cvmx_pip_config_diffserv_qos(u64 diffserv, u64 qos)
+{
+	if (!octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		cvmx_pip_qos_diffx_t pip_qos_diffx;
+
+		pip_qos_diffx.u64 = 0;
+		pip_qos_diffx.s.qos = qos;
+		csr_wr(CVMX_PIP_QOS_DIFFX(diffserv), pip_qos_diffx.u64);
+	}
+}
+
+/**
+ * Get the status counters for a port for older non PKI chips.
+ *
+ * @param port_num Port number (ipd_port) to get statistics for.
+ * @param clear    Set to 1 to clear the counters after they are read
+ * @param status   Where to put the results.
+ */
+static inline void cvmx_pip_get_port_stats(u64 port_num, u64 clear, cvmx_pip_port_status_t *status)
+{
+	cvmx_pip_stat_ctl_t pip_stat_ctl;
+	cvmx_pip_stat0_prtx_t stat0;
+	cvmx_pip_stat1_prtx_t stat1;
+	cvmx_pip_stat2_prtx_t stat2;
+	cvmx_pip_stat3_prtx_t stat3;
+	cvmx_pip_stat4_prtx_t stat4;
+	cvmx_pip_stat5_prtx_t stat5;
+	cvmx_pip_stat6_prtx_t stat6;
+	cvmx_pip_stat7_prtx_t stat7;
+	cvmx_pip_stat8_prtx_t stat8;
+	cvmx_pip_stat9_prtx_t stat9;
+	cvmx_pip_stat10_x_t stat10;
+	cvmx_pip_stat11_x_t stat11;
+	cvmx_pip_stat_inb_pktsx_t pip_stat_inb_pktsx;
+	cvmx_pip_stat_inb_octsx_t pip_stat_inb_octsx;
+	cvmx_pip_stat_inb_errsx_t pip_stat_inb_errsx;
+	int interface = cvmx_helper_get_interface_num(port_num);
+	int index = cvmx_helper_get_interface_index_num(port_num);
+
+	pip_stat_ctl.u64 = 0;
+	pip_stat_ctl.s.rdclr = clear;
+	csr_wr(CVMX_PIP_STAT_CTL, pip_stat_ctl.u64);
+
+	if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		int pknd = cvmx_helper_get_pknd(interface, index);
+		/*
+		 * PIP_STAT_CTL[MODE] 0 means pkind.
+		 */
+		stat0.u64 = csr_rd(CVMX_PIP_STAT0_X(pknd));
+		stat1.u64 = csr_rd(CVMX_PIP_STAT1_X(pknd));
+		stat2.u64 = csr_rd(CVMX_PIP_STAT2_X(pknd));
+		stat3.u64 = csr_rd(CVMX_PIP_STAT3_X(pknd));
+		stat4.u64 = csr_rd(CVMX_PIP_STAT4_X(pknd));
+		stat5.u64 = csr_rd(CVMX_PIP_STAT5_X(pknd));
+		stat6.u64 = csr_rd(CVMX_PIP_STAT6_X(pknd));
+		stat7.u64 = csr_rd(CVMX_PIP_STAT7_X(pknd));
+		stat8.u64 = csr_rd(CVMX_PIP_STAT8_X(pknd));
+		stat9.u64 = csr_rd(CVMX_PIP_STAT9_X(pknd));
+		stat10.u64 = csr_rd(CVMX_PIP_STAT10_X(pknd));
+		stat11.u64 = csr_rd(CVMX_PIP_STAT11_X(pknd));
+	} else {
+		if (port_num >= 40) {
+			stat0.u64 = csr_rd(CVMX_PIP_XSTAT0_PRTX(port_num));
+			stat1.u64 = csr_rd(CVMX_PIP_XSTAT1_PRTX(port_num));
+			stat2.u64 = csr_rd(CVMX_PIP_XSTAT2_PRTX(port_num));
+			stat3.u64 = csr_rd(CVMX_PIP_XSTAT3_PRTX(port_num));
+			stat4.u64 = csr_rd(CVMX_PIP_XSTAT4_PRTX(port_num));
+			stat5.u64 = csr_rd(CVMX_PIP_XSTAT5_PRTX(port_num));
+			stat6.u64 = csr_rd(CVMX_PIP_XSTAT6_PRTX(port_num));
+			stat7.u64 = csr_rd(CVMX_PIP_XSTAT7_PRTX(port_num));
+			stat8.u64 = csr_rd(CVMX_PIP_XSTAT8_PRTX(port_num));
+			stat9.u64 = csr_rd(CVMX_PIP_XSTAT9_PRTX(port_num));
+			if (OCTEON_IS_MODEL(OCTEON_CN6XXX)) {
+				stat10.u64 = csr_rd(CVMX_PIP_XSTAT10_PRTX(port_num));
+				stat11.u64 = csr_rd(CVMX_PIP_XSTAT11_PRTX(port_num));
+			}
+		} else {
+			stat0.u64 = csr_rd(CVMX_PIP_STAT0_PRTX(port_num));
+			stat1.u64 = csr_rd(CVMX_PIP_STAT1_PRTX(port_num));
+			stat2.u64 = csr_rd(CVMX_PIP_STAT2_PRTX(port_num));
+			stat3.u64 = csr_rd(CVMX_PIP_STAT3_PRTX(port_num));
+			stat4.u64 = csr_rd(CVMX_PIP_STAT4_PRTX(port_num));
+			stat5.u64 = csr_rd(CVMX_PIP_STAT5_PRTX(port_num));
+			stat6.u64 = csr_rd(CVMX_PIP_STAT6_PRTX(port_num));
+			stat7.u64 = csr_rd(CVMX_PIP_STAT7_PRTX(port_num));
+			stat8.u64 = csr_rd(CVMX_PIP_STAT8_PRTX(port_num));
+			stat9.u64 = csr_rd(CVMX_PIP_STAT9_PRTX(port_num));
+			if (OCTEON_IS_OCTEON2() || OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+				stat10.u64 = csr_rd(CVMX_PIP_STAT10_PRTX(port_num));
+				stat11.u64 = csr_rd(CVMX_PIP_STAT11_PRTX(port_num));
+			}
+		}
+	}
+	if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		int pknd = cvmx_helper_get_pknd(interface, index);
+
+		pip_stat_inb_pktsx.u64 = csr_rd(CVMX_PIP_STAT_INB_PKTS_PKNDX(pknd));
+		pip_stat_inb_octsx.u64 = csr_rd(CVMX_PIP_STAT_INB_OCTS_PKNDX(pknd));
+		pip_stat_inb_errsx.u64 = csr_rd(CVMX_PIP_STAT_INB_ERRS_PKNDX(pknd));
+	} else {
+		pip_stat_inb_pktsx.u64 = csr_rd(CVMX_PIP_STAT_INB_PKTSX(port_num));
+		pip_stat_inb_octsx.u64 = csr_rd(CVMX_PIP_STAT_INB_OCTSX(port_num));
+		pip_stat_inb_errsx.u64 = csr_rd(CVMX_PIP_STAT_INB_ERRSX(port_num));
+	}
+
+	status->dropped_octets = stat0.s.drp_octs;
+	status->dropped_packets = stat0.s.drp_pkts;
+	status->octets = stat1.s.octs;
+	status->pci_raw_packets = stat2.s.raw;
+	status->packets = stat2.s.pkts;
+	status->multicast_packets = stat3.s.mcst;
+	status->broadcast_packets = stat3.s.bcst;
+	status->len_64_packets = stat4.s.h64;
+	status->len_65_127_packets = stat4.s.h65to127;
+	status->len_128_255_packets = stat5.s.h128to255;
+	status->len_256_511_packets = stat5.s.h256to511;
+	status->len_512_1023_packets = stat6.s.h512to1023;
+	status->len_1024_1518_packets = stat6.s.h1024to1518;
+	status->len_1519_max_packets = stat7.s.h1519;
+	status->fcs_align_err_packets = stat7.s.fcs;
+	status->runt_packets = stat8.s.undersz;
+	status->runt_crc_packets = stat8.s.frag;
+	status->oversize_packets = stat9.s.oversz;
+	status->oversize_crc_packets = stat9.s.jabber;
+	if (OCTEON_IS_OCTEON2() || OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+		status->mcast_l2_red_packets = stat10.s.mcast;
+		status->bcast_l2_red_packets = stat10.s.bcast;
+		status->mcast_l3_red_packets = stat11.s.mcast;
+		status->bcast_l3_red_packets = stat11.s.bcast;
+	}
+	status->inb_packets = pip_stat_inb_pktsx.s.pkts;
+	status->inb_octets = pip_stat_inb_octsx.s.octs;
+	status->inb_errors = pip_stat_inb_errsx.s.errs;
+}
+
+/**
+ * Get the status counters for a port.
+ *
+ * @param port_num Port number (ipd_port) to get statistics for.
+ * @param clear    Set to 1 to clear the counters after they are read
+ * @param status   Where to put the results.
+ */
+static inline void cvmx_pip_get_port_status(u64 port_num, u64 clear, cvmx_pip_port_status_t *status)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_PKI)) {
+		unsigned int node = cvmx_get_node_num();
+
+		cvmx_pki_get_port_stats(node, port_num, (struct cvmx_pki_port_stats *)status);
+	} else {
+		cvmx_pip_get_port_stats(port_num, clear, status);
+	}
+}
+
+/**
+ * Configure the hardware CRC engine
+ *
+ * @param interface Interface to configure (0 or 1)
+ * @param invert_result
+ *                 Invert the result of the CRC
+ * @param reflect  Reflect
+ * @param initialization_vector
+ *                 CRC initialization vector
+ */
+static inline void cvmx_pip_config_crc(u64 interface, u64 invert_result, u64 reflect,
+				       u32 initialization_vector)
+{
+	/* Only CN38XX & CN58XX */
+}
+
+/**
+ * Clear all bits in a tag mask. This should be called on
+ * startup before any calls to cvmx_pip_tag_mask_set. Each bit
+ * set in the final mask represent a byte used in the packet for
+ * tag generation.
+ *
+ * @param mask_index Which tag mask to clear (0..3)
+ */
+static inline void cvmx_pip_tag_mask_clear(u64 mask_index)
+{
+	u64 index;
+	cvmx_pip_tag_incx_t pip_tag_incx;
+
+	pip_tag_incx.u64 = 0;
+	pip_tag_incx.s.en = 0;
+	for (index = mask_index * 16; index < (mask_index + 1) * 16; index++)
+		csr_wr(CVMX_PIP_TAG_INCX(index), pip_tag_incx.u64);
+}
+
+/**
+ * Sets a range of bits in the tag mask. The tag mask is used
+ * when the cvmx_pip_port_tag_cfg_t tag_mode is non zero.
+ * There are four separate masks that can be configured.
+ *
+ * @param mask_index Which tag mask to modify (0..3)
+ * @param offset     Offset into the bitmask to set bits at. Use the GCC macro
+ *                   offsetof() to determine the offsets into packet headers.
+ *                   For example, offsetof(ethhdr, protocol) returns the offset
+ *                   of the ethernet protocol field.  The bitmask selects which bytes
+ *                   to include the the tag, with bit offset X selecting byte at offset X
+ *                   from the beginning of the packet data.
+ * @param len        Number of bytes to include. Usually this is the sizeof()
+ *                   the field.
+ */
+static inline void cvmx_pip_tag_mask_set(u64 mask_index, u64 offset, u64 len)
+{
+	while (len--) {
+		cvmx_pip_tag_incx_t pip_tag_incx;
+		u64 index = mask_index * 16 + offset / 8;
+
+		pip_tag_incx.u64 = csr_rd(CVMX_PIP_TAG_INCX(index));
+		pip_tag_incx.s.en |= 0x80 >> (offset & 0x7);
+		csr_wr(CVMX_PIP_TAG_INCX(index), pip_tag_incx.u64);
+		offset++;
+	}
+}
+
+/**
+ * Set byte count for Max-Sized and Min Sized frame check.
+ *
+ * @param interface   Which interface to set the limit
+ * @param max_size    Byte count for Max-Size frame check
+ */
+static inline void cvmx_pip_set_frame_check(int interface, u32 max_size)
+{
+	cvmx_pip_frm_len_chkx_t frm_len;
+
+	/* max_size and min_size are passed as 0, reset to default values. */
+	if (max_size < 1536)
+		max_size = 1536;
+
+	/* On CN68XX frame check is enabled for a pkind n and
+	   PIP_PRT_CFG[len_chk_sel] selects which set of
+	   MAXLEN/MINLEN to use. */
+	if (octeon_has_feature(OCTEON_FEATURE_PKND)) {
+		int port;
+		int num_ports = cvmx_helper_ports_on_interface(interface);
+
+		for (port = 0; port < num_ports; port++) {
+			if (octeon_has_feature(OCTEON_FEATURE_PKI)) {
+				int ipd_port;
+
+				ipd_port = cvmx_helper_get_ipd_port(interface, port);
+				cvmx_pki_set_max_frm_len(ipd_port, max_size);
+			} else {
+				int pknd;
+				int sel;
+				cvmx_pip_prt_cfgx_t config;
+
+				pknd = cvmx_helper_get_pknd(interface, port);
+				config.u64 = csr_rd(CVMX_PIP_PRT_CFGX(pknd));
+				sel = config.s.len_chk_sel;
+				frm_len.u64 = csr_rd(CVMX_PIP_FRM_LEN_CHKX(sel));
+				frm_len.s.maxlen = max_size;
+				csr_wr(CVMX_PIP_FRM_LEN_CHKX(sel), frm_len.u64);
+			}
+		}
+	}
+	/* on cn6xxx and cn7xxx models, PIP_FRM_LEN_CHK0 applies to
+	 *     all incoming traffic */
+	else if (OCTEON_IS_OCTEON2() || OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+		frm_len.u64 = csr_rd(CVMX_PIP_FRM_LEN_CHKX(0));
+		frm_len.s.maxlen = max_size;
+		csr_wr(CVMX_PIP_FRM_LEN_CHKX(0), frm_len.u64);
+	}
+}
+
+/**
+ * Initialize Bit Select Extractor config. Their are 8 bit positions and valids
+ * to be used when using the corresponding extractor.
+ *
+ * @param bit     Bit Select Extractor to use
+ * @param pos     Which position to update
+ * @param val     The value to update the position with
+ */
+static inline void cvmx_pip_set_bsel_pos(int bit, int pos, int val)
+{
+	cvmx_pip_bsel_ext_posx_t bsel_pos;
+
+	/* The bit select extractor is available in CN61XX and CN68XX pass2.0 onwards. */
+	if (!octeon_has_feature(OCTEON_FEATURE_BIT_EXTRACTOR))
+		return;
+
+	if (bit < 0 || bit > 3) {
+		debug("ERROR: cvmx_pip_set_bsel_pos: Invalid Bit-Select Extractor (%d) passed\n",
+		      bit);
+		return;
+	}
+
+	bsel_pos.u64 = csr_rd(CVMX_PIP_BSEL_EXT_POSX(bit));
+	switch (pos) {
+	case 0:
+		bsel_pos.s.pos0_val = 1;
+		bsel_pos.s.pos0 = val & 0x7f;
+		break;
+	case 1:
+		bsel_pos.s.pos1_val = 1;
+		bsel_pos.s.pos1 = val & 0x7f;
+		break;
+	case 2:
+		bsel_pos.s.pos2_val = 1;
+		bsel_pos.s.pos2 = val & 0x7f;
+		break;
+	case 3:
+		bsel_pos.s.pos3_val = 1;
+		bsel_pos.s.pos3 = val & 0x7f;
+		break;
+	case 4:
+		bsel_pos.s.pos4_val = 1;
+		bsel_pos.s.pos4 = val & 0x7f;
+		break;
+	case 5:
+		bsel_pos.s.pos5_val = 1;
+		bsel_pos.s.pos5 = val & 0x7f;
+		break;
+	case 6:
+		bsel_pos.s.pos6_val = 1;
+		bsel_pos.s.pos6 = val & 0x7f;
+		break;
+	case 7:
+		bsel_pos.s.pos7_val = 1;
+		bsel_pos.s.pos7 = val & 0x7f;
+		break;
+	default:
+		debug("Warning: cvmx_pip_set_bsel_pos: Invalid pos(%d)\n", pos);
+		break;
+	}
+	csr_wr(CVMX_PIP_BSEL_EXT_POSX(bit), bsel_pos.u64);
+}
+
+/**
+ * Initialize offset and skip values to use by bit select extractor.
+
+ * @param bit	Bit Select Extractor to use
+ * @param offset	Offset to add to extractor mem addr to get final address
+ *			to lookup table.
+ * @param skip		Number of bytes to skip from start of packet 0-64
+ */
+static inline void cvmx_pip_bsel_config(int bit, int offset, int skip)
+{
+	cvmx_pip_bsel_ext_cfgx_t bsel_cfg;
+
+	/* The bit select extractor is available in CN61XX and CN68XX pass2.0 onwards. */
+	if (!octeon_has_feature(OCTEON_FEATURE_BIT_EXTRACTOR))
+		return;
+
+	bsel_cfg.u64 = csr_rd(CVMX_PIP_BSEL_EXT_CFGX(bit));
+	bsel_cfg.s.offset = offset;
+	bsel_cfg.s.skip = skip;
+	csr_wr(CVMX_PIP_BSEL_EXT_CFGX(bit), bsel_cfg.u64);
+}
+
+/**
+ * Get the entry for the Bit Select Extractor Table.
+ * @param work   pointer to work queue entry
+ * @return       Index of the Bit Select Extractor Table
+ */
+static inline int cvmx_pip_get_bsel_table_index(cvmx_wqe_t *work)
+{
+	int bit = cvmx_wqe_get_port(work) & 0x3;
+	/* Get the Bit select table index. */
+	int index;
+	int y;
+	cvmx_pip_bsel_ext_cfgx_t bsel_cfg;
+	cvmx_pip_bsel_ext_posx_t bsel_pos;
+
+	/* The bit select extractor is available in CN61XX and CN68XX pass2.0 onwards. */
+	if (!octeon_has_feature(OCTEON_FEATURE_BIT_EXTRACTOR))
+		return -1;
+
+	bsel_cfg.u64 = csr_rd(CVMX_PIP_BSEL_EXT_CFGX(bit));
+	bsel_pos.u64 = csr_rd(CVMX_PIP_BSEL_EXT_POSX(bit));
+
+	for (y = 0; y < 8; y++) {
+		char *ptr = (char *)cvmx_phys_to_ptr(work->packet_ptr.s.addr);
+		int bit_loc = 0;
+		int bit;
+
+		ptr += bsel_cfg.s.skip;
+		switch (y) {
+		case 0:
+			ptr += (bsel_pos.s.pos0 >> 3);
+			bit_loc = 7 - (bsel_pos.s.pos0 & 0x3);
+			break;
+		case 1:
+			ptr += (bsel_pos.s.pos1 >> 3);
+			bit_loc = 7 - (bsel_pos.s.pos1 & 0x3);
+			break;
+		case 2:
+			ptr += (bsel_pos.s.pos2 >> 3);
+			bit_loc = 7 - (bsel_pos.s.pos2 & 0x3);
+			break;
+		case 3:
+			ptr += (bsel_pos.s.pos3 >> 3);
+			bit_loc = 7 - (bsel_pos.s.pos3 & 0x3);
+			break;
+		case 4:
+			ptr += (bsel_pos.s.pos4 >> 3);
+			bit_loc = 7 - (bsel_pos.s.pos4 & 0x3);
+			break;
+		case 5:
+			ptr += (bsel_pos.s.pos5 >> 3);
+			bit_loc = 7 - (bsel_pos.s.pos5 & 0x3);
+			break;
+		case 6:
+			ptr += (bsel_pos.s.pos6 >> 3);
+			bit_loc = 7 - (bsel_pos.s.pos6 & 0x3);
+			break;
+		case 7:
+			ptr += (bsel_pos.s.pos7 >> 3);
+			bit_loc = 7 - (bsel_pos.s.pos7 & 0x3);
+			break;
+		}
+		bit = (*ptr >> bit_loc) & 1;
+		index |= bit << y;
+	}
+	index += bsel_cfg.s.offset;
+	index &= 0x1ff;
+	return index;
+}
+
+static inline int cvmx_pip_get_bsel_qos(cvmx_wqe_t *work)
+{
+	int index = cvmx_pip_get_bsel_table_index(work);
+	cvmx_pip_bsel_tbl_entx_t bsel_tbl;
+
+	/* The bit select extractor is available in CN61XX and CN68XX pass2.0 onwards. */
+	if (!octeon_has_feature(OCTEON_FEATURE_BIT_EXTRACTOR))
+		return -1;
+
+	bsel_tbl.u64 = csr_rd(CVMX_PIP_BSEL_TBL_ENTX(index));
+
+	return bsel_tbl.s.qos;
+}
+
+static inline int cvmx_pip_get_bsel_grp(cvmx_wqe_t *work)
+{
+	int index = cvmx_pip_get_bsel_table_index(work);
+	cvmx_pip_bsel_tbl_entx_t bsel_tbl;
+
+	/* The bit select extractor is available in CN61XX and CN68XX pass2.0 onwards. */
+	if (!octeon_has_feature(OCTEON_FEATURE_BIT_EXTRACTOR))
+		return -1;
+
+	bsel_tbl.u64 = csr_rd(CVMX_PIP_BSEL_TBL_ENTX(index));
+
+	return bsel_tbl.s.grp;
+}
+
+static inline int cvmx_pip_get_bsel_tt(cvmx_wqe_t *work)
+{
+	int index = cvmx_pip_get_bsel_table_index(work);
+	cvmx_pip_bsel_tbl_entx_t bsel_tbl;
+
+	/* The bit select extractor is available in CN61XX and CN68XX pass2.0 onwards. */
+	if (!octeon_has_feature(OCTEON_FEATURE_BIT_EXTRACTOR))
+		return -1;
+
+	bsel_tbl.u64 = csr_rd(CVMX_PIP_BSEL_TBL_ENTX(index));
+
+	return bsel_tbl.s.tt;
+}
+
+static inline int cvmx_pip_get_bsel_tag(cvmx_wqe_t *work)
+{
+	int index = cvmx_pip_get_bsel_table_index(work);
+	int port = cvmx_wqe_get_port(work);
+	int bit = port & 0x3;
+	int upper_tag = 0;
+	cvmx_pip_bsel_tbl_entx_t bsel_tbl;
+	cvmx_pip_bsel_ext_cfgx_t bsel_cfg;
+	cvmx_pip_prt_tagx_t prt_tag;
+
+	/* The bit select extractor is available in CN61XX and CN68XX pass2.0 onwards. */
+	if (!octeon_has_feature(OCTEON_FEATURE_BIT_EXTRACTOR))
+		return -1;
+
+	bsel_tbl.u64 = csr_rd(CVMX_PIP_BSEL_TBL_ENTX(index));
+	bsel_cfg.u64 = csr_rd(CVMX_PIP_BSEL_EXT_CFGX(bit));
+
+	prt_tag.u64 = csr_rd(CVMX_PIP_PRT_TAGX(port));
+	if (prt_tag.s.inc_prt_flag == 0)
+		upper_tag = bsel_cfg.s.upper_tag;
+	return bsel_tbl.s.tag | ((bsel_cfg.s.tag << 8) & 0xff00) | ((upper_tag << 16) & 0xffff0000);
+}
+
+#endif /*  __CVMX_PIP_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pki-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-pki-defs.h
new file mode 100644
index 0000000..4465872
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pki-defs.h
@@ -0,0 +1,2353 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon pki.
+ */
+
+#ifndef __CVMX_PKI_DEFS_H__
+#define __CVMX_PKI_DEFS_H__
+
+#define CVMX_PKI_ACTIVE0	     (0x0001180044000220ull)
+#define CVMX_PKI_ACTIVE1	     (0x0001180044000230ull)
+#define CVMX_PKI_ACTIVE2	     (0x0001180044000240ull)
+#define CVMX_PKI_AURAX_CFG(offset)   (0x0001180044900000ull + ((offset) & 1023) * 8)
+#define CVMX_PKI_BIST_STATUS0	     (0x0001180044000080ull)
+#define CVMX_PKI_BIST_STATUS1	     (0x0001180044000088ull)
+#define CVMX_PKI_BIST_STATUS2	     (0x0001180044000090ull)
+#define CVMX_PKI_BPIDX_STATE(offset) (0x0001180044B00000ull + ((offset) & 1023) * 8)
+#define CVMX_PKI_BUF_CTL	     (0x0001180044000100ull)
+#define CVMX_PKI_CHANX_CFG(offset)   (0x0001180044A00000ull + ((offset) & 4095) * 8)
+#define CVMX_PKI_CLKEN		     (0x0001180044000410ull)
+#define CVMX_PKI_CLX_ECC_CTL(offset) (0x000118004400C020ull + ((offset) & 3) * 0x10000ull)
+#define CVMX_PKI_CLX_ECC_INT(offset) (0x000118004400C010ull + ((offset) & 3) * 0x10000ull)
+#define CVMX_PKI_CLX_INT(offset)     (0x000118004400C000ull + ((offset) & 3) * 0x10000ull)
+#define CVMX_PKI_CLX_PCAMX_ACTIONX(a, b, c)                                                        \
+	(0x0001180044708000ull + ((a) << 16) + ((b) << 12) + ((c) << 3))
+#define CVMX_PKI_CLX_PCAMX_MATCHX(a, b, c)                                                         \
+	(0x0001180044704000ull + ((a) << 16) + ((b) << 12) + ((c) << 3))
+#define CVMX_PKI_CLX_PCAMX_TERMX(a, b, c)                                                          \
+	(0x0001180044700000ull + ((a) << 16) + ((b) << 12) + ((c) << 3))
+#define CVMX_PKI_CLX_PKINDX_CFG(offset, block_id)                                                  \
+	(0x0001180044300040ull + (((offset) & 63) + ((block_id) & 3) * 0x100ull) * 256)
+#define CVMX_PKI_CLX_PKINDX_KMEMX(a, b, c)                                                         \
+	(0x0001180044200000ull + ((a) << 16) + ((b) << 8) + ((c) << 3))
+#define CVMX_PKI_CLX_PKINDX_L2_CUSTOM(offset, block_id)                                            \
+	(0x0001180044300058ull + (((offset) & 63) + ((block_id) & 3) * 0x100ull) * 256)
+#define CVMX_PKI_CLX_PKINDX_LG_CUSTOM(offset, block_id)                                            \
+	(0x0001180044300060ull + (((offset) & 63) + ((block_id) & 3) * 0x100ull) * 256)
+#define CVMX_PKI_CLX_PKINDX_SKIP(offset, block_id)                                                 \
+	(0x0001180044300050ull + (((offset) & 63) + ((block_id) & 3) * 0x100ull) * 256)
+#define CVMX_PKI_CLX_PKINDX_STYLE(offset, block_id)                                                \
+	(0x0001180044300048ull + (((offset) & 63) + ((block_id) & 3) * 0x100ull) * 256)
+#define CVMX_PKI_CLX_SMEMX(offset, block_id)                                                       \
+	(0x0001180044400000ull + (((offset) & 2047) + ((block_id) & 3) * 0x2000ull) * 8)
+#define CVMX_PKI_CLX_START(offset) (0x000118004400C030ull + ((offset) & 3) * 0x10000ull)
+#define CVMX_PKI_CLX_STYLEX_ALG(offset, block_id)                                                  \
+	(0x0001180044501000ull + (((offset) & 63) + ((block_id) & 3) * 0x2000ull) * 8)
+#define CVMX_PKI_CLX_STYLEX_CFG(offset, block_id)                                                  \
+	(0x0001180044500000ull + (((offset) & 63) + ((block_id) & 3) * 0x2000ull) * 8)
+#define CVMX_PKI_CLX_STYLEX_CFG2(offset, block_id)                                                 \
+	(0x0001180044500800ull + (((offset) & 63) + ((block_id) & 3) * 0x2000ull) * 8)
+#define CVMX_PKI_DSTATX_STAT0(offset)	 (0x0001180044C00000ull + ((offset) & 1023) * 64)
+#define CVMX_PKI_DSTATX_STAT1(offset)	 (0x0001180044C00008ull + ((offset) & 1023) * 64)
+#define CVMX_PKI_DSTATX_STAT2(offset)	 (0x0001180044C00010ull + ((offset) & 1023) * 64)
+#define CVMX_PKI_DSTATX_STAT3(offset)	 (0x0001180044C00018ull + ((offset) & 1023) * 64)
+#define CVMX_PKI_DSTATX_STAT4(offset)	 (0x0001180044C00020ull + ((offset) & 1023) * 64)
+#define CVMX_PKI_ECC_CTL0		 (0x0001180044000060ull)
+#define CVMX_PKI_ECC_CTL1		 (0x0001180044000068ull)
+#define CVMX_PKI_ECC_CTL2		 (0x0001180044000070ull)
+#define CVMX_PKI_ECC_INT0		 (0x0001180044000040ull)
+#define CVMX_PKI_ECC_INT1		 (0x0001180044000048ull)
+#define CVMX_PKI_ECC_INT2		 (0x0001180044000050ull)
+#define CVMX_PKI_FRM_LEN_CHKX(offset)	 (0x0001180044004000ull + ((offset) & 1) * 8)
+#define CVMX_PKI_GBL_PEN		 (0x0001180044000200ull)
+#define CVMX_PKI_GEN_INT		 (0x0001180044000020ull)
+#define CVMX_PKI_ICGX_CFG(offset)	 (0x000118004400A000ull)
+#define CVMX_PKI_IMEMX(offset)		 (0x0001180044100000ull + ((offset) & 2047) * 8)
+#define CVMX_PKI_LTYPEX_MAP(offset)	 (0x0001180044005000ull + ((offset) & 31) * 8)
+#define CVMX_PKI_PBE_ECO		 (0x0001180044000710ull)
+#define CVMX_PKI_PCAM_LOOKUP		 (0x0001180044000500ull)
+#define CVMX_PKI_PCAM_RESULT		 (0x0001180044000510ull)
+#define CVMX_PKI_PFE_DIAG		 (0x0001180044000560ull)
+#define CVMX_PKI_PFE_ECO		 (0x0001180044000720ull)
+#define CVMX_PKI_PIX_CLKEN		 (0x0001180044000600ull)
+#define CVMX_PKI_PIX_DIAG		 (0x0001180044000580ull)
+#define CVMX_PKI_PIX_ECO		 (0x0001180044000700ull)
+#define CVMX_PKI_PKINDX_ICGSEL(offset)	 (0x0001180044010000ull + ((offset) & 63) * 8)
+#define CVMX_PKI_PKNDX_INB_STAT0(offset) (0x0001180044F00000ull + ((offset) & 63) * 256)
+#define CVMX_PKI_PKNDX_INB_STAT1(offset) (0x0001180044F00008ull + ((offset) & 63) * 256)
+#define CVMX_PKI_PKNDX_INB_STAT2(offset) (0x0001180044F00010ull + ((offset) & 63) * 256)
+#define CVMX_PKI_PKT_ERR		 (0x0001180044000030ull)
+#define CVMX_PKI_PTAG_AVAIL		 (0x0001180044000130ull)
+#define CVMX_PKI_QPG_TBLBX(offset)	 (0x0001180044820000ull + ((offset) & 2047) * 8)
+#define CVMX_PKI_QPG_TBLX(offset)	 (0x0001180044800000ull + ((offset) & 2047) * 8)
+#define CVMX_PKI_REASM_SOPX(offset)	 (0x0001180044006000ull + ((offset) & 1) * 8)
+#define CVMX_PKI_REQ_WGT		 (0x0001180044000120ull)
+#define CVMX_PKI_SFT_RST		 (0x0001180044000010ull)
+#define CVMX_PKI_STATX_HIST0(offset)	 (0x0001180044E00000ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_HIST1(offset)	 (0x0001180044E00008ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_HIST2(offset)	 (0x0001180044E00010ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_HIST3(offset)	 (0x0001180044E00018ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_HIST4(offset)	 (0x0001180044E00020ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_HIST5(offset)	 (0x0001180044E00028ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_HIST6(offset)	 (0x0001180044E00030ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT0(offset)	 (0x0001180044E00038ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT1(offset)	 (0x0001180044E00040ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT10(offset)	 (0x0001180044E00088ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT11(offset)	 (0x0001180044E00090ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT12(offset)	 (0x0001180044E00098ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT13(offset)	 (0x0001180044E000A0ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT14(offset)	 (0x0001180044E000A8ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT15(offset)	 (0x0001180044E000B0ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT16(offset)	 (0x0001180044E000B8ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT17(offset)	 (0x0001180044E000C0ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT18(offset)	 (0x0001180044E000C8ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT2(offset)	 (0x0001180044E00048ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT3(offset)	 (0x0001180044E00050ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT4(offset)	 (0x0001180044E00058ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT5(offset)	 (0x0001180044E00060ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT6(offset)	 (0x0001180044E00068ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT7(offset)	 (0x0001180044E00070ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT8(offset)	 (0x0001180044E00078ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STATX_STAT9(offset)	 (0x0001180044E00080ull + ((offset) & 63) * 256)
+#define CVMX_PKI_STAT_CTL		 (0x0001180044000110ull)
+#define CVMX_PKI_STYLEX_BUF(offset)	 (0x0001180044024000ull + ((offset) & 63) * 8)
+#define CVMX_PKI_STYLEX_TAG_MASK(offset) (0x0001180044021000ull + ((offset) & 63) * 8)
+#define CVMX_PKI_STYLEX_TAG_SEL(offset)	 (0x0001180044020000ull + ((offset) & 63) * 8)
+#define CVMX_PKI_STYLEX_WQ2(offset)	 (0x0001180044022000ull + ((offset) & 63) * 8)
+#define CVMX_PKI_STYLEX_WQ4(offset)	 (0x0001180044023000ull + ((offset) & 63) * 8)
+#define CVMX_PKI_TAG_INCX_CTL(offset)	 (0x0001180044007000ull + ((offset) & 31) * 8)
+#define CVMX_PKI_TAG_INCX_MASK(offset)	 (0x0001180044008000ull + ((offset) & 31) * 8)
+#define CVMX_PKI_TAG_SECRET		 (0x0001180044000430ull)
+#define CVMX_PKI_X2P_REQ_OFL		 (0x0001180044000038ull)
+
+/**
+ * cvmx_pki_active0
+ */
+union cvmx_pki_active0 {
+	u64 u64;
+	struct cvmx_pki_active0_s {
+		u64 reserved_1_63 : 63;
+		u64 pfe_active : 1;
+	} s;
+	struct cvmx_pki_active0_s cn73xx;
+	struct cvmx_pki_active0_s cn78xx;
+	struct cvmx_pki_active0_s cn78xxp1;
+	struct cvmx_pki_active0_s cnf75xx;
+};
+
+typedef union cvmx_pki_active0 cvmx_pki_active0_t;
+
+/**
+ * cvmx_pki_active1
+ */
+union cvmx_pki_active1 {
+	u64 u64;
+	struct cvmx_pki_active1_s {
+		u64 reserved_4_63 : 60;
+		u64 fpc_active : 1;
+		u64 iobp_active : 1;
+		u64 sws_active : 1;
+		u64 pbtag_active : 1;
+	} s;
+	struct cvmx_pki_active1_s cn73xx;
+	struct cvmx_pki_active1_s cn78xx;
+	struct cvmx_pki_active1_s cn78xxp1;
+	struct cvmx_pki_active1_s cnf75xx;
+};
+
+typedef union cvmx_pki_active1 cvmx_pki_active1_t;
+
+/**
+ * cvmx_pki_active2
+ */
+union cvmx_pki_active2 {
+	u64 u64;
+	struct cvmx_pki_active2_s {
+		u64 reserved_5_63 : 59;
+		u64 pix_active : 5;
+	} s;
+	struct cvmx_pki_active2_s cn73xx;
+	struct cvmx_pki_active2_s cn78xx;
+	struct cvmx_pki_active2_s cn78xxp1;
+	struct cvmx_pki_active2_s cnf75xx;
+};
+
+typedef union cvmx_pki_active2 cvmx_pki_active2_t;
+
+/**
+ * cvmx_pki_aura#_cfg
+ *
+ * This register configures aura backpressure, etc.
+ *
+ */
+union cvmx_pki_aurax_cfg {
+	u64 u64;
+	struct cvmx_pki_aurax_cfg_s {
+		u64 reserved_32_63 : 32;
+		u64 pkt_add : 2;
+		u64 reserved_19_29 : 11;
+		u64 ena_red : 1;
+		u64 ena_drop : 1;
+		u64 ena_bp : 1;
+		u64 reserved_10_15 : 6;
+		u64 bpid : 10;
+	} s;
+	struct cvmx_pki_aurax_cfg_s cn73xx;
+	struct cvmx_pki_aurax_cfg_s cn78xx;
+	struct cvmx_pki_aurax_cfg_s cn78xxp1;
+	struct cvmx_pki_aurax_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pki_aurax_cfg cvmx_pki_aurax_cfg_t;
+
+/**
+ * cvmx_pki_bist_status0
+ *
+ * This register indicates BIST status.
+ *
+ */
+union cvmx_pki_bist_status0 {
+	u64 u64;
+	struct cvmx_pki_bist_status0_s {
+		u64 reserved_31_63 : 33;
+		u64 bist : 31;
+	} s;
+	struct cvmx_pki_bist_status0_s cn73xx;
+	struct cvmx_pki_bist_status0_s cn78xx;
+	struct cvmx_pki_bist_status0_s cn78xxp1;
+	struct cvmx_pki_bist_status0_s cnf75xx;
+};
+
+typedef union cvmx_pki_bist_status0 cvmx_pki_bist_status0_t;
+
+/**
+ * cvmx_pki_bist_status1
+ *
+ * This register indicates BIST status.
+ *
+ */
+union cvmx_pki_bist_status1 {
+	u64 u64;
+	struct cvmx_pki_bist_status1_s {
+		u64 reserved_26_63 : 38;
+		u64 bist : 26;
+	} s;
+	struct cvmx_pki_bist_status1_s cn73xx;
+	struct cvmx_pki_bist_status1_s cn78xx;
+	struct cvmx_pki_bist_status1_cn78xxp1 {
+		u64 reserved_21_63 : 43;
+		u64 bist : 21;
+	} cn78xxp1;
+	struct cvmx_pki_bist_status1_s cnf75xx;
+};
+
+typedef union cvmx_pki_bist_status1 cvmx_pki_bist_status1_t;
+
+/**
+ * cvmx_pki_bist_status2
+ *
+ * This register indicates BIST status.
+ *
+ */
+union cvmx_pki_bist_status2 {
+	u64 u64;
+	struct cvmx_pki_bist_status2_s {
+		u64 reserved_25_63 : 39;
+		u64 bist : 25;
+	} s;
+	struct cvmx_pki_bist_status2_s cn73xx;
+	struct cvmx_pki_bist_status2_s cn78xx;
+	struct cvmx_pki_bist_status2_s cn78xxp1;
+	struct cvmx_pki_bist_status2_s cnf75xx;
+};
+
+typedef union cvmx_pki_bist_status2 cvmx_pki_bist_status2_t;
+
+/**
+ * cvmx_pki_bpid#_state
+ *
+ * This register shows the current bpid state for diagnostics.
+ *
+ */
+union cvmx_pki_bpidx_state {
+	u64 u64;
+	struct cvmx_pki_bpidx_state_s {
+		u64 reserved_1_63 : 63;
+		u64 xoff : 1;
+	} s;
+	struct cvmx_pki_bpidx_state_s cn73xx;
+	struct cvmx_pki_bpidx_state_s cn78xx;
+	struct cvmx_pki_bpidx_state_s cn78xxp1;
+	struct cvmx_pki_bpidx_state_s cnf75xx;
+};
+
+typedef union cvmx_pki_bpidx_state cvmx_pki_bpidx_state_t;
+
+/**
+ * cvmx_pki_buf_ctl
+ */
+union cvmx_pki_buf_ctl {
+	u64 u64;
+	struct cvmx_pki_buf_ctl_s {
+		u64 reserved_11_63 : 53;
+		u64 fpa_wait : 1;
+		u64 fpa_cac_dis : 1;
+		u64 reserved_6_8 : 3;
+		u64 pkt_off : 1;
+		u64 reserved_3_4 : 2;
+		u64 pbp_en : 1;
+		u64 reserved_1_1 : 1;
+		u64 pki_en : 1;
+	} s;
+	struct cvmx_pki_buf_ctl_s cn73xx;
+	struct cvmx_pki_buf_ctl_s cn78xx;
+	struct cvmx_pki_buf_ctl_s cn78xxp1;
+	struct cvmx_pki_buf_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pki_buf_ctl cvmx_pki_buf_ctl_t;
+
+/**
+ * cvmx_pki_chan#_cfg
+ *
+ * This register configures each channel.
+ *
+ */
+union cvmx_pki_chanx_cfg {
+	u64 u64;
+	struct cvmx_pki_chanx_cfg_s {
+		u64 reserved_17_63 : 47;
+		u64 imp : 1;
+		u64 reserved_10_15 : 6;
+		u64 bpid : 10;
+	} s;
+	struct cvmx_pki_chanx_cfg_s cn73xx;
+	struct cvmx_pki_chanx_cfg_s cn78xx;
+	struct cvmx_pki_chanx_cfg_s cn78xxp1;
+	struct cvmx_pki_chanx_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pki_chanx_cfg cvmx_pki_chanx_cfg_t;
+
+/**
+ * cvmx_pki_cl#_ecc_ctl
+ *
+ * This register configures ECC. All of PKI_CL()_ECC_CTL must be configured identically.
+ *
+ */
+union cvmx_pki_clx_ecc_ctl {
+	u64 u64;
+	struct cvmx_pki_clx_ecc_ctl_s {
+		u64 pcam_en : 1;
+		u64 reserved_24_62 : 39;
+		u64 pcam1_flip : 2;
+		u64 pcam0_flip : 2;
+		u64 smem_flip : 2;
+		u64 dmem_flip : 1;
+		u64 rf_flip : 1;
+		u64 reserved_5_15 : 11;
+		u64 pcam1_cdis : 1;
+		u64 pcam0_cdis : 1;
+		u64 smem_cdis : 1;
+		u64 dmem_cdis : 1;
+		u64 rf_cdis : 1;
+	} s;
+	struct cvmx_pki_clx_ecc_ctl_s cn73xx;
+	struct cvmx_pki_clx_ecc_ctl_s cn78xx;
+	struct cvmx_pki_clx_ecc_ctl_s cn78xxp1;
+	struct cvmx_pki_clx_ecc_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_ecc_ctl cvmx_pki_clx_ecc_ctl_t;
+
+/**
+ * cvmx_pki_cl#_ecc_int
+ */
+union cvmx_pki_clx_ecc_int {
+	u64 u64;
+	struct cvmx_pki_clx_ecc_int_s {
+		u64 reserved_8_63 : 56;
+		u64 pcam1_dbe : 1;
+		u64 pcam1_sbe : 1;
+		u64 pcam0_dbe : 1;
+		u64 pcam0_sbe : 1;
+		u64 smem_dbe : 1;
+		u64 smem_sbe : 1;
+		u64 dmem_perr : 1;
+		u64 rf_perr : 1;
+	} s;
+	struct cvmx_pki_clx_ecc_int_s cn73xx;
+	struct cvmx_pki_clx_ecc_int_s cn78xx;
+	struct cvmx_pki_clx_ecc_int_s cn78xxp1;
+	struct cvmx_pki_clx_ecc_int_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_ecc_int cvmx_pki_clx_ecc_int_t;
+
+/**
+ * cvmx_pki_cl#_int
+ */
+union cvmx_pki_clx_int {
+	u64 u64;
+	struct cvmx_pki_clx_int_s {
+		u64 reserved_4_63 : 60;
+		u64 iptint : 1;
+		u64 sched_conf : 1;
+		u64 pcam_conf : 2;
+	} s;
+	struct cvmx_pki_clx_int_s cn73xx;
+	struct cvmx_pki_clx_int_s cn78xx;
+	struct cvmx_pki_clx_int_s cn78xxp1;
+	struct cvmx_pki_clx_int_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_int cvmx_pki_clx_int_t;
+
+/**
+ * cvmx_pki_cl#_pcam#_action#
+ *
+ * This register configures the result side of the PCAM. PKI hardware is opaque as to the use
+ * of the 32 bits of CAM result.
+ *
+ * For each legal j and k, PKI_CL(i)_PCAM(j)_ACTION(k) must be configured identically for i=0..1.
+ *
+ * With the current parse engine code:
+ *
+ * Action performed based on PCAM lookup using the PKI_CL()_PCAM()_TERM() and
+ * PKI_CL()_PCAM()_MATCH() registers.
+ *
+ * If lookup data matches no PCAM entries, then no action takes place. No matches indicates
+ * normal parsing will continue.
+ *
+ * If data matches multiple PCAM entries, PKI_WQE_S[ERRLEV,OPCODE] of the processed packet may
+ * be set to PKI_ERRLEV_E::RE,PKI_OPCODE_E::RE_PKIPCAM and the PKI_CL()_INT[PCAM_CONF] error
+ * interrupt is signaled.  Once a conflict is detected, the PCAM state is unpredictable and is
+ * required to be fully reconfigured before further valid processing can take place.
+ */
+union cvmx_pki_clx_pcamx_actionx {
+	u64 u64;
+	struct cvmx_pki_clx_pcamx_actionx_s {
+		u64 reserved_31_63 : 33;
+		u64 pmc : 7;
+		u64 style_add : 8;
+		u64 pf : 3;
+		u64 setty : 5;
+		u64 advance : 8;
+	} s;
+	struct cvmx_pki_clx_pcamx_actionx_s cn73xx;
+	struct cvmx_pki_clx_pcamx_actionx_s cn78xx;
+	struct cvmx_pki_clx_pcamx_actionx_s cn78xxp1;
+	struct cvmx_pki_clx_pcamx_actionx_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_pcamx_actionx cvmx_pki_clx_pcamx_actionx_t;
+
+/**
+ * cvmx_pki_cl#_pcam#_match#
+ *
+ * This register configures the match side of the PCAM. PKI hardware is opaque as to the use
+ * of the 32 bits of CAM data.
+ *
+ * For each legal j and k, PKI_CL(i)_PCAM(j)_MATCH(k) must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_pcamx_matchx {
+	u64 u64;
+	struct cvmx_pki_clx_pcamx_matchx_s {
+		u64 data1 : 32;
+		u64 data0 : 32;
+	} s;
+	struct cvmx_pki_clx_pcamx_matchx_s cn73xx;
+	struct cvmx_pki_clx_pcamx_matchx_s cn78xx;
+	struct cvmx_pki_clx_pcamx_matchx_s cn78xxp1;
+	struct cvmx_pki_clx_pcamx_matchx_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_pcamx_matchx cvmx_pki_clx_pcamx_matchx_t;
+
+/**
+ * cvmx_pki_cl#_pcam#_term#
+ *
+ * This register configures the match side of the PCAM. PKI hardware is opaque as to the use
+ * of the 16 bits of CAM data; the split between TERM and STYLE is defined by the
+ * parse engine.
+ *
+ * For each legal j and k, PKI_CL(i)_PCAM(j)_TERM(k) must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_pcamx_termx {
+	u64 u64;
+	struct cvmx_pki_clx_pcamx_termx_s {
+		u64 valid : 1;
+		u64 reserved_48_62 : 15;
+		u64 term1 : 8;
+		u64 style1 : 8;
+		u64 reserved_16_31 : 16;
+		u64 term0 : 8;
+		u64 style0 : 8;
+	} s;
+	struct cvmx_pki_clx_pcamx_termx_s cn73xx;
+	struct cvmx_pki_clx_pcamx_termx_s cn78xx;
+	struct cvmx_pki_clx_pcamx_termx_s cn78xxp1;
+	struct cvmx_pki_clx_pcamx_termx_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_pcamx_termx cvmx_pki_clx_pcamx_termx_t;
+
+/**
+ * cvmx_pki_cl#_pkind#_cfg
+ *
+ * This register is inside PKI_CL()_PKIND()_KMEM(). These CSRs are used only by
+ * the PKI parse engine.
+ *
+ * For each legal j, PKI_CL(i)_PKIND(j)_CFG must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_pkindx_cfg {
+	u64 u64;
+	struct cvmx_pki_clx_pkindx_cfg_s {
+		u64 reserved_11_63 : 53;
+		u64 lg_custom_layer : 3;
+		u64 fcs_pres : 1;
+		u64 mpls_en : 1;
+		u64 inst_hdr : 1;
+		u64 lg_custom : 1;
+		u64 fulc_en : 1;
+		u64 dsa_en : 1;
+		u64 hg2_en : 1;
+		u64 hg_en : 1;
+	} s;
+	struct cvmx_pki_clx_pkindx_cfg_s cn73xx;
+	struct cvmx_pki_clx_pkindx_cfg_s cn78xx;
+	struct cvmx_pki_clx_pkindx_cfg_s cn78xxp1;
+	struct cvmx_pki_clx_pkindx_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_pkindx_cfg cvmx_pki_clx_pkindx_cfg_t;
+
+/**
+ * cvmx_pki_cl#_pkind#_kmem#
+ *
+ * This register initializes the KMEM, which initializes the parse engine state for each
+ * pkind. These CSRs are used only by the PKI parse engine.
+ *
+ * Inside the KMEM are the following parse engine registers. These registers are the
+ * preferred access method for software:
+ * * PKI_CL()_PKIND()_CFG.
+ * * PKI_CL()_PKIND()_STYLE.
+ * * PKI_CL()_PKIND()_SKIP.
+ * * PKI_CL()_PKIND()_L2_CUSTOM.
+ * * PKI_CL()_PKIND()_LG_CUSTOM.
+ *
+ * To avoid overlapping addresses, these aliases have address bit 20 set in contrast to
+ * this register; the PKI address decoder ignores bit 20 when accessing
+ * PKI_CL()_PKIND()_KMEM().
+ *
+ * Software must reload the PKI_CL()_PKIND()_KMEM() registers upon the detection of
+ * PKI_ECC_INT0[KMEM_SBE] or PKI_ECC_INT0[KMEM_DBE].
+ *
+ * For each legal j and k value, PKI_CL(i)_PKIND(j)_KMEM(k) must be configured
+ * identically for i=0..1.
+ */
+union cvmx_pki_clx_pkindx_kmemx {
+	u64 u64;
+	struct cvmx_pki_clx_pkindx_kmemx_s {
+		u64 reserved_16_63 : 48;
+		u64 data : 16;
+	} s;
+	struct cvmx_pki_clx_pkindx_kmemx_s cn73xx;
+	struct cvmx_pki_clx_pkindx_kmemx_s cn78xx;
+	struct cvmx_pki_clx_pkindx_kmemx_s cn78xxp1;
+	struct cvmx_pki_clx_pkindx_kmemx_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_pkindx_kmemx cvmx_pki_clx_pkindx_kmemx_t;
+
+/**
+ * cvmx_pki_cl#_pkind#_l2_custom
+ *
+ * This register is inside PKI_CL()_PKIND()_KMEM(). These CSRs are used only by
+ * the PKI parse engine.
+ *
+ * For each legal j, PKI_CL(i)_PKIND(j)_L2_CUSTOM must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_pkindx_l2_custom {
+	u64 u64;
+	struct cvmx_pki_clx_pkindx_l2_custom_s {
+		u64 reserved_16_63 : 48;
+		u64 valid : 1;
+		u64 reserved_8_14 : 7;
+		u64 offset : 8;
+	} s;
+	struct cvmx_pki_clx_pkindx_l2_custom_s cn73xx;
+	struct cvmx_pki_clx_pkindx_l2_custom_s cn78xx;
+	struct cvmx_pki_clx_pkindx_l2_custom_s cn78xxp1;
+	struct cvmx_pki_clx_pkindx_l2_custom_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_pkindx_l2_custom cvmx_pki_clx_pkindx_l2_custom_t;
+
+/**
+ * cvmx_pki_cl#_pkind#_lg_custom
+ *
+ * This register is inside PKI_CL()_PKIND()_KMEM(). These CSRs are used only by
+ * the PKI parse engine.
+ *
+ * For each legal j, PKI_CL(i)_PKIND(j)_LG_CUSTOM must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_pkindx_lg_custom {
+	u64 u64;
+	struct cvmx_pki_clx_pkindx_lg_custom_s {
+		u64 reserved_8_63 : 56;
+		u64 offset : 8;
+	} s;
+	struct cvmx_pki_clx_pkindx_lg_custom_s cn73xx;
+	struct cvmx_pki_clx_pkindx_lg_custom_s cn78xx;
+	struct cvmx_pki_clx_pkindx_lg_custom_s cn78xxp1;
+	struct cvmx_pki_clx_pkindx_lg_custom_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_pkindx_lg_custom cvmx_pki_clx_pkindx_lg_custom_t;
+
+/**
+ * cvmx_pki_cl#_pkind#_skip
+ *
+ * This register is inside PKI_CL()_PKIND()_KMEM(). These CSRs are used only by
+ * the PKI parse engine.
+ *
+ * For each legal j, PKI_CL(i)_PKIND(j)_SKIP must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_pkindx_skip {
+	u64 u64;
+	struct cvmx_pki_clx_pkindx_skip_s {
+		u64 reserved_16_63 : 48;
+		u64 fcs_skip : 8;
+		u64 inst_skip : 8;
+	} s;
+	struct cvmx_pki_clx_pkindx_skip_s cn73xx;
+	struct cvmx_pki_clx_pkindx_skip_s cn78xx;
+	struct cvmx_pki_clx_pkindx_skip_s cn78xxp1;
+	struct cvmx_pki_clx_pkindx_skip_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_pkindx_skip cvmx_pki_clx_pkindx_skip_t;
+
+/**
+ * cvmx_pki_cl#_pkind#_style
+ *
+ * This register is inside PKI_CL()_PKIND()_KMEM(). These CSRs are used only by
+ * the PKI parse engine.
+ *
+ * For each legal j, PKI_CL(i)_PKIND(j)_STYLE must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_pkindx_style {
+	u64 u64;
+	struct cvmx_pki_clx_pkindx_style_s {
+		u64 reserved_15_63 : 49;
+		u64 pm : 7;
+		u64 style : 8;
+	} s;
+	struct cvmx_pki_clx_pkindx_style_s cn73xx;
+	struct cvmx_pki_clx_pkindx_style_s cn78xx;
+	struct cvmx_pki_clx_pkindx_style_s cn78xxp1;
+	struct cvmx_pki_clx_pkindx_style_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_pkindx_style cvmx_pki_clx_pkindx_style_t;
+
+/**
+ * cvmx_pki_cl#_smem#
+ *
+ * This register initializes the SMEM, which configures the parse engine. These CSRs
+ * are used by the PKI parse engine and other PKI hardware.
+ *
+ * Inside the SMEM are the following parse engine registers. These registers are the
+ * preferred access method for software:
+ * * PKI_CL()_STYLE()_CFG
+ * * PKI_CL()_STYLE()_CFG2
+ * * PKI_CL()_STYLE()_ALG
+ *
+ * To avoid overlapping addresses, these aliases have address bit 20 set in contrast to
+ * this register; the PKI address decoder ignores bit 20 when accessing
+ * PKI_CL()_SMEM().
+ *
+ * Software must reload the PKI_CL()_SMEM() registers upon the detection of
+ * PKI_CL()_ECC_INT[SMEM_SBE] or PKI_CL()_ECC_INT[SMEM_DBE].
+ *
+ * For each legal j, PKI_CL(i)_SMEM(j) must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_smemx {
+	u64 u64;
+	struct cvmx_pki_clx_smemx_s {
+		u64 reserved_32_63 : 32;
+		u64 data : 32;
+	} s;
+	struct cvmx_pki_clx_smemx_s cn73xx;
+	struct cvmx_pki_clx_smemx_s cn78xx;
+	struct cvmx_pki_clx_smemx_s cn78xxp1;
+	struct cvmx_pki_clx_smemx_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_smemx cvmx_pki_clx_smemx_t;
+
+/**
+ * cvmx_pki_cl#_start
+ *
+ * This register configures a cluster. All of PKI_CL()_START must be programmed identically.
+ *
+ */
+union cvmx_pki_clx_start {
+	u64 u64;
+	struct cvmx_pki_clx_start_s {
+		u64 reserved_11_63 : 53;
+		u64 start : 11;
+	} s;
+	struct cvmx_pki_clx_start_s cn73xx;
+	struct cvmx_pki_clx_start_s cn78xx;
+	struct cvmx_pki_clx_start_s cn78xxp1;
+	struct cvmx_pki_clx_start_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_start cvmx_pki_clx_start_t;
+
+/**
+ * cvmx_pki_cl#_style#_alg
+ *
+ * This register is inside PKI_CL()_SMEM(). These CSRs are used only by
+ * the PKI parse engine.
+ *
+ * For each legal j, PKI_CL(i)_STYLE(j)_ALG must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_stylex_alg {
+	u64 u64;
+	struct cvmx_pki_clx_stylex_alg_s {
+		u64 reserved_32_63 : 32;
+		u64 tt : 2;
+		u64 apad_nip : 3;
+		u64 qpg_qos : 3;
+		u64 qpg_port_sh : 3;
+		u64 qpg_port_msb : 4;
+		u64 reserved_11_16 : 6;
+		u64 tag_vni : 1;
+		u64 tag_gtp : 1;
+		u64 tag_spi : 1;
+		u64 tag_syn : 1;
+		u64 tag_pctl : 1;
+		u64 tag_vs1 : 1;
+		u64 tag_vs0 : 1;
+		u64 tag_vlan : 1;
+		u64 tag_mpls0 : 1;
+		u64 tag_prt : 1;
+		u64 wqe_vs : 1;
+	} s;
+	struct cvmx_pki_clx_stylex_alg_s cn73xx;
+	struct cvmx_pki_clx_stylex_alg_s cn78xx;
+	struct cvmx_pki_clx_stylex_alg_s cn78xxp1;
+	struct cvmx_pki_clx_stylex_alg_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_stylex_alg cvmx_pki_clx_stylex_alg_t;
+
+/**
+ * cvmx_pki_cl#_style#_cfg
+ *
+ * This register is inside PKI_CL()_SMEM(). These CSRs are used by
+ * the PKI parse engine and other PKI hardware.
+ *
+ * For each legal j, PKI_CL(i)_STYLE(j)_CFG must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_stylex_cfg {
+	u64 u64;
+	struct cvmx_pki_clx_stylex_cfg_s {
+		u64 reserved_31_63 : 33;
+		u64 ip6_udp_opt : 1;
+		u64 lenerr_en : 1;
+		u64 lenerr_eqpad : 1;
+		u64 minmax_sel : 1;
+		u64 maxerr_en : 1;
+		u64 minerr_en : 1;
+		u64 qpg_dis_grptag : 1;
+		u64 fcs_strip : 1;
+		u64 fcs_chk : 1;
+		u64 rawdrp : 1;
+		u64 drop : 1;
+		u64 nodrop : 1;
+		u64 qpg_dis_padd : 1;
+		u64 qpg_dis_grp : 1;
+		u64 qpg_dis_aura : 1;
+		u64 reserved_11_15 : 5;
+		u64 qpg_base : 11;
+	} s;
+	struct cvmx_pki_clx_stylex_cfg_s cn73xx;
+	struct cvmx_pki_clx_stylex_cfg_s cn78xx;
+	struct cvmx_pki_clx_stylex_cfg_s cn78xxp1;
+	struct cvmx_pki_clx_stylex_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_stylex_cfg cvmx_pki_clx_stylex_cfg_t;
+
+/**
+ * cvmx_pki_cl#_style#_cfg2
+ *
+ * This register is inside PKI_CL()_SMEM(). These CSRs are used by
+ * the PKI parse engine and other PKI hardware.
+ *
+ * For each legal j, PKI_CL(i)_STYLE(j)_CFG2 must be configured identically for i=0..1.
+ */
+union cvmx_pki_clx_stylex_cfg2 {
+	u64 u64;
+	struct cvmx_pki_clx_stylex_cfg2_s {
+		u64 reserved_32_63 : 32;
+		u64 tag_inc : 4;
+		u64 reserved_25_27 : 3;
+		u64 tag_masken : 1;
+		u64 tag_src_lg : 1;
+		u64 tag_src_lf : 1;
+		u64 tag_src_le : 1;
+		u64 tag_src_ld : 1;
+		u64 tag_src_lc : 1;
+		u64 tag_src_lb : 1;
+		u64 tag_dst_lg : 1;
+		u64 tag_dst_lf : 1;
+		u64 tag_dst_le : 1;
+		u64 tag_dst_ld : 1;
+		u64 tag_dst_lc : 1;
+		u64 tag_dst_lb : 1;
+		u64 len_lg : 1;
+		u64 len_lf : 1;
+		u64 len_le : 1;
+		u64 len_ld : 1;
+		u64 len_lc : 1;
+		u64 len_lb : 1;
+		u64 csum_lg : 1;
+		u64 csum_lf : 1;
+		u64 csum_le : 1;
+		u64 csum_ld : 1;
+		u64 csum_lc : 1;
+		u64 csum_lb : 1;
+	} s;
+	struct cvmx_pki_clx_stylex_cfg2_s cn73xx;
+	struct cvmx_pki_clx_stylex_cfg2_s cn78xx;
+	struct cvmx_pki_clx_stylex_cfg2_s cn78xxp1;
+	struct cvmx_pki_clx_stylex_cfg2_s cnf75xx;
+};
+
+typedef union cvmx_pki_clx_stylex_cfg2 cvmx_pki_clx_stylex_cfg2_t;
+
+/**
+ * cvmx_pki_clken
+ */
+union cvmx_pki_clken {
+	u64 u64;
+	struct cvmx_pki_clken_s {
+		u64 reserved_1_63 : 63;
+		u64 clken : 1;
+	} s;
+	struct cvmx_pki_clken_s cn73xx;
+	struct cvmx_pki_clken_s cn78xx;
+	struct cvmx_pki_clken_s cn78xxp1;
+	struct cvmx_pki_clken_s cnf75xx;
+};
+
+typedef union cvmx_pki_clken cvmx_pki_clken_t;
+
+/**
+ * cvmx_pki_dstat#_stat0
+ *
+ * This register contains statistics indexed by PKI_QPG_TBLB()[DSTAT_ID].
+ *
+ */
+union cvmx_pki_dstatx_stat0 {
+	u64 u64;
+	struct cvmx_pki_dstatx_stat0_s {
+		u64 reserved_32_63 : 32;
+		u64 pkts : 32;
+	} s;
+	struct cvmx_pki_dstatx_stat0_s cn73xx;
+	struct cvmx_pki_dstatx_stat0_s cn78xx;
+	struct cvmx_pki_dstatx_stat0_s cnf75xx;
+};
+
+typedef union cvmx_pki_dstatx_stat0 cvmx_pki_dstatx_stat0_t;
+
+/**
+ * cvmx_pki_dstat#_stat1
+ *
+ * This register contains statistics indexed by PKI_QPG_TBLB()[DSTAT_ID].
+ *
+ */
+union cvmx_pki_dstatx_stat1 {
+	u64 u64;
+	struct cvmx_pki_dstatx_stat1_s {
+		u64 reserved_40_63 : 24;
+		u64 octs : 40;
+	} s;
+	struct cvmx_pki_dstatx_stat1_s cn73xx;
+	struct cvmx_pki_dstatx_stat1_s cn78xx;
+	struct cvmx_pki_dstatx_stat1_s cnf75xx;
+};
+
+typedef union cvmx_pki_dstatx_stat1 cvmx_pki_dstatx_stat1_t;
+
+/**
+ * cvmx_pki_dstat#_stat2
+ *
+ * This register contains statistics indexed by PKI_QPG_TBLB()[DSTAT_ID].
+ *
+ */
+union cvmx_pki_dstatx_stat2 {
+	u64 u64;
+	struct cvmx_pki_dstatx_stat2_s {
+		u64 reserved_32_63 : 32;
+		u64 err_pkts : 32;
+	} s;
+	struct cvmx_pki_dstatx_stat2_s cn73xx;
+	struct cvmx_pki_dstatx_stat2_s cn78xx;
+	struct cvmx_pki_dstatx_stat2_s cnf75xx;
+};
+
+typedef union cvmx_pki_dstatx_stat2 cvmx_pki_dstatx_stat2_t;
+
+/**
+ * cvmx_pki_dstat#_stat3
+ *
+ * This register contains statistics indexed by PKI_QPG_TBLB()[DSTAT_ID].
+ *
+ */
+union cvmx_pki_dstatx_stat3 {
+	u64 u64;
+	struct cvmx_pki_dstatx_stat3_s {
+		u64 reserved_32_63 : 32;
+		u64 drp_pkts : 32;
+	} s;
+	struct cvmx_pki_dstatx_stat3_s cn73xx;
+	struct cvmx_pki_dstatx_stat3_s cn78xx;
+	struct cvmx_pki_dstatx_stat3_s cnf75xx;
+};
+
+typedef union cvmx_pki_dstatx_stat3 cvmx_pki_dstatx_stat3_t;
+
+/**
+ * cvmx_pki_dstat#_stat4
+ *
+ * This register contains statistics indexed by PKI_QPG_TBLB()[DSTAT_ID].
+ *
+ */
+union cvmx_pki_dstatx_stat4 {
+	u64 u64;
+	struct cvmx_pki_dstatx_stat4_s {
+		u64 reserved_40_63 : 24;
+		u64 drp_octs : 40;
+	} s;
+	struct cvmx_pki_dstatx_stat4_s cn73xx;
+	struct cvmx_pki_dstatx_stat4_s cn78xx;
+	struct cvmx_pki_dstatx_stat4_s cnf75xx;
+};
+
+typedef union cvmx_pki_dstatx_stat4 cvmx_pki_dstatx_stat4_t;
+
+/**
+ * cvmx_pki_ecc_ctl0
+ *
+ * This register allows inserting ECC errors for testing.
+ *
+ */
+union cvmx_pki_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pki_ecc_ctl0_s {
+		u64 reserved_24_63 : 40;
+		u64 ldfif_flip : 2;
+		u64 ldfif_cdis : 1;
+		u64 pbe_flip : 2;
+		u64 pbe_cdis : 1;
+		u64 wadr_flip : 2;
+		u64 wadr_cdis : 1;
+		u64 nxtptag_flip : 2;
+		u64 nxtptag_cdis : 1;
+		u64 curptag_flip : 2;
+		u64 curptag_cdis : 1;
+		u64 nxtblk_flip : 2;
+		u64 nxtblk_cdis : 1;
+		u64 kmem_flip : 2;
+		u64 kmem_cdis : 1;
+		u64 asm_flip : 2;
+		u64 asm_cdis : 1;
+	} s;
+	struct cvmx_pki_ecc_ctl0_s cn73xx;
+	struct cvmx_pki_ecc_ctl0_s cn78xx;
+	struct cvmx_pki_ecc_ctl0_s cn78xxp1;
+	struct cvmx_pki_ecc_ctl0_s cnf75xx;
+};
+
+typedef union cvmx_pki_ecc_ctl0 cvmx_pki_ecc_ctl0_t;
+
+/**
+ * cvmx_pki_ecc_ctl1
+ *
+ * This register allows inserting ECC errors for testing.
+ *
+ */
+union cvmx_pki_ecc_ctl1 {
+	u64 u64;
+	struct cvmx_pki_ecc_ctl1_s {
+		u64 reserved_51_63 : 13;
+		u64 sws_flip : 2;
+		u64 sws_cdis : 1;
+		u64 wqeout_flip : 2;
+		u64 wqeout_cdis : 1;
+		u64 doa_flip : 2;
+		u64 doa_cdis : 1;
+		u64 bpid_flip : 2;
+		u64 bpid_cdis : 1;
+		u64 reserved_30_38 : 9;
+		u64 plc_flip : 2;
+		u64 plc_cdis : 1;
+		u64 pktwq_flip : 2;
+		u64 pktwq_cdis : 1;
+		u64 reserved_21_23 : 3;
+		u64 stylewq2_flip : 2;
+		u64 stylewq2_cdis : 1;
+		u64 tag_flip : 2;
+		u64 tag_cdis : 1;
+		u64 aura_flip : 2;
+		u64 aura_cdis : 1;
+		u64 chan_flip : 2;
+		u64 chan_cdis : 1;
+		u64 pbtag_flip : 2;
+		u64 pbtag_cdis : 1;
+		u64 stylewq_flip : 2;
+		u64 stylewq_cdis : 1;
+		u64 qpg_flip : 2;
+		u64 qpg_cdis : 1;
+	} s;
+	struct cvmx_pki_ecc_ctl1_s cn73xx;
+	struct cvmx_pki_ecc_ctl1_s cn78xx;
+	struct cvmx_pki_ecc_ctl1_cn78xxp1 {
+		u64 reserved_51_63 : 13;
+		u64 sws_flip : 2;
+		u64 sws_cdis : 1;
+		u64 wqeout_flip : 2;
+		u64 wqeout_cdis : 1;
+		u64 doa_flip : 2;
+		u64 doa_cdis : 1;
+		u64 bpid_flip : 2;
+		u64 bpid_cdis : 1;
+		u64 reserved_30_38 : 9;
+		u64 plc_flip : 2;
+		u64 plc_cdis : 1;
+		u64 pktwq_flip : 2;
+		u64 pktwq_cdis : 1;
+		u64 reserved_18_23 : 6;
+		u64 tag_flip : 2;
+		u64 tag_cdis : 1;
+		u64 aura_flip : 2;
+		u64 aura_cdis : 1;
+		u64 chan_flip : 2;
+		u64 chan_cdis : 1;
+		u64 pbtag_flip : 2;
+		u64 pbtag_cdis : 1;
+		u64 stylewq_flip : 2;
+		u64 stylewq_cdis : 1;
+		u64 qpg_flip : 2;
+		u64 qpg_cdis : 1;
+	} cn78xxp1;
+	struct cvmx_pki_ecc_ctl1_s cnf75xx;
+};
+
+typedef union cvmx_pki_ecc_ctl1 cvmx_pki_ecc_ctl1_t;
+
+/**
+ * cvmx_pki_ecc_ctl2
+ *
+ * This register allows inserting ECC errors for testing.
+ *
+ */
+union cvmx_pki_ecc_ctl2 {
+	u64 u64;
+	struct cvmx_pki_ecc_ctl2_s {
+		u64 reserved_3_63 : 61;
+		u64 imem_flip : 2;
+		u64 imem_cdis : 1;
+	} s;
+	struct cvmx_pki_ecc_ctl2_s cn73xx;
+	struct cvmx_pki_ecc_ctl2_s cn78xx;
+	struct cvmx_pki_ecc_ctl2_s cn78xxp1;
+	struct cvmx_pki_ecc_ctl2_s cnf75xx;
+};
+
+typedef union cvmx_pki_ecc_ctl2 cvmx_pki_ecc_ctl2_t;
+
+/**
+ * cvmx_pki_ecc_int0
+ */
+union cvmx_pki_ecc_int0 {
+	u64 u64;
+	struct cvmx_pki_ecc_int0_s {
+		u64 reserved_16_63 : 48;
+		u64 ldfif_dbe : 1;
+		u64 ldfif_sbe : 1;
+		u64 pbe_dbe : 1;
+		u64 pbe_sbe : 1;
+		u64 wadr_dbe : 1;
+		u64 wadr_sbe : 1;
+		u64 nxtptag_dbe : 1;
+		u64 nxtptag_sbe : 1;
+		u64 curptag_dbe : 1;
+		u64 curptag_sbe : 1;
+		u64 nxtblk_dbe : 1;
+		u64 nxtblk_sbe : 1;
+		u64 kmem_dbe : 1;
+		u64 kmem_sbe : 1;
+		u64 asm_dbe : 1;
+		u64 asm_sbe : 1;
+	} s;
+	struct cvmx_pki_ecc_int0_s cn73xx;
+	struct cvmx_pki_ecc_int0_s cn78xx;
+	struct cvmx_pki_ecc_int0_s cn78xxp1;
+	struct cvmx_pki_ecc_int0_s cnf75xx;
+};
+
+typedef union cvmx_pki_ecc_int0 cvmx_pki_ecc_int0_t;
+
+/**
+ * cvmx_pki_ecc_int1
+ */
+union cvmx_pki_ecc_int1 {
+	u64 u64;
+	struct cvmx_pki_ecc_int1_s {
+		u64 reserved_34_63 : 30;
+		u64 sws_dbe : 1;
+		u64 sws_sbe : 1;
+		u64 wqeout_dbe : 1;
+		u64 wqeout_sbe : 1;
+		u64 doa_dbe : 1;
+		u64 doa_sbe : 1;
+		u64 bpid_dbe : 1;
+		u64 bpid_sbe : 1;
+		u64 reserved_20_25 : 6;
+		u64 plc_dbe : 1;
+		u64 plc_sbe : 1;
+		u64 pktwq_dbe : 1;
+		u64 pktwq_sbe : 1;
+		u64 reserved_12_15 : 4;
+		u64 tag_dbe : 1;
+		u64 tag_sbe : 1;
+		u64 aura_dbe : 1;
+		u64 aura_sbe : 1;
+		u64 chan_dbe : 1;
+		u64 chan_sbe : 1;
+		u64 pbtag_dbe : 1;
+		u64 pbtag_sbe : 1;
+		u64 stylewq_dbe : 1;
+		u64 stylewq_sbe : 1;
+		u64 qpg_dbe : 1;
+		u64 qpg_sbe : 1;
+	} s;
+	struct cvmx_pki_ecc_int1_s cn73xx;
+	struct cvmx_pki_ecc_int1_s cn78xx;
+	struct cvmx_pki_ecc_int1_s cn78xxp1;
+	struct cvmx_pki_ecc_int1_s cnf75xx;
+};
+
+typedef union cvmx_pki_ecc_int1 cvmx_pki_ecc_int1_t;
+
+/**
+ * cvmx_pki_ecc_int2
+ */
+union cvmx_pki_ecc_int2 {
+	u64 u64;
+	struct cvmx_pki_ecc_int2_s {
+		u64 reserved_2_63 : 62;
+		u64 imem_dbe : 1;
+		u64 imem_sbe : 1;
+	} s;
+	struct cvmx_pki_ecc_int2_s cn73xx;
+	struct cvmx_pki_ecc_int2_s cn78xx;
+	struct cvmx_pki_ecc_int2_s cn78xxp1;
+	struct cvmx_pki_ecc_int2_s cnf75xx;
+};
+
+typedef union cvmx_pki_ecc_int2 cvmx_pki_ecc_int2_t;
+
+/**
+ * cvmx_pki_frm_len_chk#
+ */
+union cvmx_pki_frm_len_chkx {
+	u64 u64;
+	struct cvmx_pki_frm_len_chkx_s {
+		u64 reserved_32_63 : 32;
+		u64 maxlen : 16;
+		u64 minlen : 16;
+	} s;
+	struct cvmx_pki_frm_len_chkx_s cn73xx;
+	struct cvmx_pki_frm_len_chkx_s cn78xx;
+	struct cvmx_pki_frm_len_chkx_s cn78xxp1;
+	struct cvmx_pki_frm_len_chkx_s cnf75xx;
+};
+
+typedef union cvmx_pki_frm_len_chkx cvmx_pki_frm_len_chkx_t;
+
+/**
+ * cvmx_pki_gbl_pen
+ *
+ * This register contains global configuration information that applies to all
+ * pkinds. The values are opaque to PKI HW.
+ *
+ * This is intended for communication between the higher-level software SDK, and the
+ * SDK code that loads PKI_IMEM() with the parse engine code. This allows the loader to
+ * appropriately select the parse engine code with only those features required, so that
+ * performance will be optimized.
+ */
+union cvmx_pki_gbl_pen {
+	u64 u64;
+	struct cvmx_pki_gbl_pen_s {
+		u64 reserved_10_63 : 54;
+		u64 virt_pen : 1;
+		u64 clg_pen : 1;
+		u64 cl2_pen : 1;
+		u64 l4_pen : 1;
+		u64 il3_pen : 1;
+		u64 l3_pen : 1;
+		u64 mpls_pen : 1;
+		u64 fulc_pen : 1;
+		u64 dsa_pen : 1;
+		u64 hg_pen : 1;
+	} s;
+	struct cvmx_pki_gbl_pen_s cn73xx;
+	struct cvmx_pki_gbl_pen_s cn78xx;
+	struct cvmx_pki_gbl_pen_s cn78xxp1;
+	struct cvmx_pki_gbl_pen_s cnf75xx;
+};
+
+typedef union cvmx_pki_gbl_pen cvmx_pki_gbl_pen_t;
+
+/**
+ * cvmx_pki_gen_int
+ */
+union cvmx_pki_gen_int {
+	u64 u64;
+	struct cvmx_pki_gen_int_s {
+		u64 reserved_10_63 : 54;
+		u64 bufs_oflow : 1;
+		u64 pkt_size_oflow : 1;
+		u64 x2p_req_ofl : 1;
+		u64 drp_noavail : 1;
+		u64 dat : 1;
+		u64 eop : 1;
+		u64 sop : 1;
+		u64 bckprs : 1;
+		u64 crcerr : 1;
+		u64 pktdrp : 1;
+	} s;
+	struct cvmx_pki_gen_int_s cn73xx;
+	struct cvmx_pki_gen_int_s cn78xx;
+	struct cvmx_pki_gen_int_cn78xxp1 {
+		u64 reserved_8_63 : 56;
+		u64 x2p_req_ofl : 1;
+		u64 drp_noavail : 1;
+		u64 dat : 1;
+		u64 eop : 1;
+		u64 sop : 1;
+		u64 bckprs : 1;
+		u64 crcerr : 1;
+		u64 pktdrp : 1;
+	} cn78xxp1;
+	struct cvmx_pki_gen_int_s cnf75xx;
+};
+
+typedef union cvmx_pki_gen_int cvmx_pki_gen_int_t;
+
+/**
+ * cvmx_pki_icg#_cfg
+ *
+ * This register configures the cluster group.
+ *
+ */
+union cvmx_pki_icgx_cfg {
+	u64 u64;
+	struct cvmx_pki_icgx_cfg_s {
+		u64 reserved_53_63 : 11;
+		u64 maxipe_use : 5;
+		u64 reserved_36_47 : 12;
+		u64 clusters : 4;
+		u64 reserved_27_31 : 5;
+		u64 release_rqd : 1;
+		u64 mlo : 1;
+		u64 pena : 1;
+		u64 timer : 12;
+		u64 delay : 12;
+	} s;
+	struct cvmx_pki_icgx_cfg_s cn73xx;
+	struct cvmx_pki_icgx_cfg_s cn78xx;
+	struct cvmx_pki_icgx_cfg_s cn78xxp1;
+	struct cvmx_pki_icgx_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pki_icgx_cfg cvmx_pki_icgx_cfg_t;
+
+/**
+ * cvmx_pki_imem#
+ */
+union cvmx_pki_imemx {
+	u64 u64;
+	struct cvmx_pki_imemx_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_pki_imemx_s cn73xx;
+	struct cvmx_pki_imemx_s cn78xx;
+	struct cvmx_pki_imemx_s cn78xxp1;
+	struct cvmx_pki_imemx_s cnf75xx;
+};
+
+typedef union cvmx_pki_imemx cvmx_pki_imemx_t;
+
+/**
+ * cvmx_pki_ltype#_map
+ *
+ * This register is the layer type map, indexed by PKI_LTYPE_E.
+ *
+ */
+union cvmx_pki_ltypex_map {
+	u64 u64;
+	struct cvmx_pki_ltypex_map_s {
+		u64 reserved_3_63 : 61;
+		u64 beltype : 3;
+	} s;
+	struct cvmx_pki_ltypex_map_s cn73xx;
+	struct cvmx_pki_ltypex_map_s cn78xx;
+	struct cvmx_pki_ltypex_map_s cn78xxp1;
+	struct cvmx_pki_ltypex_map_s cnf75xx;
+};
+
+typedef union cvmx_pki_ltypex_map cvmx_pki_ltypex_map_t;
+
+/**
+ * cvmx_pki_pbe_eco
+ */
+union cvmx_pki_pbe_eco {
+	u64 u64;
+	struct cvmx_pki_pbe_eco_s {
+		u64 reserved_32_63 : 32;
+		u64 eco_rw : 32;
+	} s;
+	struct cvmx_pki_pbe_eco_s cn73xx;
+	struct cvmx_pki_pbe_eco_s cn78xx;
+	struct cvmx_pki_pbe_eco_s cnf75xx;
+};
+
+typedef union cvmx_pki_pbe_eco cvmx_pki_pbe_eco_t;
+
+/**
+ * cvmx_pki_pcam_lookup
+ *
+ * For diagnostic use only, this register performs a PCAM lookup against the provided
+ * cluster and PCAM instance and loads results into PKI_PCAM_RESULT.
+ */
+union cvmx_pki_pcam_lookup {
+	u64 u64;
+	struct cvmx_pki_pcam_lookup_s {
+		u64 reserved_54_63 : 10;
+		u64 cl : 2;
+		u64 reserved_49_51 : 3;
+		u64 pcam : 1;
+		u64 term : 8;
+		u64 style : 8;
+		u64 data : 32;
+	} s;
+	struct cvmx_pki_pcam_lookup_s cn73xx;
+	struct cvmx_pki_pcam_lookup_s cn78xx;
+	struct cvmx_pki_pcam_lookup_s cn78xxp1;
+	struct cvmx_pki_pcam_lookup_s cnf75xx;
+};
+
+typedef union cvmx_pki_pcam_lookup cvmx_pki_pcam_lookup_t;
+
+/**
+ * cvmx_pki_pcam_result
+ *
+ * For diagnostic use only, this register returns PCAM results for the most recent write to
+ * PKI_PCAM_LOOKUP. The read will stall until the lookup is completed.
+ * PKI_CL()_ECC_CTL[PCAM_EN] must be clear before accessing this register. Read stall
+ * is implemented by delaying the PKI_PCAM_LOOKUP write acknowledge until the PCAM is
+ * free and the lookup can be issued.
+ */
+union cvmx_pki_pcam_result {
+	u64 u64;
+	struct cvmx_pki_pcam_result_s {
+		u64 reserved_41_63 : 23;
+		u64 match : 1;
+		u64 entry : 8;
+		u64 result : 32;
+	} s;
+	struct cvmx_pki_pcam_result_cn73xx {
+		u64 conflict : 1;
+		u64 reserved_41_62 : 22;
+		u64 match : 1;
+		u64 entry : 8;
+		u64 result : 32;
+	} cn73xx;
+	struct cvmx_pki_pcam_result_cn73xx cn78xx;
+	struct cvmx_pki_pcam_result_cn73xx cn78xxp1;
+	struct cvmx_pki_pcam_result_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pki_pcam_result cvmx_pki_pcam_result_t;
+
+/**
+ * cvmx_pki_pfe_diag
+ */
+union cvmx_pki_pfe_diag {
+	u64 u64;
+	struct cvmx_pki_pfe_diag_s {
+		u64 reserved_1_63 : 63;
+		u64 bad_rid : 1;
+	} s;
+	struct cvmx_pki_pfe_diag_s cn73xx;
+	struct cvmx_pki_pfe_diag_s cn78xx;
+	struct cvmx_pki_pfe_diag_s cn78xxp1;
+	struct cvmx_pki_pfe_diag_s cnf75xx;
+};
+
+typedef union cvmx_pki_pfe_diag cvmx_pki_pfe_diag_t;
+
+/**
+ * cvmx_pki_pfe_eco
+ */
+union cvmx_pki_pfe_eco {
+	u64 u64;
+	struct cvmx_pki_pfe_eco_s {
+		u64 reserved_32_63 : 32;
+		u64 eco_rw : 32;
+	} s;
+	struct cvmx_pki_pfe_eco_s cn73xx;
+	struct cvmx_pki_pfe_eco_s cn78xx;
+	struct cvmx_pki_pfe_eco_s cnf75xx;
+};
+
+typedef union cvmx_pki_pfe_eco cvmx_pki_pfe_eco_t;
+
+/**
+ * cvmx_pki_pix_clken
+ */
+union cvmx_pki_pix_clken {
+	u64 u64;
+	struct cvmx_pki_pix_clken_s {
+		u64 reserved_17_63 : 47;
+		u64 mech : 1;
+		u64 reserved_4_15 : 12;
+		u64 cls : 4;
+	} s;
+	struct cvmx_pki_pix_clken_s cn73xx;
+	struct cvmx_pki_pix_clken_s cn78xx;
+	struct cvmx_pki_pix_clken_s cn78xxp1;
+	struct cvmx_pki_pix_clken_s cnf75xx;
+};
+
+typedef union cvmx_pki_pix_clken cvmx_pki_pix_clken_t;
+
+/**
+ * cvmx_pki_pix_diag
+ */
+union cvmx_pki_pix_diag {
+	u64 u64;
+	struct cvmx_pki_pix_diag_s {
+		u64 reserved_4_63 : 60;
+		u64 nosched : 4;
+	} s;
+	struct cvmx_pki_pix_diag_s cn73xx;
+	struct cvmx_pki_pix_diag_s cn78xx;
+	struct cvmx_pki_pix_diag_s cn78xxp1;
+	struct cvmx_pki_pix_diag_s cnf75xx;
+};
+
+typedef union cvmx_pki_pix_diag cvmx_pki_pix_diag_t;
+
+/**
+ * cvmx_pki_pix_eco
+ */
+union cvmx_pki_pix_eco {
+	u64 u64;
+	struct cvmx_pki_pix_eco_s {
+		u64 reserved_32_63 : 32;
+		u64 eco_rw : 32;
+	} s;
+	struct cvmx_pki_pix_eco_s cn73xx;
+	struct cvmx_pki_pix_eco_s cn78xx;
+	struct cvmx_pki_pix_eco_s cnf75xx;
+};
+
+typedef union cvmx_pki_pix_eco cvmx_pki_pix_eco_t;
+
+/**
+ * cvmx_pki_pkind#_icgsel
+ */
+union cvmx_pki_pkindx_icgsel {
+	u64 u64;
+	struct cvmx_pki_pkindx_icgsel_s {
+		u64 reserved_2_63 : 62;
+		u64 icg : 2;
+	} s;
+	struct cvmx_pki_pkindx_icgsel_s cn73xx;
+	struct cvmx_pki_pkindx_icgsel_s cn78xx;
+	struct cvmx_pki_pkindx_icgsel_s cn78xxp1;
+	struct cvmx_pki_pkindx_icgsel_s cnf75xx;
+};
+
+typedef union cvmx_pki_pkindx_icgsel cvmx_pki_pkindx_icgsel_t;
+
+/**
+ * cvmx_pki_pknd#_inb_stat0
+ *
+ * This register counts inbound statistics, indexed by pkind.
+ *
+ */
+union cvmx_pki_pkndx_inb_stat0 {
+	u64 u64;
+	struct cvmx_pki_pkndx_inb_stat0_s {
+		u64 reserved_48_63 : 16;
+		u64 pkts : 48;
+	} s;
+	struct cvmx_pki_pkndx_inb_stat0_s cn73xx;
+	struct cvmx_pki_pkndx_inb_stat0_s cn78xx;
+	struct cvmx_pki_pkndx_inb_stat0_s cn78xxp1;
+	struct cvmx_pki_pkndx_inb_stat0_s cnf75xx;
+};
+
+typedef union cvmx_pki_pkndx_inb_stat0 cvmx_pki_pkndx_inb_stat0_t;
+
+/**
+ * cvmx_pki_pknd#_inb_stat1
+ *
+ * This register counts inbound statistics, indexed by pkind.
+ *
+ */
+union cvmx_pki_pkndx_inb_stat1 {
+	u64 u64;
+	struct cvmx_pki_pkndx_inb_stat1_s {
+		u64 reserved_48_63 : 16;
+		u64 octs : 48;
+	} s;
+	struct cvmx_pki_pkndx_inb_stat1_s cn73xx;
+	struct cvmx_pki_pkndx_inb_stat1_s cn78xx;
+	struct cvmx_pki_pkndx_inb_stat1_s cn78xxp1;
+	struct cvmx_pki_pkndx_inb_stat1_s cnf75xx;
+};
+
+typedef union cvmx_pki_pkndx_inb_stat1 cvmx_pki_pkndx_inb_stat1_t;
+
+/**
+ * cvmx_pki_pknd#_inb_stat2
+ *
+ * This register counts inbound statistics, indexed by pkind.
+ *
+ */
+union cvmx_pki_pkndx_inb_stat2 {
+	u64 u64;
+	struct cvmx_pki_pkndx_inb_stat2_s {
+		u64 reserved_48_63 : 16;
+		u64 errs : 48;
+	} s;
+	struct cvmx_pki_pkndx_inb_stat2_s cn73xx;
+	struct cvmx_pki_pkndx_inb_stat2_s cn78xx;
+	struct cvmx_pki_pkndx_inb_stat2_s cn78xxp1;
+	struct cvmx_pki_pkndx_inb_stat2_s cnf75xx;
+};
+
+typedef union cvmx_pki_pkndx_inb_stat2 cvmx_pki_pkndx_inb_stat2_t;
+
+/**
+ * cvmx_pki_pkt_err
+ */
+union cvmx_pki_pkt_err {
+	u64 u64;
+	struct cvmx_pki_pkt_err_s {
+		u64 reserved_7_63 : 57;
+		u64 reasm : 7;
+	} s;
+	struct cvmx_pki_pkt_err_s cn73xx;
+	struct cvmx_pki_pkt_err_s cn78xx;
+	struct cvmx_pki_pkt_err_s cn78xxp1;
+	struct cvmx_pki_pkt_err_s cnf75xx;
+};
+
+typedef union cvmx_pki_pkt_err cvmx_pki_pkt_err_t;
+
+/**
+ * cvmx_pki_ptag_avail
+ *
+ * For diagnostic use only.
+ *
+ */
+union cvmx_pki_ptag_avail {
+	u64 u64;
+	struct cvmx_pki_ptag_avail_s {
+		u64 reserved_8_63 : 56;
+		u64 avail : 8;
+	} s;
+	struct cvmx_pki_ptag_avail_s cn73xx;
+	struct cvmx_pki_ptag_avail_s cn78xx;
+	struct cvmx_pki_ptag_avail_s cnf75xx;
+};
+
+typedef union cvmx_pki_ptag_avail cvmx_pki_ptag_avail_t;
+
+/**
+ * cvmx_pki_qpg_tbl#
+ *
+ * These registers are used by PKI BE to indirectly calculate the Portadd/Aura/Group
+ * from the Diffsrv, HiGig or VLAN information as described in QPG. See also
+ * PKI_QPG_TBLB().
+ */
+union cvmx_pki_qpg_tblx {
+	u64 u64;
+	struct cvmx_pki_qpg_tblx_s {
+		u64 reserved_60_63 : 4;
+		u64 padd : 12;
+		u64 grptag_ok : 3;
+		u64 reserved_42_44 : 3;
+		u64 grp_ok : 10;
+		u64 grptag_bad : 3;
+		u64 reserved_26_28 : 3;
+		u64 grp_bad : 10;
+		u64 reserved_12_15 : 4;
+		u64 aura_node : 2;
+		u64 laura : 10;
+	} s;
+	struct cvmx_pki_qpg_tblx_s cn73xx;
+	struct cvmx_pki_qpg_tblx_s cn78xx;
+	struct cvmx_pki_qpg_tblx_s cn78xxp1;
+	struct cvmx_pki_qpg_tblx_s cnf75xx;
+};
+
+typedef union cvmx_pki_qpg_tblx cvmx_pki_qpg_tblx_t;
+
+/**
+ * cvmx_pki_qpg_tblb#
+ *
+ * This register configures the QPG table. See also PKI_QPG_TBL().
+ *
+ */
+union cvmx_pki_qpg_tblbx {
+	u64 u64;
+	struct cvmx_pki_qpg_tblbx_s {
+		u64 reserved_10_63 : 54;
+		u64 dstat_id : 10;
+	} s;
+	struct cvmx_pki_qpg_tblbx_s cn73xx;
+	struct cvmx_pki_qpg_tblbx_s cn78xx;
+	struct cvmx_pki_qpg_tblbx_s cnf75xx;
+};
+
+typedef union cvmx_pki_qpg_tblbx cvmx_pki_qpg_tblbx_t;
+
+/**
+ * cvmx_pki_reasm_sop#
+ */
+union cvmx_pki_reasm_sopx {
+	u64 u64;
+	struct cvmx_pki_reasm_sopx_s {
+		u64 sop : 64;
+	} s;
+	struct cvmx_pki_reasm_sopx_s cn73xx;
+	struct cvmx_pki_reasm_sopx_s cn78xx;
+	struct cvmx_pki_reasm_sopx_s cn78xxp1;
+	struct cvmx_pki_reasm_sopx_s cnf75xx;
+};
+
+typedef union cvmx_pki_reasm_sopx cvmx_pki_reasm_sopx_t;
+
+/**
+ * cvmx_pki_req_wgt
+ *
+ * This register controls the round-robin weights between each PKI requestor. For diagnostic
+ * tuning only.
+ */
+union cvmx_pki_req_wgt {
+	u64 u64;
+	struct cvmx_pki_req_wgt_s {
+		u64 reserved_36_63 : 28;
+		u64 wgt8 : 4;
+		u64 wgt7 : 4;
+		u64 wgt6 : 4;
+		u64 wgt5 : 4;
+		u64 wgt4 : 4;
+		u64 wgt3 : 4;
+		u64 wgt2 : 4;
+		u64 wgt1 : 4;
+		u64 wgt0 : 4;
+	} s;
+	struct cvmx_pki_req_wgt_s cn73xx;
+	struct cvmx_pki_req_wgt_s cn78xx;
+	struct cvmx_pki_req_wgt_s cn78xxp1;
+	struct cvmx_pki_req_wgt_s cnf75xx;
+};
+
+typedef union cvmx_pki_req_wgt cvmx_pki_req_wgt_t;
+
+/**
+ * cvmx_pki_sft_rst
+ */
+union cvmx_pki_sft_rst {
+	u64 u64;
+	struct cvmx_pki_sft_rst_s {
+		u64 busy : 1;
+		u64 reserved_33_62 : 30;
+		u64 active : 1;
+		u64 reserved_1_31 : 31;
+		u64 rst : 1;
+	} s;
+	struct cvmx_pki_sft_rst_s cn73xx;
+	struct cvmx_pki_sft_rst_s cn78xx;
+	struct cvmx_pki_sft_rst_s cn78xxp1;
+	struct cvmx_pki_sft_rst_s cnf75xx;
+};
+
+typedef union cvmx_pki_sft_rst cvmx_pki_sft_rst_t;
+
+/**
+ * cvmx_pki_stat#_hist0
+ */
+union cvmx_pki_statx_hist0 {
+	u64 u64;
+	struct cvmx_pki_statx_hist0_s {
+		u64 reserved_48_63 : 16;
+		u64 h1to63 : 48;
+	} s;
+	struct cvmx_pki_statx_hist0_s cn73xx;
+	struct cvmx_pki_statx_hist0_s cn78xx;
+	struct cvmx_pki_statx_hist0_s cn78xxp1;
+	struct cvmx_pki_statx_hist0_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_hist0 cvmx_pki_statx_hist0_t;
+
+/**
+ * cvmx_pki_stat#_hist1
+ */
+union cvmx_pki_statx_hist1 {
+	u64 u64;
+	struct cvmx_pki_statx_hist1_s {
+		u64 reserved_48_63 : 16;
+		u64 h64to127 : 48;
+	} s;
+	struct cvmx_pki_statx_hist1_s cn73xx;
+	struct cvmx_pki_statx_hist1_s cn78xx;
+	struct cvmx_pki_statx_hist1_s cn78xxp1;
+	struct cvmx_pki_statx_hist1_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_hist1 cvmx_pki_statx_hist1_t;
+
+/**
+ * cvmx_pki_stat#_hist2
+ */
+union cvmx_pki_statx_hist2 {
+	u64 u64;
+	struct cvmx_pki_statx_hist2_s {
+		u64 reserved_48_63 : 16;
+		u64 h128to255 : 48;
+	} s;
+	struct cvmx_pki_statx_hist2_s cn73xx;
+	struct cvmx_pki_statx_hist2_s cn78xx;
+	struct cvmx_pki_statx_hist2_s cn78xxp1;
+	struct cvmx_pki_statx_hist2_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_hist2 cvmx_pki_statx_hist2_t;
+
+/**
+ * cvmx_pki_stat#_hist3
+ */
+union cvmx_pki_statx_hist3 {
+	u64 u64;
+	struct cvmx_pki_statx_hist3_s {
+		u64 reserved_48_63 : 16;
+		u64 h256to511 : 48;
+	} s;
+	struct cvmx_pki_statx_hist3_s cn73xx;
+	struct cvmx_pki_statx_hist3_s cn78xx;
+	struct cvmx_pki_statx_hist3_s cn78xxp1;
+	struct cvmx_pki_statx_hist3_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_hist3 cvmx_pki_statx_hist3_t;
+
+/**
+ * cvmx_pki_stat#_hist4
+ */
+union cvmx_pki_statx_hist4 {
+	u64 u64;
+	struct cvmx_pki_statx_hist4_s {
+		u64 reserved_48_63 : 16;
+		u64 h512to1023 : 48;
+	} s;
+	struct cvmx_pki_statx_hist4_s cn73xx;
+	struct cvmx_pki_statx_hist4_s cn78xx;
+	struct cvmx_pki_statx_hist4_s cn78xxp1;
+	struct cvmx_pki_statx_hist4_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_hist4 cvmx_pki_statx_hist4_t;
+
+/**
+ * cvmx_pki_stat#_hist5
+ */
+union cvmx_pki_statx_hist5 {
+	u64 u64;
+	struct cvmx_pki_statx_hist5_s {
+		u64 reserved_48_63 : 16;
+		u64 h1024to1518 : 48;
+	} s;
+	struct cvmx_pki_statx_hist5_s cn73xx;
+	struct cvmx_pki_statx_hist5_s cn78xx;
+	struct cvmx_pki_statx_hist5_s cn78xxp1;
+	struct cvmx_pki_statx_hist5_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_hist5 cvmx_pki_statx_hist5_t;
+
+/**
+ * cvmx_pki_stat#_hist6
+ */
+union cvmx_pki_statx_hist6 {
+	u64 u64;
+	struct cvmx_pki_statx_hist6_s {
+		u64 reserved_48_63 : 16;
+		u64 h1519 : 48;
+	} s;
+	struct cvmx_pki_statx_hist6_s cn73xx;
+	struct cvmx_pki_statx_hist6_s cn78xx;
+	struct cvmx_pki_statx_hist6_s cn78xxp1;
+	struct cvmx_pki_statx_hist6_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_hist6 cvmx_pki_statx_hist6_t;
+
+/**
+ * cvmx_pki_stat#_stat0
+ */
+union cvmx_pki_statx_stat0 {
+	u64 u64;
+	struct cvmx_pki_statx_stat0_s {
+		u64 reserved_48_63 : 16;
+		u64 pkts : 48;
+	} s;
+	struct cvmx_pki_statx_stat0_s cn73xx;
+	struct cvmx_pki_statx_stat0_s cn78xx;
+	struct cvmx_pki_statx_stat0_s cn78xxp1;
+	struct cvmx_pki_statx_stat0_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat0 cvmx_pki_statx_stat0_t;
+
+/**
+ * cvmx_pki_stat#_stat1
+ */
+union cvmx_pki_statx_stat1 {
+	u64 u64;
+	struct cvmx_pki_statx_stat1_s {
+		u64 reserved_48_63 : 16;
+		u64 octs : 48;
+	} s;
+	struct cvmx_pki_statx_stat1_s cn73xx;
+	struct cvmx_pki_statx_stat1_s cn78xx;
+	struct cvmx_pki_statx_stat1_s cn78xxp1;
+	struct cvmx_pki_statx_stat1_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat1 cvmx_pki_statx_stat1_t;
+
+/**
+ * cvmx_pki_stat#_stat10
+ */
+union cvmx_pki_statx_stat10 {
+	u64 u64;
+	struct cvmx_pki_statx_stat10_s {
+		u64 reserved_48_63 : 16;
+		u64 jabber : 48;
+	} s;
+	struct cvmx_pki_statx_stat10_s cn73xx;
+	struct cvmx_pki_statx_stat10_s cn78xx;
+	struct cvmx_pki_statx_stat10_s cn78xxp1;
+	struct cvmx_pki_statx_stat10_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat10 cvmx_pki_statx_stat10_t;
+
+/**
+ * cvmx_pki_stat#_stat11
+ */
+union cvmx_pki_statx_stat11 {
+	u64 u64;
+	struct cvmx_pki_statx_stat11_s {
+		u64 reserved_48_63 : 16;
+		u64 oversz : 48;
+	} s;
+	struct cvmx_pki_statx_stat11_s cn73xx;
+	struct cvmx_pki_statx_stat11_s cn78xx;
+	struct cvmx_pki_statx_stat11_s cn78xxp1;
+	struct cvmx_pki_statx_stat11_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat11 cvmx_pki_statx_stat11_t;
+
+/**
+ * cvmx_pki_stat#_stat12
+ */
+union cvmx_pki_statx_stat12 {
+	u64 u64;
+	struct cvmx_pki_statx_stat12_s {
+		u64 reserved_48_63 : 16;
+		u64 l2err : 48;
+	} s;
+	struct cvmx_pki_statx_stat12_s cn73xx;
+	struct cvmx_pki_statx_stat12_s cn78xx;
+	struct cvmx_pki_statx_stat12_s cn78xxp1;
+	struct cvmx_pki_statx_stat12_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat12 cvmx_pki_statx_stat12_t;
+
+/**
+ * cvmx_pki_stat#_stat13
+ */
+union cvmx_pki_statx_stat13 {
+	u64 u64;
+	struct cvmx_pki_statx_stat13_s {
+		u64 reserved_48_63 : 16;
+		u64 spec : 48;
+	} s;
+	struct cvmx_pki_statx_stat13_s cn73xx;
+	struct cvmx_pki_statx_stat13_s cn78xx;
+	struct cvmx_pki_statx_stat13_s cn78xxp1;
+	struct cvmx_pki_statx_stat13_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat13 cvmx_pki_statx_stat13_t;
+
+/**
+ * cvmx_pki_stat#_stat14
+ */
+union cvmx_pki_statx_stat14 {
+	u64 u64;
+	struct cvmx_pki_statx_stat14_s {
+		u64 reserved_48_63 : 16;
+		u64 drp_bcast : 48;
+	} s;
+	struct cvmx_pki_statx_stat14_s cn73xx;
+	struct cvmx_pki_statx_stat14_s cn78xx;
+	struct cvmx_pki_statx_stat14_s cn78xxp1;
+	struct cvmx_pki_statx_stat14_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat14 cvmx_pki_statx_stat14_t;
+
+/**
+ * cvmx_pki_stat#_stat15
+ */
+union cvmx_pki_statx_stat15 {
+	u64 u64;
+	struct cvmx_pki_statx_stat15_s {
+		u64 reserved_48_63 : 16;
+		u64 drp_mcast : 48;
+	} s;
+	struct cvmx_pki_statx_stat15_s cn73xx;
+	struct cvmx_pki_statx_stat15_s cn78xx;
+	struct cvmx_pki_statx_stat15_s cn78xxp1;
+	struct cvmx_pki_statx_stat15_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat15 cvmx_pki_statx_stat15_t;
+
+/**
+ * cvmx_pki_stat#_stat16
+ */
+union cvmx_pki_statx_stat16 {
+	u64 u64;
+	struct cvmx_pki_statx_stat16_s {
+		u64 reserved_48_63 : 16;
+		u64 drp_bcast : 48;
+	} s;
+	struct cvmx_pki_statx_stat16_s cn73xx;
+	struct cvmx_pki_statx_stat16_s cn78xx;
+	struct cvmx_pki_statx_stat16_s cn78xxp1;
+	struct cvmx_pki_statx_stat16_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat16 cvmx_pki_statx_stat16_t;
+
+/**
+ * cvmx_pki_stat#_stat17
+ */
+union cvmx_pki_statx_stat17 {
+	u64 u64;
+	struct cvmx_pki_statx_stat17_s {
+		u64 reserved_48_63 : 16;
+		u64 drp_mcast : 48;
+	} s;
+	struct cvmx_pki_statx_stat17_s cn73xx;
+	struct cvmx_pki_statx_stat17_s cn78xx;
+	struct cvmx_pki_statx_stat17_s cn78xxp1;
+	struct cvmx_pki_statx_stat17_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat17 cvmx_pki_statx_stat17_t;
+
+/**
+ * cvmx_pki_stat#_stat18
+ */
+union cvmx_pki_statx_stat18 {
+	u64 u64;
+	struct cvmx_pki_statx_stat18_s {
+		u64 reserved_48_63 : 16;
+		u64 drp_spec : 48;
+	} s;
+	struct cvmx_pki_statx_stat18_s cn73xx;
+	struct cvmx_pki_statx_stat18_s cn78xx;
+	struct cvmx_pki_statx_stat18_s cn78xxp1;
+	struct cvmx_pki_statx_stat18_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat18 cvmx_pki_statx_stat18_t;
+
+/**
+ * cvmx_pki_stat#_stat2
+ */
+union cvmx_pki_statx_stat2 {
+	u64 u64;
+	struct cvmx_pki_statx_stat2_s {
+		u64 reserved_48_63 : 16;
+		u64 raw : 48;
+	} s;
+	struct cvmx_pki_statx_stat2_s cn73xx;
+	struct cvmx_pki_statx_stat2_s cn78xx;
+	struct cvmx_pki_statx_stat2_s cn78xxp1;
+	struct cvmx_pki_statx_stat2_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat2 cvmx_pki_statx_stat2_t;
+
+/**
+ * cvmx_pki_stat#_stat3
+ */
+union cvmx_pki_statx_stat3 {
+	u64 u64;
+	struct cvmx_pki_statx_stat3_s {
+		u64 reserved_48_63 : 16;
+		u64 drp_pkts : 48;
+	} s;
+	struct cvmx_pki_statx_stat3_s cn73xx;
+	struct cvmx_pki_statx_stat3_s cn78xx;
+	struct cvmx_pki_statx_stat3_s cn78xxp1;
+	struct cvmx_pki_statx_stat3_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat3 cvmx_pki_statx_stat3_t;
+
+/**
+ * cvmx_pki_stat#_stat4
+ */
+union cvmx_pki_statx_stat4 {
+	u64 u64;
+	struct cvmx_pki_statx_stat4_s {
+		u64 reserved_48_63 : 16;
+		u64 drp_octs : 48;
+	} s;
+	struct cvmx_pki_statx_stat4_s cn73xx;
+	struct cvmx_pki_statx_stat4_s cn78xx;
+	struct cvmx_pki_statx_stat4_s cn78xxp1;
+	struct cvmx_pki_statx_stat4_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat4 cvmx_pki_statx_stat4_t;
+
+/**
+ * cvmx_pki_stat#_stat5
+ */
+union cvmx_pki_statx_stat5 {
+	u64 u64;
+	struct cvmx_pki_statx_stat5_s {
+		u64 reserved_48_63 : 16;
+		u64 bcast : 48;
+	} s;
+	struct cvmx_pki_statx_stat5_s cn73xx;
+	struct cvmx_pki_statx_stat5_s cn78xx;
+	struct cvmx_pki_statx_stat5_s cn78xxp1;
+	struct cvmx_pki_statx_stat5_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat5 cvmx_pki_statx_stat5_t;
+
+/**
+ * cvmx_pki_stat#_stat6
+ */
+union cvmx_pki_statx_stat6 {
+	u64 u64;
+	struct cvmx_pki_statx_stat6_s {
+		u64 reserved_48_63 : 16;
+		u64 mcast : 48;
+	} s;
+	struct cvmx_pki_statx_stat6_s cn73xx;
+	struct cvmx_pki_statx_stat6_s cn78xx;
+	struct cvmx_pki_statx_stat6_s cn78xxp1;
+	struct cvmx_pki_statx_stat6_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat6 cvmx_pki_statx_stat6_t;
+
+/**
+ * cvmx_pki_stat#_stat7
+ */
+union cvmx_pki_statx_stat7 {
+	u64 u64;
+	struct cvmx_pki_statx_stat7_s {
+		u64 reserved_48_63 : 16;
+		u64 fcs : 48;
+	} s;
+	struct cvmx_pki_statx_stat7_s cn73xx;
+	struct cvmx_pki_statx_stat7_s cn78xx;
+	struct cvmx_pki_statx_stat7_s cn78xxp1;
+	struct cvmx_pki_statx_stat7_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat7 cvmx_pki_statx_stat7_t;
+
+/**
+ * cvmx_pki_stat#_stat8
+ */
+union cvmx_pki_statx_stat8 {
+	u64 u64;
+	struct cvmx_pki_statx_stat8_s {
+		u64 reserved_48_63 : 16;
+		u64 frag : 48;
+	} s;
+	struct cvmx_pki_statx_stat8_s cn73xx;
+	struct cvmx_pki_statx_stat8_s cn78xx;
+	struct cvmx_pki_statx_stat8_s cn78xxp1;
+	struct cvmx_pki_statx_stat8_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat8 cvmx_pki_statx_stat8_t;
+
+/**
+ * cvmx_pki_stat#_stat9
+ */
+union cvmx_pki_statx_stat9 {
+	u64 u64;
+	struct cvmx_pki_statx_stat9_s {
+		u64 reserved_48_63 : 16;
+		u64 undersz : 48;
+	} s;
+	struct cvmx_pki_statx_stat9_s cn73xx;
+	struct cvmx_pki_statx_stat9_s cn78xx;
+	struct cvmx_pki_statx_stat9_s cn78xxp1;
+	struct cvmx_pki_statx_stat9_s cnf75xx;
+};
+
+typedef union cvmx_pki_statx_stat9 cvmx_pki_statx_stat9_t;
+
+/**
+ * cvmx_pki_stat_ctl
+ *
+ * This register controls how the PKI statistics counters are handled.
+ *
+ */
+union cvmx_pki_stat_ctl {
+	u64 u64;
+	struct cvmx_pki_stat_ctl_s {
+		u64 reserved_2_63 : 62;
+		u64 mode : 2;
+	} s;
+	struct cvmx_pki_stat_ctl_s cn73xx;
+	struct cvmx_pki_stat_ctl_s cn78xx;
+	struct cvmx_pki_stat_ctl_s cn78xxp1;
+	struct cvmx_pki_stat_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pki_stat_ctl cvmx_pki_stat_ctl_t;
+
+/**
+ * cvmx_pki_style#_buf
+ *
+ * This register configures the PKI BE skip amounts and other information.
+ * It is indexed by final style, PKI_WQE_S[STYLE]<5:0>.
+ */
+union cvmx_pki_stylex_buf {
+	u64 u64;
+	struct cvmx_pki_stylex_buf_s {
+		u64 reserved_33_63 : 31;
+		u64 pkt_lend : 1;
+		u64 wqe_hsz : 2;
+		u64 wqe_skip : 2;
+		u64 first_skip : 6;
+		u64 later_skip : 6;
+		u64 opc_mode : 2;
+		u64 dis_wq_dat : 1;
+		u64 mb_size : 13;
+	} s;
+	struct cvmx_pki_stylex_buf_s cn73xx;
+	struct cvmx_pki_stylex_buf_s cn78xx;
+	struct cvmx_pki_stylex_buf_s cn78xxp1;
+	struct cvmx_pki_stylex_buf_s cnf75xx;
+};
+
+typedef union cvmx_pki_stylex_buf cvmx_pki_stylex_buf_t;
+
+/**
+ * cvmx_pki_style#_tag_mask
+ *
+ * This register configures the PKI BE tag algorithm.
+ * It is indexed by final style, PKI_WQE_S[STYLE]<5:0>.
+ */
+union cvmx_pki_stylex_tag_mask {
+	u64 u64;
+	struct cvmx_pki_stylex_tag_mask_s {
+		u64 reserved_16_63 : 48;
+		u64 mask : 16;
+	} s;
+	struct cvmx_pki_stylex_tag_mask_s cn73xx;
+	struct cvmx_pki_stylex_tag_mask_s cn78xx;
+	struct cvmx_pki_stylex_tag_mask_s cn78xxp1;
+	struct cvmx_pki_stylex_tag_mask_s cnf75xx;
+};
+
+typedef union cvmx_pki_stylex_tag_mask cvmx_pki_stylex_tag_mask_t;
+
+/**
+ * cvmx_pki_style#_tag_sel
+ *
+ * This register configures the PKI BE tag algorithm.
+ * It is indexed by final style, PKI_WQE_S[STYLE]<5:0>.
+ */
+union cvmx_pki_stylex_tag_sel {
+	u64 u64;
+	struct cvmx_pki_stylex_tag_sel_s {
+		u64 reserved_27_63 : 37;
+		u64 tag_idx3 : 3;
+		u64 reserved_19_23 : 5;
+		u64 tag_idx2 : 3;
+		u64 reserved_11_15 : 5;
+		u64 tag_idx1 : 3;
+		u64 reserved_3_7 : 5;
+		u64 tag_idx0 : 3;
+	} s;
+	struct cvmx_pki_stylex_tag_sel_s cn73xx;
+	struct cvmx_pki_stylex_tag_sel_s cn78xx;
+	struct cvmx_pki_stylex_tag_sel_s cn78xxp1;
+	struct cvmx_pki_stylex_tag_sel_s cnf75xx;
+};
+
+typedef union cvmx_pki_stylex_tag_sel cvmx_pki_stylex_tag_sel_t;
+
+/**
+ * cvmx_pki_style#_wq2
+ *
+ * This register configures the PKI BE WQE generation.
+ * It is indexed by final style, PKI_WQE_S[STYLE]<5:0>.
+ */
+union cvmx_pki_stylex_wq2 {
+	u64 u64;
+	struct cvmx_pki_stylex_wq2_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_pki_stylex_wq2_s cn73xx;
+	struct cvmx_pki_stylex_wq2_s cn78xx;
+	struct cvmx_pki_stylex_wq2_s cn78xxp1;
+	struct cvmx_pki_stylex_wq2_s cnf75xx;
+};
+
+typedef union cvmx_pki_stylex_wq2 cvmx_pki_stylex_wq2_t;
+
+/**
+ * cvmx_pki_style#_wq4
+ *
+ * This register configures the PKI BE WQE generation.
+ * It is indexed by final style, PKI_WQE_S[STYLE]<5:0>.
+ */
+union cvmx_pki_stylex_wq4 {
+	u64 u64;
+	struct cvmx_pki_stylex_wq4_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_pki_stylex_wq4_s cn73xx;
+	struct cvmx_pki_stylex_wq4_s cn78xx;
+	struct cvmx_pki_stylex_wq4_s cn78xxp1;
+	struct cvmx_pki_stylex_wq4_s cnf75xx;
+};
+
+typedef union cvmx_pki_stylex_wq4 cvmx_pki_stylex_wq4_t;
+
+/**
+ * cvmx_pki_tag_inc#_ctl
+ */
+union cvmx_pki_tag_incx_ctl {
+	u64 u64;
+	struct cvmx_pki_tag_incx_ctl_s {
+		u64 reserved_12_63 : 52;
+		u64 ptr_sel : 4;
+		u64 offset : 8;
+	} s;
+	struct cvmx_pki_tag_incx_ctl_s cn73xx;
+	struct cvmx_pki_tag_incx_ctl_s cn78xx;
+	struct cvmx_pki_tag_incx_ctl_s cn78xxp1;
+	struct cvmx_pki_tag_incx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pki_tag_incx_ctl cvmx_pki_tag_incx_ctl_t;
+
+/**
+ * cvmx_pki_tag_inc#_mask
+ */
+union cvmx_pki_tag_incx_mask {
+	u64 u64;
+	struct cvmx_pki_tag_incx_mask_s {
+		u64 en : 64;
+	} s;
+	struct cvmx_pki_tag_incx_mask_s cn73xx;
+	struct cvmx_pki_tag_incx_mask_s cn78xx;
+	struct cvmx_pki_tag_incx_mask_s cn78xxp1;
+	struct cvmx_pki_tag_incx_mask_s cnf75xx;
+};
+
+typedef union cvmx_pki_tag_incx_mask cvmx_pki_tag_incx_mask_t;
+
+/**
+ * cvmx_pki_tag_secret
+ *
+ * The source and destination initial values (IVs) in tag generation provide a mechanism for
+ * seeding with a random initialization value to reduce cache collision attacks.
+ */
+union cvmx_pki_tag_secret {
+	u64 u64;
+	struct cvmx_pki_tag_secret_s {
+		u64 dst6 : 16;
+		u64 src6 : 16;
+		u64 dst : 16;
+		u64 src : 16;
+	} s;
+	struct cvmx_pki_tag_secret_s cn73xx;
+	struct cvmx_pki_tag_secret_s cn78xx;
+	struct cvmx_pki_tag_secret_s cn78xxp1;
+	struct cvmx_pki_tag_secret_s cnf75xx;
+};
+
+typedef union cvmx_pki_tag_secret cvmx_pki_tag_secret_t;
+
+/**
+ * cvmx_pki_x2p_req_ofl
+ */
+union cvmx_pki_x2p_req_ofl {
+	u64 u64;
+	struct cvmx_pki_x2p_req_ofl_s {
+		u64 reserved_4_63 : 60;
+		u64 x2p_did : 4;
+	} s;
+	struct cvmx_pki_x2p_req_ofl_s cn73xx;
+	struct cvmx_pki_x2p_req_ofl_s cn78xx;
+	struct cvmx_pki_x2p_req_ofl_s cn78xxp1;
+	struct cvmx_pki_x2p_req_ofl_s cnf75xx;
+};
+
+typedef union cvmx_pki_x2p_req_ofl cvmx_pki_x2p_req_ofl_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pki-resources.h b/arch/mips/mach-octeon/include/mach/cvmx-pki-resources.h
new file mode 100644
index 0000000..79b99b0
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pki-resources.h
@@ -0,0 +1,157 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Resource management for PKI resources.
+ */
+
+#ifndef __CVMX_PKI_RESOURCES_H__
+#define __CVMX_PKI_RESOURCES_H__
+
+/**
+ * This function allocates/reserves a style from pool of global styles per node.
+ * @param node	 node to allocate style from.
+ * @param style	 style to allocate, if -1 it will be allocated
+		 first available style from style resource. If index is positive
+		 number and in range, it will try to allocate specified style.
+ * @return	 style number on success, -1 on failure.
+ */
+int cvmx_pki_style_alloc(int node, int style);
+
+/**
+ * This function allocates/reserves a cluster group from per node
+   cluster group resources.
+ * @param node		node to allocate cluster group from.
+   @param cl_grp	cluster group to allocate/reserve, if -1 ,
+			allocate any available cluster group.
+ * @return		cluster group number or -1 on failure
+ */
+int cvmx_pki_cluster_grp_alloc(int node, int cl_grp);
+
+/**
+ * This function allocates/reserves a cluster from per node
+   cluster resources.
+ * @param node		node to allocate cluster group from.
+   @param cluster_mask	mask of clusters  to allocate/reserve, if -1 ,
+			allocate any available clusters.
+ * @param num_clusters	number of clusters that will be allocated
+ */
+int cvmx_pki_cluster_alloc(int node, int num_clusters, u64 *cluster_mask);
+
+/**
+ * This function allocates/reserves a pcam entry from node
+ * @param node		node to allocate pcam entry from.
+   @param index	index of pacm entry (0-191), if -1 ,
+			allocate any available pcam entry.
+ * @param bank		pcam bank where to allocate/reserve pcan entry from
+ * @param cluster_mask  mask of clusters from which pcam entry is needed.
+ * @return		pcam entry of -1 on failure
+ */
+int cvmx_pki_pcam_entry_alloc(int node, int index, int bank, u64 cluster_mask);
+
+/**
+ * This function allocates/reserves QPG table entries per node.
+ * @param node		node number.
+ * @param base_offset	base_offset in qpg table. If -1, first available
+			qpg base_offset will be allocated. If base_offset is positive
+			number and in range, it will try to allocate specified base_offset.
+   @param count		number of consecutive qpg entries to allocate. They will be consecutive
+			from base offset.
+ * @return		qpg table base offset number on success, -1 on failure.
+ */
+int cvmx_pki_qpg_entry_alloc(int node, int base_offset, int count);
+
+/**
+ * This function frees a style from pool of global styles per node.
+ * @param node	 node to free style from.
+ * @param style	 style to free
+ * @return	 0 on success, -1 on failure.
+ */
+int cvmx_pki_style_free(int node, int style);
+
+/**
+ * This function frees a cluster group from per node
+   cluster group resources.
+ * @param node		node to free cluster group from.
+   @param cl_grp	cluster group to free
+ * @return		0 on success or -1 on failure
+ */
+int cvmx_pki_cluster_grp_free(int node, int cl_grp);
+
+/**
+ * This function frees QPG table entries per node.
+ * @param node		node number.
+ * @param base_offset	base_offset in qpg table. If -1, first available
+ *			qpg base_offset will be allocated. If base_offset is positive
+ *			number and in range, it will try to allocate specified base_offset.
+ * @param count		number of consecutive qpg entries to allocate. They will be consecutive
+ *			from base offset.
+ * @return		qpg table base offset number on success, -1 on failure.
+ */
+int cvmx_pki_qpg_entry_free(int node, int base_offset, int count);
+
+/**
+ * This function frees  clusters  from per node
+   clusters resources.
+ * @param node		node to free clusters from.
+ * @param cluster_mask  mask of clusters need freeing
+ * @return		0 on success or -1 on failure
+ */
+int cvmx_pki_cluster_free(int node, u64 cluster_mask);
+
+/**
+ * This function frees a pcam entry from node
+ * @param node		node to allocate pcam entry from.
+   @param index	index of pacm entry (0-191) needs to be freed.
+ * @param bank		pcam bank where to free pcam entry from
+ * @param cluster_mask  mask of clusters from which pcam entry is freed.
+ * @return		0 on success OR -1 on failure
+ */
+int cvmx_pki_pcam_entry_free(int node, int index, int bank, u64 cluster_mask);
+
+/**
+ * This function allocates/reserves a bpid from pool of global bpid per node.
+ * @param node	node to allocate bpid from.
+ * @param bpid	bpid  to allocate, if -1 it will be allocated
+ *		first available boid from bpid resource. If index is positive
+ *		number and in range, it will try to allocate specified bpid.
+ * @return	bpid number on success,
+ *		-1 on alloc failure.
+ *		-2 on resource already reserved.
+ */
+int cvmx_pki_bpid_alloc(int node, int bpid);
+
+/**
+ * This function frees a bpid from pool of global bpid per node.
+ * @param node	 node to free bpid from.
+ * @param bpid	 bpid to free
+ * @return	 0 on success, -1 on failure or
+ */
+int cvmx_pki_bpid_free(int node, int bpid);
+
+/**
+ * This function frees all the PKI software resources
+ * (clusters, styles, qpg_entry, pcam_entry etc) for the specified node
+ */
+
+/**
+ * This function allocates/reserves an index from pool of global MTAG-IDX per node.
+ * @param node	node to allocate index from.
+ * @param idx	index  to allocate, if -1 it will be allocated
+ * @return	MTAG index number on success,
+ *		-1 on alloc failure.
+ *		-2 on resource already reserved.
+ */
+int cvmx_pki_mtag_idx_alloc(int node, int idx);
+
+/**
+ * This function frees an index from pool of global MTAG-IDX per node.
+ * @param node	 node to free bpid from.
+ * @param bpid	 bpid to free
+ * @return	 0 on success, -1 on failure or
+ */
+int cvmx_pki_mtag_idx_free(int node, int idx);
+
+void __cvmx_pki_global_rsrc_free(int node);
+
+#endif /*  __CVM_PKI_RESOURCES_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pki.h b/arch/mips/mach-octeon/include/mach/cvmx-pki.h
new file mode 100644
index 0000000..c1feb55
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pki.h
@@ -0,0 +1,970 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the hardware Packet Input Data unit.
+ */
+
+#ifndef __CVMX_PKI_H__
+#define __CVMX_PKI_H__
+
+#include "cvmx-fpa3.h"
+#include "cvmx-helper-util.h"
+#include "cvmx-helper-cfg.h"
+#include "cvmx-error.h"
+
+/* PKI AURA and BPID count are equal to FPA AURA count */
+#define CVMX_PKI_NUM_AURA	       (cvmx_fpa3_num_auras())
+#define CVMX_PKI_NUM_BPID	       (cvmx_fpa3_num_auras())
+#define CVMX_PKI_NUM_SSO_GROUP	       (cvmx_sso_num_xgrp())
+#define CVMX_PKI_NUM_CLUSTER_GROUP_MAX 1
+#define CVMX_PKI_NUM_CLUSTER_GROUP     (cvmx_pki_num_cl_grp())
+#define CVMX_PKI_NUM_CLUSTER	       (cvmx_pki_num_clusters())
+
+/* FIXME: Reduce some of these values, convert to routines XXX */
+#define CVMX_PKI_NUM_CHANNEL	    4096
+#define CVMX_PKI_NUM_PKIND	    64
+#define CVMX_PKI_NUM_INTERNAL_STYLE 256
+#define CVMX_PKI_NUM_FINAL_STYLE    64
+#define CVMX_PKI_NUM_QPG_ENTRY	    2048
+#define CVMX_PKI_NUM_MTAG_IDX	    (32 / 4) /* 32 registers grouped by 4*/
+#define CVMX_PKI_NUM_LTYPE	    32
+#define CVMX_PKI_NUM_PCAM_BANK	    2
+#define CVMX_PKI_NUM_PCAM_ENTRY	    192
+#define CVMX_PKI_NUM_FRAME_CHECK    2
+#define CVMX_PKI_NUM_BELTYPE	    32
+#define CVMX_PKI_MAX_FRAME_SIZE	    65535
+#define CVMX_PKI_FIND_AVAL_ENTRY    (-1)
+#define CVMX_PKI_CLUSTER_ALL	    0xf
+
+#ifdef CVMX_SUPPORT_SEPARATE_CLUSTER_CONFIG
+#define CVMX_PKI_TOTAL_PCAM_ENTRY                                                                  \
+	((CVMX_PKI_NUM_CLUSTER) * (CVMX_PKI_NUM_PCAM_BANK) * (CVMX_PKI_NUM_PCAM_ENTRY))
+#else
+#define CVMX_PKI_TOTAL_PCAM_ENTRY (CVMX_PKI_NUM_PCAM_BANK * CVMX_PKI_NUM_PCAM_ENTRY)
+#endif
+
+static inline unsigned int cvmx_pki_num_clusters(void)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX) || OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		return 2;
+	return 4;
+}
+
+static inline unsigned int cvmx_pki_num_cl_grp(void)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX) || OCTEON_IS_MODEL(OCTEON_CNF75XX) ||
+	    OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return 1;
+	return 0;
+}
+
+enum cvmx_pki_pkind_parse_mode {
+	CVMX_PKI_PARSE_LA_TO_LG = 0,  /* Parse LA(L2) to LG */
+	CVMX_PKI_PARSE_LB_TO_LG = 1,  /* Parse LB(custom) to LG */
+	CVMX_PKI_PARSE_LC_TO_LG = 3,  /* Parse LC(L3) to LG */
+	CVMX_PKI_PARSE_LG = 0x3f,     /* Parse LG */
+	CVMX_PKI_PARSE_NOTHING = 0x7f /* Parse nothing */
+};
+
+enum cvmx_pki_parse_mode_chg {
+	CVMX_PKI_PARSE_NO_CHG = 0x0,
+	CVMX_PKI_PARSE_SKIP_TO_LB = 0x1,
+	CVMX_PKI_PARSE_SKIP_TO_LC = 0x3,
+	CVMX_PKI_PARSE_SKIP_TO_LD = 0x7,
+	CVMX_PKI_PARSE_SKIP_TO_LG = 0x3f,
+	CVMX_PKI_PARSE_SKIP_ALL = 0x7f,
+};
+
+enum cvmx_pki_l2_len_mode { PKI_L2_LENCHK_EQUAL_GREATER = 0, PKI_L2_LENCHK_EQUAL_ONLY };
+
+enum cvmx_pki_cache_mode {
+	CVMX_PKI_OPC_MODE_STT = 0LL,	  /* All blocks write through DRAM,*/
+	CVMX_PKI_OPC_MODE_STF = 1LL,	  /* All blocks into L2 */
+	CVMX_PKI_OPC_MODE_STF1_STT = 2LL, /* 1st block L2, rest DRAM */
+	CVMX_PKI_OPC_MODE_STF2_STT = 3LL  /* 1st, 2nd blocks L2, rest DRAM */
+};
+
+/**
+ * Tag type definitions
+ */
+enum cvmx_sso_tag_type {
+	CVMX_SSO_TAG_TYPE_ORDERED = 0L,
+	CVMX_SSO_TAG_TYPE_ATOMIC = 1L,
+	CVMX_SSO_TAG_TYPE_UNTAGGED = 2L,
+	CVMX_SSO_TAG_TYPE_EMPTY = 3L
+};
+
+enum cvmx_pki_qpg_qos {
+	CVMX_PKI_QPG_QOS_NONE = 0,
+	CVMX_PKI_QPG_QOS_VLAN,
+	CVMX_PKI_QPG_QOS_MPLS,
+	CVMX_PKI_QPG_QOS_DSA_SRC,
+	CVMX_PKI_QPG_QOS_DIFFSERV,
+	CVMX_PKI_QPG_QOS_HIGIG,
+};
+
+enum cvmx_pki_wqe_vlan { CVMX_PKI_USE_FIRST_VLAN = 0, CVMX_PKI_USE_SECOND_VLAN };
+
+/**
+ * Controls how the PKI statistics counters are handled
+ * The PKI_STAT*_X registers can be indexed either by port kind (pkind), or
+ * final style. (Does not apply to the PKI_STAT_INB* registers.)
+ *    0 = X represents the packet’s pkind
+ *    1 = X represents the low 6-bits of packet’s final style
+ */
+enum cvmx_pki_stats_mode { CVMX_PKI_STAT_MODE_PKIND, CVMX_PKI_STAT_MODE_STYLE };
+
+enum cvmx_pki_fpa_wait { CVMX_PKI_DROP_PKT, CVMX_PKI_WAIT_PKT };
+
+#define PKI_BELTYPE_E__NONE_M 0x0
+#define PKI_BELTYPE_E__MISC_M 0x1
+#define PKI_BELTYPE_E__IP4_M  0x2
+#define PKI_BELTYPE_E__IP6_M  0x3
+#define PKI_BELTYPE_E__TCP_M  0x4
+#define PKI_BELTYPE_E__UDP_M  0x5
+#define PKI_BELTYPE_E__SCTP_M 0x6
+#define PKI_BELTYPE_E__SNAP_M 0x7
+
+/* PKI_BELTYPE_E_t */
+enum cvmx_pki_beltype {
+	CVMX_PKI_BELTYPE_NONE = PKI_BELTYPE_E__NONE_M,
+	CVMX_PKI_BELTYPE_MISC = PKI_BELTYPE_E__MISC_M,
+	CVMX_PKI_BELTYPE_IP4 = PKI_BELTYPE_E__IP4_M,
+	CVMX_PKI_BELTYPE_IP6 = PKI_BELTYPE_E__IP6_M,
+	CVMX_PKI_BELTYPE_TCP = PKI_BELTYPE_E__TCP_M,
+	CVMX_PKI_BELTYPE_UDP = PKI_BELTYPE_E__UDP_M,
+	CVMX_PKI_BELTYPE_SCTP = PKI_BELTYPE_E__SCTP_M,
+	CVMX_PKI_BELTYPE_SNAP = PKI_BELTYPE_E__SNAP_M,
+	CVMX_PKI_BELTYPE_MAX = CVMX_PKI_BELTYPE_SNAP
+};
+
+struct cvmx_pki_frame_len {
+	u16 maxlen;
+	u16 minlen;
+};
+
+struct cvmx_pki_tag_fields {
+	u64 layer_g_src : 1;
+	u64 layer_f_src : 1;
+	u64 layer_e_src : 1;
+	u64 layer_d_src : 1;
+	u64 layer_c_src : 1;
+	u64 layer_b_src : 1;
+	u64 layer_g_dst : 1;
+	u64 layer_f_dst : 1;
+	u64 layer_e_dst : 1;
+	u64 layer_d_dst : 1;
+	u64 layer_c_dst : 1;
+	u64 layer_b_dst : 1;
+	u64 input_port : 1;
+	u64 mpls_label : 1;
+	u64 first_vlan : 1;
+	u64 second_vlan : 1;
+	u64 ip_prot_nexthdr : 1;
+	u64 tag_sync : 1;
+	u64 tag_spi : 1;
+	u64 tag_gtp : 1;
+	u64 tag_vni : 1;
+};
+
+struct cvmx_pki_pkind_parse {
+	u64 mpls_en : 1;
+	u64 inst_hdr : 1;
+	u64 lg_custom : 1;
+	u64 fulc_en : 1;
+	u64 dsa_en : 1;
+	u64 hg2_en : 1;
+	u64 hg_en : 1;
+};
+
+struct cvmx_pki_pool_config {
+	int pool_num;
+	cvmx_fpa3_pool_t pool;
+	u64 buffer_size;
+	u64 buffer_count;
+};
+
+struct cvmx_pki_qpg_config {
+	int qpg_base;
+	int port_add;
+	int aura_num;
+	int grp_ok;
+	int grp_bad;
+	int grptag_ok;
+	int grptag_bad;
+};
+
+struct cvmx_pki_aura_config {
+	int aura_num;
+	int pool_num;
+	cvmx_fpa3_pool_t pool;
+	cvmx_fpa3_gaura_t aura;
+	int buffer_count;
+};
+
+struct cvmx_pki_cluster_grp_config {
+	int grp_num;
+	u64 cluster_mask; /* Bit mask of cluster assigned to this cluster group */
+};
+
+struct cvmx_pki_sso_grp_config {
+	int group;
+	int priority;
+	int weight;
+	int affinity;
+	u64 core_mask;
+	u8 core_mask_set;
+};
+
+/* This is per style structure for configuring port parameters,
+ * it is kind of of profile which can be assigned to any port.
+ * If multiple ports are assigned same style be aware that modifying
+ * that style will modify the respective parameters for all the ports
+ * which are using this style
+ */
+struct cvmx_pki_style_parm {
+	bool ip6_udp_opt;
+	bool lenerr_en;
+	bool maxerr_en;
+	bool minerr_en;
+	u8 lenerr_eqpad;
+	u8 minmax_sel;
+	bool qpg_dis_grptag;
+	bool fcs_strip;
+	bool fcs_chk;
+	bool rawdrp;
+	bool force_drop;
+	bool nodrop;
+	bool qpg_dis_padd;
+	bool qpg_dis_grp;
+	bool qpg_dis_aura;
+	u16 qpg_base;
+	enum cvmx_pki_qpg_qos qpg_qos;
+	u8 qpg_port_sh;
+	u8 qpg_port_msb;
+	u8 apad_nip;
+	u8 wqe_vs;
+	enum cvmx_sso_tag_type tag_type;
+	bool pkt_lend;
+	u8 wqe_hsz;
+	u16 wqe_skip;
+	u16 first_skip;
+	u16 later_skip;
+	enum cvmx_pki_cache_mode cache_mode;
+	u8 dis_wq_dat;
+	u64 mbuff_size;
+	bool len_lg;
+	bool len_lf;
+	bool len_le;
+	bool len_ld;
+	bool len_lc;
+	bool len_lb;
+	bool csum_lg;
+	bool csum_lf;
+	bool csum_le;
+	bool csum_ld;
+	bool csum_lc;
+	bool csum_lb;
+};
+
+/* This is per style structure for configuring port's tag configuration,
+ * it is kind of of profile which can be assigned to any port.
+ * If multiple ports are assigned same style be aware that modiying that style
+ * will modify the respective parameters for all the ports which are
+ * using this style */
+enum cvmx_pki_mtag_ptrsel {
+	CVMX_PKI_MTAG_PTRSEL_SOP = 0,
+	CVMX_PKI_MTAG_PTRSEL_LA = 8,
+	CVMX_PKI_MTAG_PTRSEL_LB = 9,
+	CVMX_PKI_MTAG_PTRSEL_LC = 10,
+	CVMX_PKI_MTAG_PTRSEL_LD = 11,
+	CVMX_PKI_MTAG_PTRSEL_LE = 12,
+	CVMX_PKI_MTAG_PTRSEL_LF = 13,
+	CVMX_PKI_MTAG_PTRSEL_LG = 14,
+	CVMX_PKI_MTAG_PTRSEL_VL = 15,
+};
+
+struct cvmx_pki_mask_tag {
+	bool enable;
+	int base;   /* CVMX_PKI_MTAG_PTRSEL_XXX */
+	int offset; /* Offset from base. */
+	u64 val;    /* Bitmask:
+		1 = enable, 0 = disabled for each byte in the 64-byte array.*/
+};
+
+struct cvmx_pki_style_tag_cfg {
+	struct cvmx_pki_tag_fields tag_fields;
+	struct cvmx_pki_mask_tag mask_tag[4];
+};
+
+struct cvmx_pki_style_config {
+	struct cvmx_pki_style_parm parm_cfg;
+	struct cvmx_pki_style_tag_cfg tag_cfg;
+};
+
+struct cvmx_pki_pkind_config {
+	u8 cluster_grp;
+	bool fcs_pres;
+	struct cvmx_pki_pkind_parse parse_en;
+	enum cvmx_pki_pkind_parse_mode initial_parse_mode;
+	u8 fcs_skip;
+	u8 inst_skip;
+	int initial_style;
+	bool custom_l2_hdr;
+	u8 l2_scan_offset;
+	u64 lg_scan_offset;
+};
+
+struct cvmx_pki_port_config {
+	struct cvmx_pki_pkind_config pkind_cfg;
+	struct cvmx_pki_style_config style_cfg;
+};
+
+struct cvmx_pki_global_parse {
+	u64 virt_pen : 1;
+	u64 clg_pen : 1;
+	u64 cl2_pen : 1;
+	u64 l4_pen : 1;
+	u64 il3_pen : 1;
+	u64 l3_pen : 1;
+	u64 mpls_pen : 1;
+	u64 fulc_pen : 1;
+	u64 dsa_pen : 1;
+	u64 hg_pen : 1;
+};
+
+struct cvmx_pki_tag_sec {
+	u16 dst6;
+	u16 src6;
+	u16 dst;
+	u16 src;
+};
+
+struct cvmx_pki_global_config {
+	u64 cluster_mask[CVMX_PKI_NUM_CLUSTER_GROUP_MAX];
+	enum cvmx_pki_stats_mode stat_mode;
+	enum cvmx_pki_fpa_wait fpa_wait;
+	struct cvmx_pki_global_parse gbl_pen;
+	struct cvmx_pki_tag_sec tag_secret;
+	struct cvmx_pki_frame_len frm_len[CVMX_PKI_NUM_FRAME_CHECK];
+	enum cvmx_pki_beltype ltype_map[CVMX_PKI_NUM_BELTYPE];
+	int pki_enable;
+};
+
+#define CVMX_PKI_PCAM_TERM_E_NONE_M	 0x0
+#define CVMX_PKI_PCAM_TERM_E_L2_CUSTOM_M 0x2
+#define CVMX_PKI_PCAM_TERM_E_HIGIGD_M	 0x4
+#define CVMX_PKI_PCAM_TERM_E_HIGIG_M	 0x5
+#define CVMX_PKI_PCAM_TERM_E_SMACH_M	 0x8
+#define CVMX_PKI_PCAM_TERM_E_SMACL_M	 0x9
+#define CVMX_PKI_PCAM_TERM_E_DMACH_M	 0xA
+#define CVMX_PKI_PCAM_TERM_E_DMACL_M	 0xB
+#define CVMX_PKI_PCAM_TERM_E_GLORT_M	 0x12
+#define CVMX_PKI_PCAM_TERM_E_DSA_M	 0x13
+#define CVMX_PKI_PCAM_TERM_E_ETHTYPE0_M	 0x18
+#define CVMX_PKI_PCAM_TERM_E_ETHTYPE1_M	 0x19
+#define CVMX_PKI_PCAM_TERM_E_ETHTYPE2_M	 0x1A
+#define CVMX_PKI_PCAM_TERM_E_ETHTYPE3_M	 0x1B
+#define CVMX_PKI_PCAM_TERM_E_MPLS0_M	 0x1E
+#define CVMX_PKI_PCAM_TERM_E_L3_SIPHH_M	 0x1F
+#define CVMX_PKI_PCAM_TERM_E_L3_SIPMH_M	 0x20
+#define CVMX_PKI_PCAM_TERM_E_L3_SIPML_M	 0x21
+#define CVMX_PKI_PCAM_TERM_E_L3_SIPLL_M	 0x22
+#define CVMX_PKI_PCAM_TERM_E_L3_FLAGS_M	 0x23
+#define CVMX_PKI_PCAM_TERM_E_L3_DIPHH_M	 0x24
+#define CVMX_PKI_PCAM_TERM_E_L3_DIPMH_M	 0x25
+#define CVMX_PKI_PCAM_TERM_E_L3_DIPML_M	 0x26
+#define CVMX_PKI_PCAM_TERM_E_L3_DIPLL_M	 0x27
+#define CVMX_PKI_PCAM_TERM_E_LD_VNI_M	 0x28
+#define CVMX_PKI_PCAM_TERM_E_IL3_FLAGS_M 0x2B
+#define CVMX_PKI_PCAM_TERM_E_LF_SPI_M	 0x2E
+#define CVMX_PKI_PCAM_TERM_E_L4_SPORT_M	 0x2f
+#define CVMX_PKI_PCAM_TERM_E_L4_PORT_M	 0x30
+#define CVMX_PKI_PCAM_TERM_E_LG_CUSTOM_M 0x39
+
+enum cvmx_pki_term {
+	CVMX_PKI_PCAM_TERM_NONE = CVMX_PKI_PCAM_TERM_E_NONE_M,
+	CVMX_PKI_PCAM_TERM_L2_CUSTOM = CVMX_PKI_PCAM_TERM_E_L2_CUSTOM_M,
+	CVMX_PKI_PCAM_TERM_HIGIGD = CVMX_PKI_PCAM_TERM_E_HIGIGD_M,
+	CVMX_PKI_PCAM_TERM_HIGIG = CVMX_PKI_PCAM_TERM_E_HIGIG_M,
+	CVMX_PKI_PCAM_TERM_SMACH = CVMX_PKI_PCAM_TERM_E_SMACH_M,
+	CVMX_PKI_PCAM_TERM_SMACL = CVMX_PKI_PCAM_TERM_E_SMACL_M,
+	CVMX_PKI_PCAM_TERM_DMACH = CVMX_PKI_PCAM_TERM_E_DMACH_M,
+	CVMX_PKI_PCAM_TERM_DMACL = CVMX_PKI_PCAM_TERM_E_DMACL_M,
+	CVMX_PKI_PCAM_TERM_GLORT = CVMX_PKI_PCAM_TERM_E_GLORT_M,
+	CVMX_PKI_PCAM_TERM_DSA = CVMX_PKI_PCAM_TERM_E_DSA_M,
+	CVMX_PKI_PCAM_TERM_ETHTYPE0 = CVMX_PKI_PCAM_TERM_E_ETHTYPE0_M,
+	CVMX_PKI_PCAM_TERM_ETHTYPE1 = CVMX_PKI_PCAM_TERM_E_ETHTYPE1_M,
+	CVMX_PKI_PCAM_TERM_ETHTYPE2 = CVMX_PKI_PCAM_TERM_E_ETHTYPE2_M,
+	CVMX_PKI_PCAM_TERM_ETHTYPE3 = CVMX_PKI_PCAM_TERM_E_ETHTYPE3_M,
+	CVMX_PKI_PCAM_TERM_MPLS0 = CVMX_PKI_PCAM_TERM_E_MPLS0_M,
+	CVMX_PKI_PCAM_TERM_L3_SIPHH = CVMX_PKI_PCAM_TERM_E_L3_SIPHH_M,
+	CVMX_PKI_PCAM_TERM_L3_SIPMH = CVMX_PKI_PCAM_TERM_E_L3_SIPMH_M,
+	CVMX_PKI_PCAM_TERM_L3_SIPML = CVMX_PKI_PCAM_TERM_E_L3_SIPML_M,
+	CVMX_PKI_PCAM_TERM_L3_SIPLL = CVMX_PKI_PCAM_TERM_E_L3_SIPLL_M,
+	CVMX_PKI_PCAM_TERM_L3_FLAGS = CVMX_PKI_PCAM_TERM_E_L3_FLAGS_M,
+	CVMX_PKI_PCAM_TERM_L3_DIPHH = CVMX_PKI_PCAM_TERM_E_L3_DIPHH_M,
+	CVMX_PKI_PCAM_TERM_L3_DIPMH = CVMX_PKI_PCAM_TERM_E_L3_DIPMH_M,
+	CVMX_PKI_PCAM_TERM_L3_DIPML = CVMX_PKI_PCAM_TERM_E_L3_DIPML_M,
+	CVMX_PKI_PCAM_TERM_L3_DIPLL = CVMX_PKI_PCAM_TERM_E_L3_DIPLL_M,
+	CVMX_PKI_PCAM_TERM_LD_VNI = CVMX_PKI_PCAM_TERM_E_LD_VNI_M,
+	CVMX_PKI_PCAM_TERM_IL3_FLAGS = CVMX_PKI_PCAM_TERM_E_IL3_FLAGS_M,
+	CVMX_PKI_PCAM_TERM_LF_SPI = CVMX_PKI_PCAM_TERM_E_LF_SPI_M,
+	CVMX_PKI_PCAM_TERM_L4_PORT = CVMX_PKI_PCAM_TERM_E_L4_PORT_M,
+	CVMX_PKI_PCAM_TERM_L4_SPORT = CVMX_PKI_PCAM_TERM_E_L4_SPORT_M,
+	CVMX_PKI_PCAM_TERM_LG_CUSTOM = CVMX_PKI_PCAM_TERM_E_LG_CUSTOM_M
+};
+
+#define CVMX_PKI_DMACH_SHIFT	  32
+#define CVMX_PKI_DMACH_MASK	  cvmx_build_mask(16)
+#define CVMX_PKI_DMACL_MASK	  CVMX_PKI_DATA_MASK_32
+#define CVMX_PKI_DATA_MASK_32	  cvmx_build_mask(32)
+#define CVMX_PKI_DATA_MASK_16	  cvmx_build_mask(16)
+#define CVMX_PKI_DMAC_MATCH_EXACT cvmx_build_mask(48)
+
+struct cvmx_pki_pcam_input {
+	u64 style;
+	u64 style_mask; /* bits: 1-match, 0-dont care */
+	enum cvmx_pki_term field;
+	u32 field_mask; /* bits: 1-match, 0-dont care */
+	u64 data;
+	u64 data_mask; /* bits: 1-match, 0-dont care */
+};
+
+struct cvmx_pki_pcam_action {
+	enum cvmx_pki_parse_mode_chg parse_mode_chg;
+	enum cvmx_pki_layer_type layer_type_set;
+	int style_add;
+	int parse_flag_set;
+	int pointer_advance;
+};
+
+struct cvmx_pki_pcam_config {
+	int in_use;
+	int entry_num;
+	u64 cluster_mask;
+	struct cvmx_pki_pcam_input pcam_input;
+	struct cvmx_pki_pcam_action pcam_action;
+};
+
+/**
+ * Status statistics for a port
+ */
+struct cvmx_pki_port_stats {
+	u64 dropped_octets;
+	u64 dropped_packets;
+	u64 pci_raw_packets;
+	u64 octets;
+	u64 packets;
+	u64 multicast_packets;
+	u64 broadcast_packets;
+	u64 len_64_packets;
+	u64 len_65_127_packets;
+	u64 len_128_255_packets;
+	u64 len_256_511_packets;
+	u64 len_512_1023_packets;
+	u64 len_1024_1518_packets;
+	u64 len_1519_max_packets;
+	u64 fcs_align_err_packets;
+	u64 runt_packets;
+	u64 runt_crc_packets;
+	u64 oversize_packets;
+	u64 oversize_crc_packets;
+	u64 inb_packets;
+	u64 inb_octets;
+	u64 inb_errors;
+	u64 mcast_l2_red_packets;
+	u64 bcast_l2_red_packets;
+	u64 mcast_l3_red_packets;
+	u64 bcast_l3_red_packets;
+};
+
+/**
+ * PKI Packet Instruction Header Structure (PKI_INST_HDR_S)
+ */
+typedef union {
+	u64 u64;
+	struct {
+		u64 w : 1;    /* INST_HDR size: 0 = 2 bytes, 1 = 4 or 8 bytes */
+		u64 raw : 1;  /* RAW packet indicator in WQE[RAW]: 1 = enable */
+		u64 utag : 1; /* Use INST_HDR[TAG] to compute WQE[TAG]: 1 = enable */
+		u64 uqpg : 1; /* Use INST_HDR[QPG] to compute QPG: 1 = enable */
+		u64 rsvd1 : 1;
+		u64 pm : 3; /* Packet parsing mode. Legal values = 0x0..0x7 */
+		u64 sl : 8; /* Number of bytes in INST_HDR. */
+		/* The following fields are not present, if INST_HDR[W] = 0: */
+		u64 utt : 1; /* Use INST_HDR[TT] to compute WQE[TT]: 1 = enable */
+		u64 tt : 2;  /* INST_HDR[TT] => WQE[TT], if INST_HDR[UTT] = 1 */
+		u64 rsvd2 : 2;
+		u64 qpg : 11; /* INST_HDR[QPG] => QPG, if INST_HDR[UQPG] = 1 */
+		u64 tag : 32; /* INST_HDR[TAG] => WQE[TAG], if INST_HDR[UTAG] = 1 */
+	} s;
+} cvmx_pki_inst_hdr_t;
+
+/**
+ * This function assignes the clusters to a group, later pkind can be
+ * configured to use that group depending on number of clusters pkind
+ * would use. A given cluster can only be enabled in a single cluster group.
+ * Number of clusters assign to that group determines how many engine can work
+ * in parallel to process the packet. Eack cluster can process x MPPS.
+ *
+ * @param node	Node
+ * @param cluster_group Group to attach clusters to.
+ * @param cluster_mask The mask of clusters which needs to be assigned to the group.
+ */
+static inline int cvmx_pki_attach_cluster_to_group(int node, u64 cluster_group, u64 cluster_mask)
+{
+	cvmx_pki_icgx_cfg_t pki_cl_grp;
+
+	if (cluster_group >= CVMX_PKI_NUM_CLUSTER_GROUP) {
+		debug("ERROR: config cluster group %d", (int)cluster_group);
+		return -1;
+	}
+	pki_cl_grp.u64 = cvmx_read_csr_node(node, CVMX_PKI_ICGX_CFG(cluster_group));
+	pki_cl_grp.s.clusters = cluster_mask;
+	cvmx_write_csr_node(node, CVMX_PKI_ICGX_CFG(cluster_group), pki_cl_grp.u64);
+	return 0;
+}
+
+static inline void cvmx_pki_write_global_parse(int node, struct cvmx_pki_global_parse gbl_pen)
+{
+	cvmx_pki_gbl_pen_t gbl_pen_reg;
+
+	gbl_pen_reg.u64 = cvmx_read_csr_node(node, CVMX_PKI_GBL_PEN);
+	gbl_pen_reg.s.virt_pen = gbl_pen.virt_pen;
+	gbl_pen_reg.s.clg_pen = gbl_pen.clg_pen;
+	gbl_pen_reg.s.cl2_pen = gbl_pen.cl2_pen;
+	gbl_pen_reg.s.l4_pen = gbl_pen.l4_pen;
+	gbl_pen_reg.s.il3_pen = gbl_pen.il3_pen;
+	gbl_pen_reg.s.l3_pen = gbl_pen.l3_pen;
+	gbl_pen_reg.s.mpls_pen = gbl_pen.mpls_pen;
+	gbl_pen_reg.s.fulc_pen = gbl_pen.fulc_pen;
+	gbl_pen_reg.s.dsa_pen = gbl_pen.dsa_pen;
+	gbl_pen_reg.s.hg_pen = gbl_pen.hg_pen;
+	cvmx_write_csr_node(node, CVMX_PKI_GBL_PEN, gbl_pen_reg.u64);
+}
+
+static inline void cvmx_pki_write_tag_secret(int node, struct cvmx_pki_tag_sec tag_secret)
+{
+	cvmx_pki_tag_secret_t tag_secret_reg;
+
+	tag_secret_reg.u64 = cvmx_read_csr_node(node, CVMX_PKI_TAG_SECRET);
+	tag_secret_reg.s.dst6 = tag_secret.dst6;
+	tag_secret_reg.s.src6 = tag_secret.src6;
+	tag_secret_reg.s.dst = tag_secret.dst;
+	tag_secret_reg.s.src = tag_secret.src;
+	cvmx_write_csr_node(node, CVMX_PKI_TAG_SECRET, tag_secret_reg.u64);
+}
+
+static inline void cvmx_pki_write_ltype_map(int node, enum cvmx_pki_layer_type layer,
+					    enum cvmx_pki_beltype backend)
+{
+	cvmx_pki_ltypex_map_t ltype_map;
+
+	if (layer > CVMX_PKI_LTYPE_E_MAX || backend > CVMX_PKI_BELTYPE_MAX) {
+		debug("ERROR: invalid ltype beltype mapping\n");
+		return;
+	}
+	ltype_map.u64 = cvmx_read_csr_node(node, CVMX_PKI_LTYPEX_MAP(layer));
+	ltype_map.s.beltype = backend;
+	cvmx_write_csr_node(node, CVMX_PKI_LTYPEX_MAP(layer), ltype_map.u64);
+}
+
+/**
+ * This function enables the cluster group to start parsing.
+ *
+ * @param node    Node number.
+ * @param cl_grp  Cluster group to enable parsing.
+ */
+static inline int cvmx_pki_parse_enable(int node, unsigned int cl_grp)
+{
+	cvmx_pki_icgx_cfg_t pki_cl_grp;
+
+	if (cl_grp >= CVMX_PKI_NUM_CLUSTER_GROUP) {
+		debug("ERROR: pki parse en group %d", (int)cl_grp);
+		return -1;
+	}
+	pki_cl_grp.u64 = cvmx_read_csr_node(node, CVMX_PKI_ICGX_CFG(cl_grp));
+	pki_cl_grp.s.pena = 1;
+	cvmx_write_csr_node(node, CVMX_PKI_ICGX_CFG(cl_grp), pki_cl_grp.u64);
+	return 0;
+}
+
+/**
+ * This function enables the PKI to send bpid level backpressure to CN78XX inputs.
+ *
+ * @param node Node number.
+ */
+static inline void cvmx_pki_enable_backpressure(int node)
+{
+	cvmx_pki_buf_ctl_t pki_buf_ctl;
+
+	pki_buf_ctl.u64 = cvmx_read_csr_node(node, CVMX_PKI_BUF_CTL);
+	pki_buf_ctl.s.pbp_en = 1;
+	cvmx_write_csr_node(node, CVMX_PKI_BUF_CTL, pki_buf_ctl.u64);
+}
+
+/**
+ * Clear the statistics counters for a port.
+ *
+ * @param node Node number.
+ * @param port Port number (ipd_port) to get statistics for.
+ *    Make sure PKI_STATS_CTL:mode is set to 0 for collecting per port/pkind stats.
+ */
+void cvmx_pki_clear_port_stats(int node, u64 port);
+
+/**
+ * Get the status counters for index from PKI.
+ *
+ * @param node	  Node number.
+ * @param index   PKIND number, if PKI_STATS_CTL:mode = 0 or
+ *     style(flow) number, if PKI_STATS_CTL:mode = 1
+ * @param status  Where to put the results.
+ */
+void cvmx_pki_get_stats(int node, int index, struct cvmx_pki_port_stats *status);
+
+/**
+ * Get the statistics counters for a port.
+ *
+ * @param node	 Node number
+ * @param port   Port number (ipd_port) to get statistics for.
+ *    Make sure PKI_STATS_CTL:mode is set to 0 for collecting per port/pkind stats.
+ * @param status Where to put the results.
+ */
+static inline void cvmx_pki_get_port_stats(int node, u64 port, struct cvmx_pki_port_stats *status)
+{
+	int xipd = cvmx_helper_node_to_ipd_port(node, port);
+	int xiface = cvmx_helper_get_interface_num(xipd);
+	int index = cvmx_helper_get_interface_index_num(port);
+	int pknd = cvmx_helper_get_pknd(xiface, index);
+
+	cvmx_pki_get_stats(node, pknd, status);
+}
+
+/**
+ * Get the statistics counters for a flow represented by style in PKI.
+ *
+ * @param node Node number.
+ * @param style_num Style number to get statistics for.
+ *    Make sure PKI_STATS_CTL:mode is set to 1 for collecting per style/flow stats.
+ * @param status Where to put the results.
+ */
+static inline void cvmx_pki_get_flow_stats(int node, u64 style_num,
+					   struct cvmx_pki_port_stats *status)
+{
+	cvmx_pki_get_stats(node, style_num, status);
+}
+
+/**
+ * Show integrated PKI configuration.
+ *
+ * @param node	   node number
+ */
+int cvmx_pki_config_dump(unsigned int node);
+
+/**
+ * Show integrated PKI statistics.
+ *
+ * @param node	   node number
+ */
+int cvmx_pki_stats_dump(unsigned int node);
+
+/**
+ * Clear PKI statistics.
+ *
+ * @param node	   node number
+ */
+void cvmx_pki_stats_clear(unsigned int node);
+
+/**
+ * This function enables PKI.
+ *
+ * @param node	 node to enable pki in.
+ */
+void cvmx_pki_enable(int node);
+
+/**
+ * This function disables PKI.
+ *
+ * @param node	node to disable pki in.
+ */
+void cvmx_pki_disable(int node);
+
+/**
+ * This function soft resets PKI.
+ *
+ * @param node	node to enable pki in.
+ */
+void cvmx_pki_reset(int node);
+
+/**
+ * This function sets the clusters in PKI.
+ *
+ * @param node	node to set clusters in.
+ */
+int cvmx_pki_setup_clusters(int node);
+
+/**
+ * This function reads global configuration of PKI block.
+ *
+ * @param node    Node number.
+ * @param gbl_cfg Pointer to struct to read global configuration
+ */
+void cvmx_pki_read_global_config(int node, struct cvmx_pki_global_config *gbl_cfg);
+
+/**
+ * This function writes global configuration of PKI into hw.
+ *
+ * @param node    Node number.
+ * @param gbl_cfg Pointer to struct to global configuration
+ */
+void cvmx_pki_write_global_config(int node, struct cvmx_pki_global_config *gbl_cfg);
+
+/**
+ * This function reads per pkind parameters in hardware which defines how
+ * the incoming packet is processed.
+ *
+ * @param node   Node number.
+ * @param pkind  PKI supports a large number of incoming interfaces and packets
+ *     arriving on different interfaces or channels may want to be processed
+ *     differently. PKI uses the pkind to determine how the incoming packet
+ *     is processed.
+ * @param pkind_cfg	Pointer to struct conatining pkind configuration read
+ *     from hardware.
+ */
+int cvmx_pki_read_pkind_config(int node, int pkind, struct cvmx_pki_pkind_config *pkind_cfg);
+
+/**
+ * This function writes per pkind parameters in hardware which defines how
+ * the incoming packet is processed.
+ *
+ * @param node   Node number.
+ * @param pkind  PKI supports a large number of incoming interfaces and packets
+ *     arriving on different interfaces or channels may want to be processed
+ *     differently. PKI uses the pkind to determine how the incoming packet
+ *     is processed.
+ * @param pkind_cfg	Pointer to struct conatining pkind configuration need
+ *     to be written in hardware.
+ */
+int cvmx_pki_write_pkind_config(int node, int pkind, struct cvmx_pki_pkind_config *pkind_cfg);
+
+/**
+ * This function reads parameters associated with tag configuration in hardware.
+ *
+ * @param node	 Node number.
+ * @param style  Style to configure tag for.
+ * @param cluster_mask  Mask of clusters to configure the style for.
+ * @param tag_cfg  Pointer to tag configuration struct.
+ */
+void cvmx_pki_read_tag_config(int node, int style, u64 cluster_mask,
+			      struct cvmx_pki_style_tag_cfg *tag_cfg);
+
+/**
+ * This function writes/configures parameters associated with tag
+ * configuration in hardware.
+ *
+ * @param node  Node number.
+ * @param style  Style to configure tag for.
+ * @param cluster_mask  Mask of clusters to configure the style for.
+ * @param tag_cfg  Pointer to taf configuration struct.
+ */
+void cvmx_pki_write_tag_config(int node, int style, u64 cluster_mask,
+			       struct cvmx_pki_style_tag_cfg *tag_cfg);
+
+/**
+ * This function reads parameters associated with style in hardware.
+ *
+ * @param node	Node number.
+ * @param style  Style to read from.
+ * @param cluster_mask  Mask of clusters style belongs to.
+ * @param style_cfg  Pointer to style config struct.
+ */
+void cvmx_pki_read_style_config(int node, int style, u64 cluster_mask,
+				struct cvmx_pki_style_config *style_cfg);
+
+/**
+ * This function writes/configures parameters associated with style in hardware.
+ *
+ * @param node  Node number.
+ * @param style  Style to configure.
+ * @param cluster_mask  Mask of clusters to configure the style for.
+ * @param style_cfg  Pointer to style config struct.
+ */
+void cvmx_pki_write_style_config(int node, u64 style, u64 cluster_mask,
+				 struct cvmx_pki_style_config *style_cfg);
+/**
+ * This function reads qpg entry at specified offset from qpg table
+ *
+ * @param node  Node number.
+ * @param offset  Offset in qpg table to read from.
+ * @param qpg_cfg  Pointer to structure containing qpg values
+ */
+int cvmx_pki_read_qpg_entry(int node, int offset, struct cvmx_pki_qpg_config *qpg_cfg);
+
+/**
+ * This function writes qpg entry at specified offset in qpg table
+ *
+ * @param node  Node number.
+ * @param offset  Offset in qpg table to write to.
+ * @param qpg_cfg  Pointer to stricture containing qpg values.
+ */
+void cvmx_pki_write_qpg_entry(int node, int offset, struct cvmx_pki_qpg_config *qpg_cfg);
+
+/**
+ * This function writes pcam entry at given offset in pcam table in hardware
+ *
+ * @param node  Node number.
+ * @param index	 Offset in pcam table.
+ * @param cluster_mask  Mask of clusters in which to write pcam entry.
+ * @param input  Input keys to pcam match passed as struct.
+ * @param action  PCAM match action passed as struct
+ */
+int cvmx_pki_pcam_write_entry(int node, int index, u64 cluster_mask,
+			      struct cvmx_pki_pcam_input input, struct cvmx_pki_pcam_action action);
+/**
+ * Configures the channel which will receive backpressure from the specified bpid.
+ * Each channel listens for backpressure on a specific bpid.
+ * Each bpid can backpressure multiple channels.
+ * @param node  Node number.
+ * @param bpid  BPID from which channel will receive backpressure.
+ * @param channel  Channel number to receive backpressue.
+ */
+int cvmx_pki_write_channel_bpid(int node, int channel, int bpid);
+
+/**
+ * Configures the bpid on which, specified channel will
+ * assert backpressure.
+ * Each bpid receives backpressure from auras.
+ * Multiple auras can backpressure single bpid.
+ * @param node  Node number.
+ * @param aura  Number which will assert backpressure on that bpid.
+ * @param bpid  To assert backpressure on.
+ */
+int cvmx_pki_write_aura_bpid(int node, int aura, int bpid);
+
+/**
+ * Enables/Disabled QoS (RED Drop, Tail Drop & backpressure) for the* PKI aura.
+ *
+ * @param node  Node number
+ * @param aura  To enable/disable QoS on.
+ * @param ena_red  Enable/Disable RED drop between pass and drop level
+ *    1-enable 0-disable
+ * @param ena_drop  Enable/disable tail drop when max drop level exceeds
+ *    1-enable 0-disable
+ * @param ena_bp  Enable/Disable asserting backpressure on bpid when
+ *    max DROP level exceeds.
+ *    1-enable 0-disable
+ */
+int cvmx_pki_enable_aura_qos(int node, int aura, bool ena_red, bool ena_drop, bool ena_bp);
+
+/**
+ * This function gives the initial style used by that pkind.
+ *
+ * @param node  Node number.
+ * @param pkind  PKIND number.
+ */
+int cvmx_pki_get_pkind_style(int node, int pkind);
+
+/**
+ * This function sets the wqe buffer mode. First packet data buffer can reside
+ * either in same buffer as wqe OR it can go in separate buffer. If used the later mode,
+ * make sure software allocate enough buffers to now have wqe separate from packet data.
+ *
+ * @param node  Node number.
+ * @param style  Style to configure.
+ * @param pkt_outside_wqe
+ *    0 = The packet link pointer will be at word [FIRST_SKIP] immediately
+ *    followed by packet data, in the same buffer as the work queue entry.
+ *    1 = The packet link pointer will be at word [FIRST_SKIP] in a new
+ *    buffer separate from the work queue entry. Words following the
+ *    WQE in the same cache line will be zeroed, other lines in the
+ *    buffer will not be modified and will retain stale data (from the
+ *    buffer’s previous use). This setting may decrease the peak PKI
+ *    performance by up to half on small packets.
+ */
+void cvmx_pki_set_wqe_mode(int node, u64 style, bool pkt_outside_wqe);
+
+/**
+ * This function sets the Packet mode of all ports and styles to little-endian.
+ * It Changes write operations of packet data to L2C to
+ * be in little-endian. Does not change the WQE header format, which is
+ * properly endian neutral.
+ *
+ * @param node  Node number.
+ * @param style  Style to configure.
+ */
+void cvmx_pki_set_little_endian(int node, u64 style);
+
+/**
+ * Enables/Disables L2 length error check and max & min frame length checks.
+ *
+ * @param node  Node number.
+ * @param pknd  PKIND to disable error for.
+ * @param l2len_err	 L2 length error check enable.
+ * @param maxframe_err	Max frame error check enable.
+ * @param minframe_err	Min frame error check enable.
+ *    1 -- Enabel err checks
+ *    0 -- Disable error checks
+ */
+void cvmx_pki_endis_l2_errs(int node, int pknd, bool l2len_err, bool maxframe_err,
+			    bool minframe_err);
+
+/**
+ * Enables/Disables fcs check and fcs stripping on the pkind.
+ *
+ * @param node  Node number.
+ * @param pknd  PKIND to apply settings on.
+ * @param fcs_chk  Enable/disable fcs check.
+ *    1 -- enable fcs error check.
+ *    0 -- disable fcs error check.
+ * @param fcs_strip	 Strip L2 FCS bytes from packet, decrease WQE[LEN] by 4 bytes
+ *    1 -- strip L2 FCS.
+ *    0 -- Do not strip L2 FCS.
+ */
+void cvmx_pki_endis_fcs_check(int node, int pknd, bool fcs_chk, bool fcs_strip);
+
+/**
+ * This function shows the qpg table entries, read directly from hardware.
+ *
+ * @param node  Node number.
+ * @param num_entry  Number of entries to print.
+ */
+void cvmx_pki_show_qpg_entries(int node, u16 num_entry);
+
+/**
+ * This function shows the pcam table in raw format read directly from hardware.
+ *
+ * @param node  Node number.
+ */
+void cvmx_pki_show_pcam_entries(int node);
+
+/**
+ * This function shows the valid entries in readable format,
+ * read directly from hardware.
+ *
+ * @param node  Node number.
+ */
+void cvmx_pki_show_valid_pcam_entries(int node);
+
+/**
+ * This function shows the pkind attributes in readable format,
+ * read directly from hardware.
+ * @param node  Node number.
+ * @param pkind  PKIND number to print.
+ */
+void cvmx_pki_show_pkind_attributes(int node, int pkind);
+
+/**
+ * @INTERNAL
+ * This function is called by cvmx_helper_shutdown() to extract all FPA buffers
+ * out of the PKI. After this function completes, all FPA buffers that were
+ * prefetched by PKI will be in the appropriate FPA pool.
+ * This functions does not reset the PKI.
+ * WARNING: It is very important that PKI be reset soon after a call to this function.
+ *
+ * @param node  Node number.
+ */
+void __cvmx_pki_free_ptr(int node);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pko-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-pko-defs.h
new file mode 100644
index 0000000..6ae0151
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pko-defs.h
@@ -0,0 +1,9388 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon pko.
+ */
+
+#ifndef __CVMX_PKO_DEFS_H__
+#define __CVMX_PKO_DEFS_H__
+
+#define CVMX_PKO_CHANNEL_LEVEL			(0x00015400000800F0ull)
+#define CVMX_PKO_DPFI_ENA			(0x0001540000C00018ull)
+#define CVMX_PKO_DPFI_FLUSH			(0x0001540000C00008ull)
+#define CVMX_PKO_DPFI_FPA_AURA			(0x0001540000C00010ull)
+#define CVMX_PKO_DPFI_STATUS			(0x0001540000C00000ull)
+#define CVMX_PKO_DQX_BYTES(offset)		(0x00015400000000D8ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_CIR(offset)		(0x0001540000280018ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_DROPPED_BYTES(offset)	(0x00015400000000C8ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_DROPPED_PACKETS(offset)	(0x00015400000000C0ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_FIFO(offset)		(0x0001540000300078ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_PACKETS(offset)		(0x00015400000000D0ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_PICK(offset)		(0x0001540000300070ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_PIR(offset)		(0x0001540000280020ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_POINTERS(offset)		(0x0001540000280078ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_SCHEDULE(offset)		(0x0001540000280008ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_SCHED_STATE(offset)	(0x0001540000280028ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_SHAPE(offset)		(0x0001540000280010ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_SHAPE_STATE(offset)	(0x0001540000280030ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_SW_XOFF(offset)		(0x00015400002800E0ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_TOPOLOGY(offset)		(0x0001540000300000ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_WM_BUF_CNT(offset)		(0x00015400008000E8ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_WM_BUF_CTL(offset)		(0x00015400008000F0ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_WM_BUF_CTL_W1C(offset)	(0x00015400008000F8ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_WM_CNT(offset)		(0x0001540000000050ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_WM_CTL(offset)		(0x0001540000000040ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQX_WM_CTL_W1C(offset)		(0x0001540000000048ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_DQ_CSR_BUS_DEBUG		(0x00015400003001F8ull)
+#define CVMX_PKO_DQ_DEBUG			(0x0001540000300128ull)
+#define CVMX_PKO_DRAIN_IRQ			(0x0001540000000140ull)
+#define CVMX_PKO_ENABLE				(0x0001540000D00008ull)
+#define CVMX_PKO_FORMATX_CTL(offset)		(0x0001540000900800ull + ((offset) & 127) * 8)
+#define CVMX_PKO_L1_SQA_DEBUG			(0x0001540000080128ull)
+#define CVMX_PKO_L1_SQB_DEBUG			(0x0001540000080130ull)
+#define CVMX_PKO_L1_SQX_CIR(offset)		(0x0001540000000018ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_DROPPED_BYTES(offset)	(0x0001540000000088ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_DROPPED_PACKETS(offset) (0x0001540000000080ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_GREEN(offset)		(0x0001540000080058ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_GREEN_BYTES(offset)	(0x00015400000000B8ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_GREEN_PACKETS(offset)	(0x00015400000000B0ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_LINK(offset)		(0x0001540000000038ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_PICK(offset)		(0x0001540000080070ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_RED(offset)		(0x0001540000080068ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_RED_BYTES(offset)	(0x0001540000000098ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_RED_PACKETS(offset)	(0x0001540000000090ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_SCHEDULE(offset)	(0x0001540000000008ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_SHAPE(offset)		(0x0001540000000010ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_SHAPE_STATE(offset)	(0x0001540000000030ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_SW_XOFF(offset)		(0x00015400000000E0ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_TOPOLOGY(offset)	(0x0001540000080000ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_YELLOW(offset)		(0x0001540000080060ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_YELLOW_BYTES(offset)	(0x00015400000000A8ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQX_YELLOW_PACKETS(offset)	(0x00015400000000A0ull + ((offset) & 31) * 512)
+#define CVMX_PKO_L1_SQ_CSR_BUS_DEBUG		(0x00015400000801F8ull)
+#define CVMX_PKO_L2_SQA_DEBUG			(0x0001540000100128ull)
+#define CVMX_PKO_L2_SQB_DEBUG			(0x0001540000100130ull)
+#define CVMX_PKO_L2_SQX_CIR(offset)		(0x0001540000080018ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_GREEN(offset)		(0x0001540000100058ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_PICK(offset)		(0x0001540000100070ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_PIR(offset)		(0x0001540000080020ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_POINTERS(offset)	(0x0001540000080078ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_RED(offset)		(0x0001540000100068ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_SCHEDULE(offset)	(0x0001540000080008ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_SCHED_STATE(offset)	(0x0001540000080028ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_SHAPE(offset)		(0x0001540000080010ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_SHAPE_STATE(offset)	(0x0001540000080030ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_SW_XOFF(offset)		(0x00015400000800E0ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_TOPOLOGY(offset)	(0x0001540000100000ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQX_YELLOW(offset)		(0x0001540000100060ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L2_SQ_CSR_BUS_DEBUG		(0x00015400001001F8ull)
+#define CVMX_PKO_L3_L2_SQX_CHANNEL(offset)	(0x0001540000080038ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQA_DEBUG			(0x0001540000180128ull)
+#define CVMX_PKO_L3_SQB_DEBUG			(0x0001540000180130ull)
+#define CVMX_PKO_L3_SQX_CIR(offset)		(0x0001540000100018ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_GREEN(offset)		(0x0001540000180058ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_PICK(offset)		(0x0001540000180070ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_PIR(offset)		(0x0001540000100020ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_POINTERS(offset)	(0x0001540000100078ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_RED(offset)		(0x0001540000180068ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_SCHEDULE(offset)	(0x0001540000100008ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_SCHED_STATE(offset)	(0x0001540000100028ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_SHAPE(offset)		(0x0001540000100010ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_SHAPE_STATE(offset)	(0x0001540000100030ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_SW_XOFF(offset)		(0x00015400001000E0ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_TOPOLOGY(offset)	(0x0001540000180000ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQX_YELLOW(offset)		(0x0001540000180060ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L3_SQ_CSR_BUS_DEBUG		(0x00015400001801F8ull)
+#define CVMX_PKO_L4_SQA_DEBUG			(0x0001540000200128ull)
+#define CVMX_PKO_L4_SQB_DEBUG			(0x0001540000200130ull)
+#define CVMX_PKO_L4_SQX_CIR(offset)		(0x0001540000180018ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_GREEN(offset)		(0x0001540000200058ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_PICK(offset)		(0x0001540000200070ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_PIR(offset)		(0x0001540000180020ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_POINTERS(offset)	(0x0001540000180078ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_RED(offset)		(0x0001540000200068ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_SCHEDULE(offset)	(0x0001540000180008ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_SCHED_STATE(offset)	(0x0001540000180028ull + ((offset) & 511) * 512)
+#define CVMX_PKO_L4_SQX_SHAPE(offset)		(0x0001540000180010ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_SHAPE_STATE(offset)	(0x0001540000180030ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_SW_XOFF(offset)		(0x00015400001800E0ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_TOPOLOGY(offset)	(0x0001540000200000ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQX_YELLOW(offset)		(0x0001540000200060ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L4_SQ_CSR_BUS_DEBUG		(0x00015400002001F8ull)
+#define CVMX_PKO_L5_SQA_DEBUG			(0x0001540000280128ull)
+#define CVMX_PKO_L5_SQB_DEBUG			(0x0001540000280130ull)
+#define CVMX_PKO_L5_SQX_CIR(offset)		(0x0001540000200018ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_GREEN(offset)		(0x0001540000280058ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_PICK(offset)		(0x0001540000280070ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_PIR(offset)		(0x0001540000200020ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_POINTERS(offset)	(0x0001540000200078ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_RED(offset)		(0x0001540000280068ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_SCHEDULE(offset)	(0x0001540000200008ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_SCHED_STATE(offset)	(0x0001540000200028ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_SHAPE(offset)		(0x0001540000200010ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_SHAPE_STATE(offset)	(0x0001540000200030ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_SW_XOFF(offset)		(0x00015400002000E0ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_TOPOLOGY(offset)	(0x0001540000280000ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQX_YELLOW(offset)		(0x0001540000280060ull + ((offset) & 1023) * 512)
+#define CVMX_PKO_L5_SQ_CSR_BUS_DEBUG		(0x00015400002801F8ull)
+#define CVMX_PKO_LUTX(offset)			(0x0001540000B00000ull + ((offset) & 1023) * 8)
+#define CVMX_PKO_LUT_BIST_STATUS		(0x0001540000B02018ull)
+#define CVMX_PKO_LUT_ECC_CTL0			(0x0001540000BFFFD0ull)
+#define CVMX_PKO_LUT_ECC_DBE_STS0		(0x0001540000BFFFF0ull)
+#define CVMX_PKO_LUT_ECC_DBE_STS_CMB0		(0x0001540000BFFFD8ull)
+#define CVMX_PKO_LUT_ECC_SBE_STS0		(0x0001540000BFFFF8ull)
+#define CVMX_PKO_LUT_ECC_SBE_STS_CMB0		(0x0001540000BFFFE8ull)
+#define CVMX_PKO_MACX_CFG(offset)		(0x0001540000900000ull + ((offset) & 31) * 8)
+#define CVMX_PKO_MCI0_CRED_CNTX(offset)		(0x0001540000A40000ull + ((offset) & 31) * 8)
+#define CVMX_PKO_MCI0_MAX_CREDX(offset)		(0x0001540000A00000ull + ((offset) & 31) * 8)
+#define CVMX_PKO_MCI1_CRED_CNTX(offset)		(0x0001540000A80100ull + ((offset) & 31) * 8)
+#define CVMX_PKO_MCI1_MAX_CREDX(offset)		(0x0001540000A80000ull + ((offset) & 31) * 8)
+#define CVMX_PKO_MEM_COUNT0			(0x0001180050001080ull)
+#define CVMX_PKO_MEM_COUNT1			(0x0001180050001088ull)
+#define CVMX_PKO_MEM_DEBUG0			(0x0001180050001100ull)
+#define CVMX_PKO_MEM_DEBUG1			(0x0001180050001108ull)
+#define CVMX_PKO_MEM_DEBUG10			(0x0001180050001150ull)
+#define CVMX_PKO_MEM_DEBUG11			(0x0001180050001158ull)
+#define CVMX_PKO_MEM_DEBUG12			(0x0001180050001160ull)
+#define CVMX_PKO_MEM_DEBUG13			(0x0001180050001168ull)
+#define CVMX_PKO_MEM_DEBUG14			(0x0001180050001170ull)
+#define CVMX_PKO_MEM_DEBUG2			(0x0001180050001110ull)
+#define CVMX_PKO_MEM_DEBUG3			(0x0001180050001118ull)
+#define CVMX_PKO_MEM_DEBUG4			(0x0001180050001120ull)
+#define CVMX_PKO_MEM_DEBUG5			(0x0001180050001128ull)
+#define CVMX_PKO_MEM_DEBUG6			(0x0001180050001130ull)
+#define CVMX_PKO_MEM_DEBUG7			(0x0001180050001138ull)
+#define CVMX_PKO_MEM_DEBUG8			(0x0001180050001140ull)
+#define CVMX_PKO_MEM_DEBUG9			(0x0001180050001148ull)
+#define CVMX_PKO_MEM_IPORT_PTRS			(0x0001180050001030ull)
+#define CVMX_PKO_MEM_IPORT_QOS			(0x0001180050001038ull)
+#define CVMX_PKO_MEM_IQUEUE_PTRS		(0x0001180050001040ull)
+#define CVMX_PKO_MEM_IQUEUE_QOS			(0x0001180050001048ull)
+#define CVMX_PKO_MEM_PORT_PTRS			(0x0001180050001010ull)
+#define CVMX_PKO_MEM_PORT_QOS			(0x0001180050001018ull)
+#define CVMX_PKO_MEM_PORT_RATE0			(0x0001180050001020ull)
+#define CVMX_PKO_MEM_PORT_RATE1			(0x0001180050001028ull)
+#define CVMX_PKO_MEM_QUEUE_PTRS			(0x0001180050001000ull)
+#define CVMX_PKO_MEM_QUEUE_QOS			(0x0001180050001008ull)
+#define CVMX_PKO_MEM_THROTTLE_INT		(0x0001180050001058ull)
+#define CVMX_PKO_MEM_THROTTLE_PIPE		(0x0001180050001050ull)
+#define CVMX_PKO_NCB_BIST_STATUS		(0x0001540000EFFF00ull)
+#define CVMX_PKO_NCB_ECC_CTL0			(0x0001540000EFFFD0ull)
+#define CVMX_PKO_NCB_ECC_DBE_STS0		(0x0001540000EFFFF0ull)
+#define CVMX_PKO_NCB_ECC_DBE_STS_CMB0		(0x0001540000EFFFD8ull)
+#define CVMX_PKO_NCB_ECC_SBE_STS0		(0x0001540000EFFFF8ull)
+#define CVMX_PKO_NCB_ECC_SBE_STS_CMB0		(0x0001540000EFFFE8ull)
+#define CVMX_PKO_NCB_INT			(0x0001540000E00010ull)
+#define CVMX_PKO_NCB_TX_ERR_INFO		(0x0001540000E00008ull)
+#define CVMX_PKO_NCB_TX_ERR_WORD		(0x0001540000E00000ull)
+#define CVMX_PKO_PDM_BIST_STATUS		(0x00015400008FFF00ull)
+#define CVMX_PKO_PDM_CFG			(0x0001540000800000ull)
+#define CVMX_PKO_PDM_CFG_DBG			(0x0001540000800FF8ull)
+#define CVMX_PKO_PDM_CP_DBG			(0x0001540000800190ull)
+#define CVMX_PKO_PDM_DQX_MINPAD(offset)		(0x00015400008F0000ull + ((offset) & 1023) * 8)
+#define CVMX_PKO_PDM_DRPBUF_DBG			(0x00015400008000B0ull)
+#define CVMX_PKO_PDM_DWPBUF_DBG			(0x00015400008000A8ull)
+#define CVMX_PKO_PDM_ECC_CTL0			(0x00015400008FFFD0ull)
+#define CVMX_PKO_PDM_ECC_CTL1			(0x00015400008FFFD8ull)
+#define CVMX_PKO_PDM_ECC_DBE_STS0		(0x00015400008FFFF0ull)
+#define CVMX_PKO_PDM_ECC_DBE_STS_CMB0		(0x00015400008FFFE0ull)
+#define CVMX_PKO_PDM_ECC_SBE_STS0		(0x00015400008FFFF8ull)
+#define CVMX_PKO_PDM_ECC_SBE_STS_CMB0		(0x00015400008FFFE8ull)
+#define CVMX_PKO_PDM_FILLB_DBG0			(0x00015400008002A0ull)
+#define CVMX_PKO_PDM_FILLB_DBG1			(0x00015400008002A8ull)
+#define CVMX_PKO_PDM_FILLB_DBG2			(0x00015400008002B0ull)
+#define CVMX_PKO_PDM_FLSHB_DBG0			(0x00015400008002B8ull)
+#define CVMX_PKO_PDM_FLSHB_DBG1			(0x00015400008002C0ull)
+#define CVMX_PKO_PDM_INTF_DBG_RD		(0x0001540000900F20ull)
+#define CVMX_PKO_PDM_ISRD_DBG			(0x0001540000800090ull)
+#define CVMX_PKO_PDM_ISRD_DBG_DQ		(0x0001540000800290ull)
+#define CVMX_PKO_PDM_ISRM_DBG			(0x0001540000800098ull)
+#define CVMX_PKO_PDM_ISRM_DBG_DQ		(0x0001540000800298ull)
+#define CVMX_PKO_PDM_MEM_ADDR			(0x0001540000800018ull)
+#define CVMX_PKO_PDM_MEM_DATA			(0x0001540000800010ull)
+#define CVMX_PKO_PDM_MEM_RW_CTL			(0x0001540000800020ull)
+#define CVMX_PKO_PDM_MEM_RW_STS			(0x0001540000800028ull)
+#define CVMX_PKO_PDM_MWPBUF_DBG			(0x00015400008000A0ull)
+#define CVMX_PKO_PDM_STS			(0x0001540000800008ull)
+#define CVMX_PKO_PEB_BIST_STATUS		(0x0001540000900D00ull)
+#define CVMX_PKO_PEB_ECC_CTL0			(0x00015400009FFFD0ull)
+#define CVMX_PKO_PEB_ECC_CTL1			(0x00015400009FFFA8ull)
+#define CVMX_PKO_PEB_ECC_DBE_STS0		(0x00015400009FFFF0ull)
+#define CVMX_PKO_PEB_ECC_DBE_STS_CMB0		(0x00015400009FFFD8ull)
+#define CVMX_PKO_PEB_ECC_SBE_STS0		(0x00015400009FFFF8ull)
+#define CVMX_PKO_PEB_ECC_SBE_STS_CMB0		(0x00015400009FFFE8ull)
+#define CVMX_PKO_PEB_ECO			(0x0001540000901000ull)
+#define CVMX_PKO_PEB_ERR_INT			(0x0001540000900C00ull)
+#define CVMX_PKO_PEB_EXT_HDR_DEF_ERR_INFO	(0x0001540000900C08ull)
+#define CVMX_PKO_PEB_FCS_SOP_ERR_INFO		(0x0001540000900C18ull)
+#define CVMX_PKO_PEB_JUMP_DEF_ERR_INFO		(0x0001540000900C10ull)
+#define CVMX_PKO_PEB_MACX_CFG_WR_ERR_INFO	(0x0001540000900C50ull)
+#define CVMX_PKO_PEB_MAX_LINK_ERR_INFO		(0x0001540000900C48ull)
+#define CVMX_PKO_PEB_NCB_CFG			(0x0001540000900308ull)
+#define CVMX_PKO_PEB_PAD_ERR_INFO		(0x0001540000900C28ull)
+#define CVMX_PKO_PEB_PSE_FIFO_ERR_INFO		(0x0001540000900C20ull)
+#define CVMX_PKO_PEB_SUBD_ADDR_ERR_INFO		(0x0001540000900C38ull)
+#define CVMX_PKO_PEB_SUBD_SIZE_ERR_INFO		(0x0001540000900C40ull)
+#define CVMX_PKO_PEB_TRUNC_ERR_INFO		(0x0001540000900C30ull)
+#define CVMX_PKO_PEB_TSO_CFG			(0x0001540000900310ull)
+#define CVMX_PKO_PQA_DEBUG			(0x0001540000000128ull)
+#define CVMX_PKO_PQB_DEBUG			(0x0001540000000130ull)
+#define CVMX_PKO_PQ_CSR_BUS_DEBUG		(0x00015400000001F8ull)
+#define CVMX_PKO_PQ_DEBUG_GREEN			(0x0001540000000058ull)
+#define CVMX_PKO_PQ_DEBUG_LINKS			(0x0001540000000068ull)
+#define CVMX_PKO_PQ_DEBUG_YELLOW		(0x0001540000000060ull)
+#define CVMX_PKO_PSE_DQ_BIST_STATUS		(0x0001540000300138ull)
+#define CVMX_PKO_PSE_DQ_ECC_CTL0		(0x0001540000300100ull)
+#define CVMX_PKO_PSE_DQ_ECC_DBE_STS0		(0x0001540000300118ull)
+#define CVMX_PKO_PSE_DQ_ECC_DBE_STS_CMB0	(0x0001540000300120ull)
+#define CVMX_PKO_PSE_DQ_ECC_SBE_STS0		(0x0001540000300108ull)
+#define CVMX_PKO_PSE_DQ_ECC_SBE_STS_CMB0	(0x0001540000300110ull)
+#define CVMX_PKO_PSE_PQ_BIST_STATUS		(0x0001540000000138ull)
+#define CVMX_PKO_PSE_PQ_ECC_CTL0		(0x0001540000000100ull)
+#define CVMX_PKO_PSE_PQ_ECC_DBE_STS0		(0x0001540000000118ull)
+#define CVMX_PKO_PSE_PQ_ECC_DBE_STS_CMB0	(0x0001540000000120ull)
+#define CVMX_PKO_PSE_PQ_ECC_SBE_STS0		(0x0001540000000108ull)
+#define CVMX_PKO_PSE_PQ_ECC_SBE_STS_CMB0	(0x0001540000000110ull)
+#define CVMX_PKO_PSE_SQ1_BIST_STATUS		(0x0001540000080138ull)
+#define CVMX_PKO_PSE_SQ1_ECC_CTL0		(0x0001540000080100ull)
+#define CVMX_PKO_PSE_SQ1_ECC_DBE_STS0		(0x0001540000080118ull)
+#define CVMX_PKO_PSE_SQ1_ECC_DBE_STS_CMB0	(0x0001540000080120ull)
+#define CVMX_PKO_PSE_SQ1_ECC_SBE_STS0		(0x0001540000080108ull)
+#define CVMX_PKO_PSE_SQ1_ECC_SBE_STS_CMB0	(0x0001540000080110ull)
+#define CVMX_PKO_PSE_SQ2_BIST_STATUS		(0x0001540000100138ull)
+#define CVMX_PKO_PSE_SQ2_ECC_CTL0		(0x0001540000100100ull)
+#define CVMX_PKO_PSE_SQ2_ECC_DBE_STS0		(0x0001540000100118ull)
+#define CVMX_PKO_PSE_SQ2_ECC_DBE_STS_CMB0	(0x0001540000100120ull)
+#define CVMX_PKO_PSE_SQ2_ECC_SBE_STS0		(0x0001540000100108ull)
+#define CVMX_PKO_PSE_SQ2_ECC_SBE_STS_CMB0	(0x0001540000100110ull)
+#define CVMX_PKO_PSE_SQ3_BIST_STATUS		(0x0001540000180138ull)
+#define CVMX_PKO_PSE_SQ3_ECC_CTL0		(0x0001540000180100ull)
+#define CVMX_PKO_PSE_SQ3_ECC_DBE_STS0		(0x0001540000180118ull)
+#define CVMX_PKO_PSE_SQ3_ECC_DBE_STS_CMB0	(0x0001540000180120ull)
+#define CVMX_PKO_PSE_SQ3_ECC_SBE_STS0		(0x0001540000180108ull)
+#define CVMX_PKO_PSE_SQ3_ECC_SBE_STS_CMB0	(0x0001540000180110ull)
+#define CVMX_PKO_PSE_SQ4_BIST_STATUS		(0x0001540000200138ull)
+#define CVMX_PKO_PSE_SQ4_ECC_CTL0		(0x0001540000200100ull)
+#define CVMX_PKO_PSE_SQ4_ECC_DBE_STS0		(0x0001540000200118ull)
+#define CVMX_PKO_PSE_SQ4_ECC_DBE_STS_CMB0	(0x0001540000200120ull)
+#define CVMX_PKO_PSE_SQ4_ECC_SBE_STS0		(0x0001540000200108ull)
+#define CVMX_PKO_PSE_SQ4_ECC_SBE_STS_CMB0	(0x0001540000200110ull)
+#define CVMX_PKO_PSE_SQ5_BIST_STATUS		(0x0001540000280138ull)
+#define CVMX_PKO_PSE_SQ5_ECC_CTL0		(0x0001540000280100ull)
+#define CVMX_PKO_PSE_SQ5_ECC_DBE_STS0		(0x0001540000280118ull)
+#define CVMX_PKO_PSE_SQ5_ECC_DBE_STS_CMB0	(0x0001540000280120ull)
+#define CVMX_PKO_PSE_SQ5_ECC_SBE_STS0		(0x0001540000280108ull)
+#define CVMX_PKO_PSE_SQ5_ECC_SBE_STS_CMB0	(0x0001540000280110ull)
+#define CVMX_PKO_PTFX_STATUS(offset)		(0x0001540000900100ull + ((offset) & 31) * 8)
+#define CVMX_PKO_PTF_IOBP_CFG			(0x0001540000900300ull)
+#define CVMX_PKO_PTGFX_CFG(offset)		(0x0001540000900200ull + ((offset) & 7) * 8)
+#define CVMX_PKO_REG_BIST_RESULT		(0x0001180050000080ull)
+#define CVMX_PKO_REG_CMD_BUF			(0x0001180050000010ull)
+#define CVMX_PKO_REG_CRC_CTLX(offset)		(0x0001180050000028ull + ((offset) & 1) * 8)
+#define CVMX_PKO_REG_CRC_ENABLE			(0x0001180050000020ull)
+#define CVMX_PKO_REG_CRC_IVX(offset)		(0x0001180050000038ull + ((offset) & 1) * 8)
+#define CVMX_PKO_REG_DEBUG0			(0x0001180050000098ull)
+#define CVMX_PKO_REG_DEBUG1			(0x00011800500000A0ull)
+#define CVMX_PKO_REG_DEBUG2			(0x00011800500000A8ull)
+#define CVMX_PKO_REG_DEBUG3			(0x00011800500000B0ull)
+#define CVMX_PKO_REG_DEBUG4			(0x00011800500000B8ull)
+#define CVMX_PKO_REG_ENGINE_INFLIGHT		(0x0001180050000050ull)
+#define CVMX_PKO_REG_ENGINE_INFLIGHT1		(0x0001180050000318ull)
+#define CVMX_PKO_REG_ENGINE_STORAGEX(offset)	(0x0001180050000300ull + ((offset) & 1) * 8)
+#define CVMX_PKO_REG_ENGINE_THRESH		(0x0001180050000058ull)
+#define CVMX_PKO_REG_ERROR			(0x0001180050000088ull)
+#define CVMX_PKO_REG_FLAGS			(0x0001180050000000ull)
+#define CVMX_PKO_REG_GMX_PORT_MODE		(0x0001180050000018ull)
+#define CVMX_PKO_REG_INT_MASK			(0x0001180050000090ull)
+#define CVMX_PKO_REG_LOOPBACK_BPID		(0x0001180050000118ull)
+#define CVMX_PKO_REG_LOOPBACK_PKIND		(0x0001180050000068ull)
+#define CVMX_PKO_REG_MIN_PKT			(0x0001180050000070ull)
+#define CVMX_PKO_REG_PREEMPT			(0x0001180050000110ull)
+#define CVMX_PKO_REG_QUEUE_MODE			(0x0001180050000048ull)
+#define CVMX_PKO_REG_QUEUE_PREEMPT		(0x0001180050000108ull)
+#define CVMX_PKO_REG_QUEUE_PTRS1		(0x0001180050000100ull)
+#define CVMX_PKO_REG_READ_IDX			(0x0001180050000008ull)
+#define CVMX_PKO_REG_THROTTLE			(0x0001180050000078ull)
+#define CVMX_PKO_REG_TIMESTAMP			(0x0001180050000060ull)
+#define CVMX_PKO_SHAPER_CFG			(0x00015400000800F8ull)
+#define CVMX_PKO_STATE_UID_IN_USEX_RD(offset)	(0x0001540000900F00ull + ((offset) & 3) * 8)
+#define CVMX_PKO_STATUS				(0x0001540000D00000ull)
+#define CVMX_PKO_TXFX_PKT_CNT_RD(offset)	(0x0001540000900E00ull + ((offset) & 31) * 8)
+
+/**
+ * cvmx_pko_channel_level
+ */
+union cvmx_pko_channel_level {
+	u64 u64;
+	struct cvmx_pko_channel_level_s {
+		u64 reserved_1_63 : 63;
+		u64 cc_level : 1;
+	} s;
+	struct cvmx_pko_channel_level_s cn73xx;
+	struct cvmx_pko_channel_level_s cn78xx;
+	struct cvmx_pko_channel_level_s cn78xxp1;
+	struct cvmx_pko_channel_level_s cnf75xx;
+};
+
+typedef union cvmx_pko_channel_level cvmx_pko_channel_level_t;
+
+/**
+ * cvmx_pko_dpfi_ena
+ */
+union cvmx_pko_dpfi_ena {
+	u64 u64;
+	struct cvmx_pko_dpfi_ena_s {
+		u64 reserved_1_63 : 63;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_dpfi_ena_s cn73xx;
+	struct cvmx_pko_dpfi_ena_s cn78xx;
+	struct cvmx_pko_dpfi_ena_s cn78xxp1;
+	struct cvmx_pko_dpfi_ena_s cnf75xx;
+};
+
+typedef union cvmx_pko_dpfi_ena cvmx_pko_dpfi_ena_t;
+
+/**
+ * cvmx_pko_dpfi_flush
+ */
+union cvmx_pko_dpfi_flush {
+	u64 u64;
+	struct cvmx_pko_dpfi_flush_s {
+		u64 reserved_1_63 : 63;
+		u64 flush_en : 1;
+	} s;
+	struct cvmx_pko_dpfi_flush_s cn73xx;
+	struct cvmx_pko_dpfi_flush_s cn78xx;
+	struct cvmx_pko_dpfi_flush_s cn78xxp1;
+	struct cvmx_pko_dpfi_flush_s cnf75xx;
+};
+
+typedef union cvmx_pko_dpfi_flush cvmx_pko_dpfi_flush_t;
+
+/**
+ * cvmx_pko_dpfi_fpa_aura
+ */
+union cvmx_pko_dpfi_fpa_aura {
+	u64 u64;
+	struct cvmx_pko_dpfi_fpa_aura_s {
+		u64 reserved_12_63 : 52;
+		u64 node : 2;
+		u64 laura : 10;
+	} s;
+	struct cvmx_pko_dpfi_fpa_aura_s cn73xx;
+	struct cvmx_pko_dpfi_fpa_aura_s cn78xx;
+	struct cvmx_pko_dpfi_fpa_aura_s cn78xxp1;
+	struct cvmx_pko_dpfi_fpa_aura_s cnf75xx;
+};
+
+typedef union cvmx_pko_dpfi_fpa_aura cvmx_pko_dpfi_fpa_aura_t;
+
+/**
+ * cvmx_pko_dpfi_status
+ */
+union cvmx_pko_dpfi_status {
+	u64 u64;
+	struct cvmx_pko_dpfi_status_s {
+		u64 ptr_cnt : 32;
+		u64 reserved_27_31 : 5;
+		u64 xpd_fif_cnt : 4;
+		u64 dalc_fif_cnt : 4;
+		u64 alc_fif_cnt : 5;
+		u64 reserved_13_13 : 1;
+		u64 isrd_ptr1_rtn_full : 1;
+		u64 isrd_ptr0_rtn_full : 1;
+		u64 isrm_ptr1_rtn_full : 1;
+		u64 isrm_ptr0_rtn_full : 1;
+		u64 isrd_ptr1_val : 1;
+		u64 isrd_ptr0_val : 1;
+		u64 isrm_ptr1_val : 1;
+		u64 isrm_ptr0_val : 1;
+		u64 ptr_req_pend : 1;
+		u64 ptr_rtn_pend : 1;
+		u64 fpa_empty : 1;
+		u64 dpfi_empty : 1;
+		u64 cache_flushed : 1;
+	} s;
+	struct cvmx_pko_dpfi_status_s cn73xx;
+	struct cvmx_pko_dpfi_status_s cn78xx;
+	struct cvmx_pko_dpfi_status_cn78xxp1 {
+		u64 ptr_cnt : 32;
+		u64 reserved_13_31 : 19;
+		u64 isrd_ptr1_rtn_full : 1;
+		u64 isrd_ptr0_rtn_full : 1;
+		u64 isrm_ptr1_rtn_full : 1;
+		u64 isrm_ptr0_rtn_full : 1;
+		u64 isrd_ptr1_val : 1;
+		u64 isrd_ptr0_val : 1;
+		u64 isrm_ptr1_val : 1;
+		u64 isrm_ptr0_val : 1;
+		u64 ptr_req_pend : 1;
+		u64 ptr_rtn_pend : 1;
+		u64 fpa_empty : 1;
+		u64 dpfi_empty : 1;
+		u64 cache_flushed : 1;
+	} cn78xxp1;
+	struct cvmx_pko_dpfi_status_s cnf75xx;
+};
+
+typedef union cvmx_pko_dpfi_status cvmx_pko_dpfi_status_t;
+
+/**
+ * cvmx_pko_dq#_bytes
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN_BYTES.
+ *
+ */
+union cvmx_pko_dqx_bytes {
+	u64 u64;
+	struct cvmx_pko_dqx_bytes_s {
+		u64 reserved_48_63 : 16;
+		u64 count : 48;
+	} s;
+	struct cvmx_pko_dqx_bytes_s cn73xx;
+	struct cvmx_pko_dqx_bytes_s cn78xx;
+	struct cvmx_pko_dqx_bytes_s cn78xxp1;
+	struct cvmx_pko_dqx_bytes_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_bytes cvmx_pko_dqx_bytes_t;
+
+/**
+ * cvmx_pko_dq#_cir
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_CIR.
+ *
+ */
+union cvmx_pko_dqx_cir {
+	u64 u64;
+	struct cvmx_pko_dqx_cir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_dqx_cir_s cn73xx;
+	struct cvmx_pko_dqx_cir_s cn78xx;
+	struct cvmx_pko_dqx_cir_s cn78xxp1;
+	struct cvmx_pko_dqx_cir_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_cir cvmx_pko_dqx_cir_t;
+
+/**
+ * cvmx_pko_dq#_dropped_bytes
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN_BYTES.
+ *
+ */
+union cvmx_pko_dqx_dropped_bytes {
+	u64 u64;
+	struct cvmx_pko_dqx_dropped_bytes_s {
+		u64 reserved_48_63 : 16;
+		u64 count : 48;
+	} s;
+	struct cvmx_pko_dqx_dropped_bytes_s cn73xx;
+	struct cvmx_pko_dqx_dropped_bytes_s cn78xx;
+	struct cvmx_pko_dqx_dropped_bytes_s cn78xxp1;
+	struct cvmx_pko_dqx_dropped_bytes_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_dropped_bytes cvmx_pko_dqx_dropped_bytes_t;
+
+/**
+ * cvmx_pko_dq#_dropped_packets
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN_PACKETS.
+ *
+ */
+union cvmx_pko_dqx_dropped_packets {
+	u64 u64;
+	struct cvmx_pko_dqx_dropped_packets_s {
+		u64 reserved_40_63 : 24;
+		u64 count : 40;
+	} s;
+	struct cvmx_pko_dqx_dropped_packets_s cn73xx;
+	struct cvmx_pko_dqx_dropped_packets_s cn78xx;
+	struct cvmx_pko_dqx_dropped_packets_s cn78xxp1;
+	struct cvmx_pko_dqx_dropped_packets_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_dropped_packets cvmx_pko_dqx_dropped_packets_t;
+
+/**
+ * cvmx_pko_dq#_fifo
+ */
+union cvmx_pko_dqx_fifo {
+	u64 u64;
+	struct cvmx_pko_dqx_fifo_s {
+		u64 reserved_15_63 : 49;
+		u64 p_con : 1;
+		u64 head : 7;
+		u64 tail : 7;
+	} s;
+	struct cvmx_pko_dqx_fifo_s cn73xx;
+	struct cvmx_pko_dqx_fifo_s cn78xx;
+	struct cvmx_pko_dqx_fifo_s cn78xxp1;
+	struct cvmx_pko_dqx_fifo_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_fifo cvmx_pko_dqx_fifo_t;
+
+/**
+ * cvmx_pko_dq#_packets
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN_PACKETS.
+ *
+ */
+union cvmx_pko_dqx_packets {
+	u64 u64;
+	struct cvmx_pko_dqx_packets_s {
+		u64 reserved_40_63 : 24;
+		u64 count : 40;
+	} s;
+	struct cvmx_pko_dqx_packets_s cn73xx;
+	struct cvmx_pko_dqx_packets_s cn78xx;
+	struct cvmx_pko_dqx_packets_s cn78xxp1;
+	struct cvmx_pko_dqx_packets_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_packets cvmx_pko_dqx_packets_t;
+
+/**
+ * cvmx_pko_dq#_pick
+ *
+ * This CSR contains the meta for the DQ, and is for debug and reconfiguration
+ * only and should never be written. See also PKO_META_DESC_S.
+ */
+union cvmx_pko_dqx_pick {
+	u64 u64;
+	struct cvmx_pko_dqx_pick_s {
+		u64 dq : 10;
+		u64 color : 2;
+		u64 child : 10;
+		u64 bubble : 1;
+		u64 p_con : 1;
+		u64 c_con : 1;
+		u64 uid : 7;
+		u64 jump : 1;
+		u64 fpd : 1;
+		u64 ds : 1;
+		u64 adjust : 9;
+		u64 pir_dis : 1;
+		u64 cir_dis : 1;
+		u64 red_algo_override : 2;
+		u64 length : 16;
+	} s;
+	struct cvmx_pko_dqx_pick_s cn73xx;
+	struct cvmx_pko_dqx_pick_s cn78xx;
+	struct cvmx_pko_dqx_pick_s cn78xxp1;
+	struct cvmx_pko_dqx_pick_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_pick cvmx_pko_dqx_pick_t;
+
+/**
+ * cvmx_pko_dq#_pir
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_CIR.
+ *
+ */
+union cvmx_pko_dqx_pir {
+	u64 u64;
+	struct cvmx_pko_dqx_pir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_dqx_pir_s cn73xx;
+	struct cvmx_pko_dqx_pir_s cn78xx;
+	struct cvmx_pko_dqx_pir_s cn78xxp1;
+	struct cvmx_pko_dqx_pir_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_pir cvmx_pko_dqx_pir_t;
+
+/**
+ * cvmx_pko_dq#_pointers
+ *
+ * This register has the same bit fields as PKO_L3_SQ(0..255)_POINTERS.
+ *
+ */
+union cvmx_pko_dqx_pointers {
+	u64 u64;
+	struct cvmx_pko_dqx_pointers_s {
+		u64 reserved_26_63 : 38;
+		u64 prev : 10;
+		u64 reserved_10_15 : 6;
+		u64 next : 10;
+	} s;
+	struct cvmx_pko_dqx_pointers_cn73xx {
+		u64 reserved_24_63 : 40;
+		u64 prev : 8;
+		u64 reserved_8_15 : 8;
+		u64 next : 8;
+	} cn73xx;
+	struct cvmx_pko_dqx_pointers_s cn78xx;
+	struct cvmx_pko_dqx_pointers_s cn78xxp1;
+	struct cvmx_pko_dqx_pointers_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_pointers cvmx_pko_dqx_pointers_t;
+
+/**
+ * cvmx_pko_dq#_sched_state
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SCHED_STATE.
+ *
+ */
+union cvmx_pko_dqx_sched_state {
+	u64 u64;
+	struct cvmx_pko_dqx_sched_state_s {
+		u64 reserved_25_63 : 39;
+		u64 rr_count : 25;
+	} s;
+	struct cvmx_pko_dqx_sched_state_s cn73xx;
+	struct cvmx_pko_dqx_sched_state_s cn78xx;
+	struct cvmx_pko_dqx_sched_state_s cn78xxp1;
+	struct cvmx_pko_dqx_sched_state_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_sched_state cvmx_pko_dqx_sched_state_t;
+
+/**
+ * cvmx_pko_dq#_schedule
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SCHEDULE.
+ *
+ */
+union cvmx_pko_dqx_schedule {
+	u64 u64;
+	struct cvmx_pko_dqx_schedule_s {
+		u64 reserved_28_63 : 36;
+		u64 prio : 4;
+		u64 rr_quantum : 24;
+	} s;
+	struct cvmx_pko_dqx_schedule_s cn73xx;
+	struct cvmx_pko_dqx_schedule_s cn78xx;
+	struct cvmx_pko_dqx_schedule_s cn78xxp1;
+	struct cvmx_pko_dqx_schedule_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_schedule cvmx_pko_dqx_schedule_t;
+
+/**
+ * cvmx_pko_dq#_shape
+ *
+ * This register has the same bit fields as PKO_L3_SQ()_SHAPE.
+ *
+ */
+union cvmx_pko_dqx_shape {
+	u64 u64;
+	struct cvmx_pko_dqx_shape_s {
+		u64 reserved_27_63 : 37;
+		u64 schedule_list : 2;
+		u64 length_disable : 1;
+		u64 reserved_13_23 : 11;
+		u64 yellow_disable : 1;
+		u64 red_disable : 1;
+		u64 red_algo : 2;
+		u64 adjust : 9;
+	} s;
+	struct cvmx_pko_dqx_shape_s cn73xx;
+	struct cvmx_pko_dqx_shape_cn78xx {
+		u64 reserved_25_63 : 39;
+		u64 length_disable : 1;
+		u64 reserved_13_23 : 11;
+		u64 yellow_disable : 1;
+		u64 red_disable : 1;
+		u64 red_algo : 2;
+		u64 adjust : 9;
+	} cn78xx;
+	struct cvmx_pko_dqx_shape_cn78xx cn78xxp1;
+	struct cvmx_pko_dqx_shape_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_shape cvmx_pko_dqx_shape_t;
+
+/**
+ * cvmx_pko_dq#_shape_state
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SHAPE_STATE.
+ * This register must not be written during normal operation.
+ */
+union cvmx_pko_dqx_shape_state {
+	u64 u64;
+	struct cvmx_pko_dqx_shape_state_s {
+		u64 reserved_60_63 : 4;
+		u64 tw_timestamp : 6;
+		u64 color : 2;
+		u64 pir_accum : 26;
+		u64 cir_accum : 26;
+	} s;
+	struct cvmx_pko_dqx_shape_state_s cn73xx;
+	struct cvmx_pko_dqx_shape_state_s cn78xx;
+	struct cvmx_pko_dqx_shape_state_s cn78xxp1;
+	struct cvmx_pko_dqx_shape_state_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_shape_state cvmx_pko_dqx_shape_state_t;
+
+/**
+ * cvmx_pko_dq#_sw_xoff
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_SW_XOFF.
+ *
+ */
+union cvmx_pko_dqx_sw_xoff {
+	u64 u64;
+	struct cvmx_pko_dqx_sw_xoff_s {
+		u64 reserved_4_63 : 60;
+		u64 drain_irq : 1;
+		u64 drain_null_link : 1;
+		u64 drain : 1;
+		u64 xoff : 1;
+	} s;
+	struct cvmx_pko_dqx_sw_xoff_s cn73xx;
+	struct cvmx_pko_dqx_sw_xoff_s cn78xx;
+	struct cvmx_pko_dqx_sw_xoff_s cn78xxp1;
+	struct cvmx_pko_dqx_sw_xoff_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_sw_xoff cvmx_pko_dqx_sw_xoff_t;
+
+/**
+ * cvmx_pko_dq#_topology
+ */
+union cvmx_pko_dqx_topology {
+	u64 u64;
+	struct cvmx_pko_dqx_topology_s {
+		u64 reserved_26_63 : 38;
+		u64 parent : 10;
+		u64 reserved_0_15 : 16;
+	} s;
+	struct cvmx_pko_dqx_topology_cn73xx {
+		u64 reserved_24_63 : 40;
+		u64 parent : 8;
+		u64 reserved_0_15 : 16;
+	} cn73xx;
+	struct cvmx_pko_dqx_topology_s cn78xx;
+	struct cvmx_pko_dqx_topology_s cn78xxp1;
+	struct cvmx_pko_dqx_topology_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_topology cvmx_pko_dqx_topology_t;
+
+/**
+ * cvmx_pko_dq#_wm_buf_cnt
+ */
+union cvmx_pko_dqx_wm_buf_cnt {
+	u64 u64;
+	struct cvmx_pko_dqx_wm_buf_cnt_s {
+		u64 reserved_36_63 : 28;
+		u64 count : 36;
+	} s;
+	struct cvmx_pko_dqx_wm_buf_cnt_s cn73xx;
+	struct cvmx_pko_dqx_wm_buf_cnt_s cn78xx;
+	struct cvmx_pko_dqx_wm_buf_cnt_s cn78xxp1;
+	struct cvmx_pko_dqx_wm_buf_cnt_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_wm_buf_cnt cvmx_pko_dqx_wm_buf_cnt_t;
+
+/**
+ * cvmx_pko_dq#_wm_buf_ctl
+ */
+union cvmx_pko_dqx_wm_buf_ctl {
+	u64 u64;
+	struct cvmx_pko_dqx_wm_buf_ctl_s {
+		u64 reserved_51_63 : 13;
+		u64 enable : 1;
+		u64 reserved_49_49 : 1;
+		u64 intr : 1;
+		u64 reserved_36_47 : 12;
+		u64 threshold : 36;
+	} s;
+	struct cvmx_pko_dqx_wm_buf_ctl_s cn73xx;
+	struct cvmx_pko_dqx_wm_buf_ctl_s cn78xx;
+	struct cvmx_pko_dqx_wm_buf_ctl_s cn78xxp1;
+	struct cvmx_pko_dqx_wm_buf_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_wm_buf_ctl cvmx_pko_dqx_wm_buf_ctl_t;
+
+/**
+ * cvmx_pko_dq#_wm_buf_ctl_w1c
+ */
+union cvmx_pko_dqx_wm_buf_ctl_w1c {
+	u64 u64;
+	struct cvmx_pko_dqx_wm_buf_ctl_w1c_s {
+		u64 reserved_49_63 : 15;
+		u64 intr : 1;
+		u64 reserved_0_47 : 48;
+	} s;
+	struct cvmx_pko_dqx_wm_buf_ctl_w1c_s cn73xx;
+	struct cvmx_pko_dqx_wm_buf_ctl_w1c_s cn78xx;
+	struct cvmx_pko_dqx_wm_buf_ctl_w1c_s cn78xxp1;
+	struct cvmx_pko_dqx_wm_buf_ctl_w1c_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_wm_buf_ctl_w1c cvmx_pko_dqx_wm_buf_ctl_w1c_t;
+
+/**
+ * cvmx_pko_dq#_wm_cnt
+ */
+union cvmx_pko_dqx_wm_cnt {
+	u64 u64;
+	struct cvmx_pko_dqx_wm_cnt_s {
+		u64 reserved_48_63 : 16;
+		u64 count : 48;
+	} s;
+	struct cvmx_pko_dqx_wm_cnt_s cn73xx;
+	struct cvmx_pko_dqx_wm_cnt_s cn78xx;
+	struct cvmx_pko_dqx_wm_cnt_s cn78xxp1;
+	struct cvmx_pko_dqx_wm_cnt_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_wm_cnt cvmx_pko_dqx_wm_cnt_t;
+
+/**
+ * cvmx_pko_dq#_wm_ctl
+ */
+union cvmx_pko_dqx_wm_ctl {
+	u64 u64;
+	struct cvmx_pko_dqx_wm_ctl_s {
+		u64 reserved_52_63 : 12;
+		u64 ncb_query_rsp : 1;
+		u64 enable : 1;
+		u64 kind : 1;
+		u64 intr : 1;
+		u64 threshold : 48;
+	} s;
+	struct cvmx_pko_dqx_wm_ctl_s cn73xx;
+	struct cvmx_pko_dqx_wm_ctl_s cn78xx;
+	struct cvmx_pko_dqx_wm_ctl_s cn78xxp1;
+	struct cvmx_pko_dqx_wm_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_wm_ctl cvmx_pko_dqx_wm_ctl_t;
+
+/**
+ * cvmx_pko_dq#_wm_ctl_w1c
+ */
+union cvmx_pko_dqx_wm_ctl_w1c {
+	u64 u64;
+	struct cvmx_pko_dqx_wm_ctl_w1c_s {
+		u64 reserved_49_63 : 15;
+		u64 intr : 1;
+		u64 reserved_0_47 : 48;
+	} s;
+	struct cvmx_pko_dqx_wm_ctl_w1c_s cn73xx;
+	struct cvmx_pko_dqx_wm_ctl_w1c_s cn78xx;
+	struct cvmx_pko_dqx_wm_ctl_w1c_s cn78xxp1;
+	struct cvmx_pko_dqx_wm_ctl_w1c_s cnf75xx;
+};
+
+typedef union cvmx_pko_dqx_wm_ctl_w1c cvmx_pko_dqx_wm_ctl_w1c_t;
+
+/**
+ * cvmx_pko_dq_csr_bus_debug
+ */
+union cvmx_pko_dq_csr_bus_debug {
+	u64 u64;
+	struct cvmx_pko_dq_csr_bus_debug_s {
+		u64 csr_bus_debug : 64;
+	} s;
+	struct cvmx_pko_dq_csr_bus_debug_s cn73xx;
+	struct cvmx_pko_dq_csr_bus_debug_s cn78xx;
+	struct cvmx_pko_dq_csr_bus_debug_s cn78xxp1;
+	struct cvmx_pko_dq_csr_bus_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_dq_csr_bus_debug cvmx_pko_dq_csr_bus_debug_t;
+
+/**
+ * cvmx_pko_dq_debug
+ */
+union cvmx_pko_dq_debug {
+	u64 u64;
+	struct cvmx_pko_dq_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_dq_debug_s cn73xx;
+	struct cvmx_pko_dq_debug_s cn78xx;
+	struct cvmx_pko_dq_debug_s cn78xxp1;
+	struct cvmx_pko_dq_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_dq_debug cvmx_pko_dq_debug_t;
+
+/**
+ * cvmx_pko_drain_irq
+ */
+union cvmx_pko_drain_irq {
+	u64 u64;
+	struct cvmx_pko_drain_irq_s {
+		u64 reserved_1_63 : 63;
+		u64 intr : 1;
+	} s;
+	struct cvmx_pko_drain_irq_s cn73xx;
+	struct cvmx_pko_drain_irq_s cn78xx;
+	struct cvmx_pko_drain_irq_s cn78xxp1;
+	struct cvmx_pko_drain_irq_s cnf75xx;
+};
+
+typedef union cvmx_pko_drain_irq cvmx_pko_drain_irq_t;
+
+/**
+ * cvmx_pko_enable
+ */
+union cvmx_pko_enable {
+	u64 u64;
+	struct cvmx_pko_enable_s {
+		u64 reserved_1_63 : 63;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_enable_s cn73xx;
+	struct cvmx_pko_enable_s cn78xx;
+	struct cvmx_pko_enable_s cn78xxp1;
+	struct cvmx_pko_enable_s cnf75xx;
+};
+
+typedef union cvmx_pko_enable cvmx_pko_enable_t;
+
+/**
+ * cvmx_pko_format#_ctl
+ *
+ * Describes packet marking calculations for YELLOW and for RED_SEND packets.
+ * PKO_SEND_HDR_S[FORMAT] selects the CSR used for the packet descriptor.
+ *
+ * All the packet marking calculations assume big-endian bits within a byte.
+ *
+ * For example, if MARKPTR is 3 and [OFFSET] is 5 and the packet is YELLOW,
+ * the PKO marking hardware would do this:
+ *
+ * _  byte[3]<2:0> |=   Y_VAL<3:1>
+ * _  byte[3]<2:0> &= ~Y_MASK<3:1>
+ * _  byte[4]<7>   |=   Y_VAL<0>
+ * _  byte[4]<7>   &= ~Y_MASK<0>
+ *
+ * where byte[3] is the 3rd byte in the packet, and byte[4] the 4th.
+ *
+ * For another example, if MARKPTR is 3 and [OFFSET] is 0 and the packet is RED_SEND,
+ *
+ * _   byte[3]<7:4> |=   R_VAL<3:0>
+ * _   byte[3]<7:4> &= ~R_MASK<3:0>
+ */
+union cvmx_pko_formatx_ctl {
+	u64 u64;
+	struct cvmx_pko_formatx_ctl_s {
+		u64 reserved_27_63 : 37;
+		u64 offset : 11;
+		u64 y_mask : 4;
+		u64 y_val : 4;
+		u64 r_mask : 4;
+		u64 r_val : 4;
+	} s;
+	struct cvmx_pko_formatx_ctl_s cn73xx;
+	struct cvmx_pko_formatx_ctl_s cn78xx;
+	struct cvmx_pko_formatx_ctl_s cn78xxp1;
+	struct cvmx_pko_formatx_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pko_formatx_ctl cvmx_pko_formatx_ctl_t;
+
+/**
+ * cvmx_pko_l1_sq#_cir
+ */
+union cvmx_pko_l1_sqx_cir {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_cir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_l1_sqx_cir_s cn73xx;
+	struct cvmx_pko_l1_sqx_cir_s cn78xx;
+	struct cvmx_pko_l1_sqx_cir_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_cir_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_cir cvmx_pko_l1_sqx_cir_t;
+
+/**
+ * cvmx_pko_l1_sq#_dropped_bytes
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN_BYTES.
+ *
+ */
+union cvmx_pko_l1_sqx_dropped_bytes {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_dropped_bytes_s {
+		u64 reserved_48_63 : 16;
+		u64 count : 48;
+	} s;
+	struct cvmx_pko_l1_sqx_dropped_bytes_s cn73xx;
+	struct cvmx_pko_l1_sqx_dropped_bytes_s cn78xx;
+	struct cvmx_pko_l1_sqx_dropped_bytes_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_dropped_bytes_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_dropped_bytes cvmx_pko_l1_sqx_dropped_bytes_t;
+
+/**
+ * cvmx_pko_l1_sq#_dropped_packets
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN_PACKETS.
+ *
+ */
+union cvmx_pko_l1_sqx_dropped_packets {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_dropped_packets_s {
+		u64 reserved_40_63 : 24;
+		u64 count : 40;
+	} s;
+	struct cvmx_pko_l1_sqx_dropped_packets_s cn73xx;
+	struct cvmx_pko_l1_sqx_dropped_packets_s cn78xx;
+	struct cvmx_pko_l1_sqx_dropped_packets_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_dropped_packets_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_dropped_packets cvmx_pko_l1_sqx_dropped_packets_t;
+
+/**
+ * cvmx_pko_l1_sq#_green
+ */
+union cvmx_pko_l1_sqx_green {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_green_s {
+		u64 reserved_41_63 : 23;
+		u64 rr_active : 1;
+		u64 active_vec : 20;
+		u64 reserved_19_19 : 1;
+		u64 head : 9;
+		u64 reserved_9_9 : 1;
+		u64 tail : 9;
+	} s;
+	struct cvmx_pko_l1_sqx_green_s cn73xx;
+	struct cvmx_pko_l1_sqx_green_s cn78xx;
+	struct cvmx_pko_l1_sqx_green_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_green_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_green cvmx_pko_l1_sqx_green_t;
+
+/**
+ * cvmx_pko_l1_sq#_green_bytes
+ */
+union cvmx_pko_l1_sqx_green_bytes {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_green_bytes_s {
+		u64 reserved_48_63 : 16;
+		u64 count : 48;
+	} s;
+	struct cvmx_pko_l1_sqx_green_bytes_s cn73xx;
+	struct cvmx_pko_l1_sqx_green_bytes_s cn78xx;
+	struct cvmx_pko_l1_sqx_green_bytes_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_green_bytes_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_green_bytes cvmx_pko_l1_sqx_green_bytes_t;
+
+/**
+ * cvmx_pko_l1_sq#_green_packets
+ */
+union cvmx_pko_l1_sqx_green_packets {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_green_packets_s {
+		u64 reserved_40_63 : 24;
+		u64 count : 40;
+	} s;
+	struct cvmx_pko_l1_sqx_green_packets_s cn73xx;
+	struct cvmx_pko_l1_sqx_green_packets_s cn78xx;
+	struct cvmx_pko_l1_sqx_green_packets_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_green_packets_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_green_packets cvmx_pko_l1_sqx_green_packets_t;
+
+/**
+ * cvmx_pko_l1_sq#_link
+ */
+union cvmx_pko_l1_sqx_link {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_link_s {
+		u64 reserved_49_63 : 15;
+		u64 link : 5;
+		u64 reserved_32_43 : 12;
+		u64 cc_word_cnt : 20;
+		u64 cc_packet_cnt : 10;
+		u64 cc_enable : 1;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_l1_sqx_link_cn73xx {
+		u64 reserved_48_63 : 16;
+		u64 link : 4;
+		u64 reserved_32_43 : 12;
+		u64 cc_word_cnt : 20;
+		u64 cc_packet_cnt : 10;
+		u64 cc_enable : 1;
+		u64 reserved_0_0 : 1;
+	} cn73xx;
+	struct cvmx_pko_l1_sqx_link_s cn78xx;
+	struct cvmx_pko_l1_sqx_link_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_link_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_link cvmx_pko_l1_sqx_link_t;
+
+/**
+ * cvmx_pko_l1_sq#_pick
+ *
+ * This CSR contains the meta for the L1 SQ, and is for debug and reconfiguration
+ * only and should never be written. See also PKO_META_DESC_S.
+ */
+union cvmx_pko_l1_sqx_pick {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_pick_s {
+		u64 dq : 10;
+		u64 color : 2;
+		u64 child : 10;
+		u64 bubble : 1;
+		u64 p_con : 1;
+		u64 c_con : 1;
+		u64 uid : 7;
+		u64 jump : 1;
+		u64 fpd : 1;
+		u64 ds : 1;
+		u64 adjust : 9;
+		u64 pir_dis : 1;
+		u64 cir_dis : 1;
+		u64 red_algo_override : 2;
+		u64 length : 16;
+	} s;
+	struct cvmx_pko_l1_sqx_pick_s cn73xx;
+	struct cvmx_pko_l1_sqx_pick_s cn78xx;
+	struct cvmx_pko_l1_sqx_pick_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_pick_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_pick cvmx_pko_l1_sqx_pick_t;
+
+/**
+ * cvmx_pko_l1_sq#_red
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_YELLOW.
+ *
+ */
+union cvmx_pko_l1_sqx_red {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_red_s {
+		u64 reserved_19_63 : 45;
+		u64 head : 9;
+		u64 reserved_9_9 : 1;
+		u64 tail : 9;
+	} s;
+	struct cvmx_pko_l1_sqx_red_s cn73xx;
+	struct cvmx_pko_l1_sqx_red_s cn78xx;
+	struct cvmx_pko_l1_sqx_red_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_red_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_red cvmx_pko_l1_sqx_red_t;
+
+/**
+ * cvmx_pko_l1_sq#_red_bytes
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN_BYTES.
+ *
+ */
+union cvmx_pko_l1_sqx_red_bytes {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_red_bytes_s {
+		u64 reserved_48_63 : 16;
+		u64 count : 48;
+	} s;
+	struct cvmx_pko_l1_sqx_red_bytes_s cn73xx;
+	struct cvmx_pko_l1_sqx_red_bytes_s cn78xx;
+	struct cvmx_pko_l1_sqx_red_bytes_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_red_bytes_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_red_bytes cvmx_pko_l1_sqx_red_bytes_t;
+
+/**
+ * cvmx_pko_l1_sq#_red_packets
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN_PACKETS.
+ *
+ */
+union cvmx_pko_l1_sqx_red_packets {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_red_packets_s {
+		u64 reserved_40_63 : 24;
+		u64 count : 40;
+	} s;
+	struct cvmx_pko_l1_sqx_red_packets_s cn73xx;
+	struct cvmx_pko_l1_sqx_red_packets_s cn78xx;
+	struct cvmx_pko_l1_sqx_red_packets_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_red_packets_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_red_packets cvmx_pko_l1_sqx_red_packets_t;
+
+/**
+ * cvmx_pko_l1_sq#_schedule
+ */
+union cvmx_pko_l1_sqx_schedule {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_schedule_s {
+		u64 dummy : 40;
+		u64 rr_quantum : 24;
+	} s;
+	struct cvmx_pko_l1_sqx_schedule_cn73xx {
+		u64 reserved_24_63 : 40;
+		u64 rr_quantum : 24;
+	} cn73xx;
+	struct cvmx_pko_l1_sqx_schedule_cn73xx cn78xx;
+	struct cvmx_pko_l1_sqx_schedule_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_schedule_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_schedule cvmx_pko_l1_sqx_schedule_t;
+
+/**
+ * cvmx_pko_l1_sq#_shape
+ */
+union cvmx_pko_l1_sqx_shape {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_shape_s {
+		u64 reserved_25_63 : 39;
+		u64 length_disable : 1;
+		u64 reserved_18_23 : 6;
+		u64 link : 5;
+		u64 reserved_9_12 : 4;
+		u64 adjust : 9;
+	} s;
+	struct cvmx_pko_l1_sqx_shape_cn73xx {
+		u64 reserved_25_63 : 39;
+		u64 length_disable : 1;
+		u64 reserved_17_23 : 7;
+		u64 link : 4;
+		u64 reserved_9_12 : 4;
+		u64 adjust : 9;
+	} cn73xx;
+	struct cvmx_pko_l1_sqx_shape_s cn78xx;
+	struct cvmx_pko_l1_sqx_shape_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_shape_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_shape cvmx_pko_l1_sqx_shape_t;
+
+/**
+ * cvmx_pko_l1_sq#_shape_state
+ *
+ * This register must not be written during normal operation.
+ *
+ */
+union cvmx_pko_l1_sqx_shape_state {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_shape_state_s {
+		u64 reserved_60_63 : 4;
+		u64 tw_timestamp : 6;
+		u64 color2 : 1;
+		u64 color : 1;
+		u64 reserved_26_51 : 26;
+		u64 cir_accum : 26;
+	} s;
+	struct cvmx_pko_l1_sqx_shape_state_cn73xx {
+		u64 reserved_60_63 : 4;
+		u64 tw_timestamp : 6;
+		u64 reserved_53_53 : 1;
+		u64 color : 1;
+		u64 reserved_26_51 : 26;
+		u64 cir_accum : 26;
+	} cn73xx;
+	struct cvmx_pko_l1_sqx_shape_state_cn73xx cn78xx;
+	struct cvmx_pko_l1_sqx_shape_state_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_shape_state_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_shape_state cvmx_pko_l1_sqx_shape_state_t;
+
+/**
+ * cvmx_pko_l1_sq#_sw_xoff
+ */
+union cvmx_pko_l1_sqx_sw_xoff {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_sw_xoff_s {
+		u64 reserved_4_63 : 60;
+		u64 drain_irq : 1;
+		u64 drain_null_link : 1;
+		u64 drain : 1;
+		u64 xoff : 1;
+	} s;
+	struct cvmx_pko_l1_sqx_sw_xoff_s cn73xx;
+	struct cvmx_pko_l1_sqx_sw_xoff_s cn78xx;
+	struct cvmx_pko_l1_sqx_sw_xoff_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_sw_xoff_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_sw_xoff cvmx_pko_l1_sqx_sw_xoff_t;
+
+/**
+ * cvmx_pko_l1_sq#_topology
+ */
+union cvmx_pko_l1_sqx_topology {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_topology_s {
+		u64 reserved_41_63 : 23;
+		u64 prio_anchor : 9;
+		u64 reserved_21_31 : 11;
+		u64 link : 5;
+		u64 reserved_5_15 : 11;
+		u64 rr_prio : 4;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_l1_sqx_topology_cn73xx {
+		u64 reserved_40_63 : 24;
+		u64 prio_anchor : 8;
+		u64 reserved_20_31 : 12;
+		u64 link : 4;
+		u64 reserved_5_15 : 11;
+		u64 rr_prio : 4;
+		u64 reserved_0_0 : 1;
+	} cn73xx;
+	struct cvmx_pko_l1_sqx_topology_s cn78xx;
+	struct cvmx_pko_l1_sqx_topology_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_topology_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_topology cvmx_pko_l1_sqx_topology_t;
+
+/**
+ * cvmx_pko_l1_sq#_yellow
+ */
+union cvmx_pko_l1_sqx_yellow {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_yellow_s {
+		u64 reserved_19_63 : 45;
+		u64 head : 9;
+		u64 reserved_9_9 : 1;
+		u64 tail : 9;
+	} s;
+	struct cvmx_pko_l1_sqx_yellow_s cn73xx;
+	struct cvmx_pko_l1_sqx_yellow_s cn78xx;
+	struct cvmx_pko_l1_sqx_yellow_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_yellow_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_yellow cvmx_pko_l1_sqx_yellow_t;
+
+/**
+ * cvmx_pko_l1_sq#_yellow_bytes
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN_BYTES.
+ *
+ */
+union cvmx_pko_l1_sqx_yellow_bytes {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_yellow_bytes_s {
+		u64 reserved_48_63 : 16;
+		u64 count : 48;
+	} s;
+	struct cvmx_pko_l1_sqx_yellow_bytes_s cn73xx;
+	struct cvmx_pko_l1_sqx_yellow_bytes_s cn78xx;
+	struct cvmx_pko_l1_sqx_yellow_bytes_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_yellow_bytes_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_yellow_bytes cvmx_pko_l1_sqx_yellow_bytes_t;
+
+/**
+ * cvmx_pko_l1_sq#_yellow_packets
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN_PACKETS.
+ *
+ */
+union cvmx_pko_l1_sqx_yellow_packets {
+	u64 u64;
+	struct cvmx_pko_l1_sqx_yellow_packets_s {
+		u64 reserved_40_63 : 24;
+		u64 count : 40;
+	} s;
+	struct cvmx_pko_l1_sqx_yellow_packets_s cn73xx;
+	struct cvmx_pko_l1_sqx_yellow_packets_s cn78xx;
+	struct cvmx_pko_l1_sqx_yellow_packets_s cn78xxp1;
+	struct cvmx_pko_l1_sqx_yellow_packets_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqx_yellow_packets cvmx_pko_l1_sqx_yellow_packets_t;
+
+/**
+ * cvmx_pko_l1_sq_csr_bus_debug
+ */
+union cvmx_pko_l1_sq_csr_bus_debug {
+	u64 u64;
+	struct cvmx_pko_l1_sq_csr_bus_debug_s {
+		u64 csr_bus_debug : 64;
+	} s;
+	struct cvmx_pko_l1_sq_csr_bus_debug_s cn73xx;
+	struct cvmx_pko_l1_sq_csr_bus_debug_s cn78xx;
+	struct cvmx_pko_l1_sq_csr_bus_debug_s cn78xxp1;
+	struct cvmx_pko_l1_sq_csr_bus_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sq_csr_bus_debug cvmx_pko_l1_sq_csr_bus_debug_t;
+
+/**
+ * cvmx_pko_l1_sqa_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_l1_sqa_debug {
+	u64 u64;
+	struct cvmx_pko_l1_sqa_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_l1_sqa_debug_s cn73xx;
+	struct cvmx_pko_l1_sqa_debug_s cn78xx;
+	struct cvmx_pko_l1_sqa_debug_s cn78xxp1;
+	struct cvmx_pko_l1_sqa_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqa_debug cvmx_pko_l1_sqa_debug_t;
+
+/**
+ * cvmx_pko_l1_sqb_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_l1_sqb_debug {
+	u64 u64;
+	struct cvmx_pko_l1_sqb_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_l1_sqb_debug_s cn73xx;
+	struct cvmx_pko_l1_sqb_debug_s cn78xx;
+	struct cvmx_pko_l1_sqb_debug_s cn78xxp1;
+	struct cvmx_pko_l1_sqb_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_l1_sqb_debug cvmx_pko_l1_sqb_debug_t;
+
+/**
+ * cvmx_pko_l2_sq#_cir
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_CIR.
+ *
+ */
+union cvmx_pko_l2_sqx_cir {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_cir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_l2_sqx_cir_s cn73xx;
+	struct cvmx_pko_l2_sqx_cir_s cn78xx;
+	struct cvmx_pko_l2_sqx_cir_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_cir_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_cir cvmx_pko_l2_sqx_cir_t;
+
+/**
+ * cvmx_pko_l2_sq#_green
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_GREEN.
+ *
+ */
+union cvmx_pko_l2_sqx_green {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_green_s {
+		u64 reserved_41_63 : 23;
+		u64 rr_active : 1;
+		u64 active_vec : 20;
+		u64 reserved_19_19 : 1;
+		u64 head : 9;
+		u64 reserved_9_9 : 1;
+		u64 tail : 9;
+	} s;
+	struct cvmx_pko_l2_sqx_green_s cn73xx;
+	struct cvmx_pko_l2_sqx_green_s cn78xx;
+	struct cvmx_pko_l2_sqx_green_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_green_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_green cvmx_pko_l2_sqx_green_t;
+
+/**
+ * cvmx_pko_l2_sq#_pick
+ *
+ * This CSR contains the meta for the L2 SQ, and is for debug and reconfiguration
+ * only and should never be written. See also PKO_META_DESC_S.
+ */
+union cvmx_pko_l2_sqx_pick {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_pick_s {
+		u64 dq : 10;
+		u64 color : 2;
+		u64 child : 10;
+		u64 bubble : 1;
+		u64 p_con : 1;
+		u64 c_con : 1;
+		u64 uid : 7;
+		u64 jump : 1;
+		u64 fpd : 1;
+		u64 ds : 1;
+		u64 adjust : 9;
+		u64 pir_dis : 1;
+		u64 cir_dis : 1;
+		u64 red_algo_override : 2;
+		u64 length : 16;
+	} s;
+	struct cvmx_pko_l2_sqx_pick_s cn73xx;
+	struct cvmx_pko_l2_sqx_pick_s cn78xx;
+	struct cvmx_pko_l2_sqx_pick_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_pick_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_pick cvmx_pko_l2_sqx_pick_t;
+
+/**
+ * cvmx_pko_l2_sq#_pir
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_CIR.
+ *
+ */
+union cvmx_pko_l2_sqx_pir {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_pir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_l2_sqx_pir_s cn73xx;
+	struct cvmx_pko_l2_sqx_pir_s cn78xx;
+	struct cvmx_pko_l2_sqx_pir_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_pir_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_pir cvmx_pko_l2_sqx_pir_t;
+
+/**
+ * cvmx_pko_l2_sq#_pointers
+ */
+union cvmx_pko_l2_sqx_pointers {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_pointers_s {
+		u64 reserved_25_63 : 39;
+		u64 prev : 9;
+		u64 reserved_9_15 : 7;
+		u64 next : 9;
+	} s;
+	struct cvmx_pko_l2_sqx_pointers_cn73xx {
+		u64 reserved_24_63 : 40;
+		u64 prev : 8;
+		u64 reserved_8_15 : 8;
+		u64 next : 8;
+	} cn73xx;
+	struct cvmx_pko_l2_sqx_pointers_s cn78xx;
+	struct cvmx_pko_l2_sqx_pointers_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_pointers_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_pointers cvmx_pko_l2_sqx_pointers_t;
+
+/**
+ * cvmx_pko_l2_sq#_red
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_RED.
+ *
+ */
+union cvmx_pko_l2_sqx_red {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_red_s {
+		u64 reserved_19_63 : 45;
+		u64 head : 9;
+		u64 reserved_9_9 : 1;
+		u64 tail : 9;
+	} s;
+	struct cvmx_pko_l2_sqx_red_s cn73xx;
+	struct cvmx_pko_l2_sqx_red_s cn78xx;
+	struct cvmx_pko_l2_sqx_red_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_red_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_red cvmx_pko_l2_sqx_red_t;
+
+/**
+ * cvmx_pko_l2_sq#_sched_state
+ */
+union cvmx_pko_l2_sqx_sched_state {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_sched_state_s {
+		u64 reserved_25_63 : 39;
+		u64 rr_count : 25;
+	} s;
+	struct cvmx_pko_l2_sqx_sched_state_s cn73xx;
+	struct cvmx_pko_l2_sqx_sched_state_s cn78xx;
+	struct cvmx_pko_l2_sqx_sched_state_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_sched_state_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_sched_state cvmx_pko_l2_sqx_sched_state_t;
+
+/**
+ * cvmx_pko_l2_sq#_schedule
+ */
+union cvmx_pko_l2_sqx_schedule {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_schedule_s {
+		u64 reserved_28_63 : 36;
+		u64 prio : 4;
+		u64 rr_quantum : 24;
+	} s;
+	struct cvmx_pko_l2_sqx_schedule_s cn73xx;
+	struct cvmx_pko_l2_sqx_schedule_s cn78xx;
+	struct cvmx_pko_l2_sqx_schedule_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_schedule_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_schedule cvmx_pko_l2_sqx_schedule_t;
+
+/**
+ * cvmx_pko_l2_sq#_shape
+ */
+union cvmx_pko_l2_sqx_shape {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_shape_s {
+		u64 reserved_27_63 : 37;
+		u64 schedule_list : 2;
+		u64 length_disable : 1;
+		u64 reserved_13_23 : 11;
+		u64 yellow_disable : 1;
+		u64 red_disable : 1;
+		u64 red_algo : 2;
+		u64 adjust : 9;
+	} s;
+	struct cvmx_pko_l2_sqx_shape_s cn73xx;
+	struct cvmx_pko_l2_sqx_shape_cn78xx {
+		u64 reserved_25_63 : 39;
+		u64 length_disable : 1;
+		u64 reserved_13_23 : 11;
+		u64 yellow_disable : 1;
+		u64 red_disable : 1;
+		u64 red_algo : 2;
+		u64 adjust : 9;
+	} cn78xx;
+	struct cvmx_pko_l2_sqx_shape_cn78xx cn78xxp1;
+	struct cvmx_pko_l2_sqx_shape_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_shape cvmx_pko_l2_sqx_shape_t;
+
+/**
+ * cvmx_pko_l2_sq#_shape_state
+ *
+ * This register must not be written during normal operation.
+ *
+ */
+union cvmx_pko_l2_sqx_shape_state {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_shape_state_s {
+		u64 reserved_60_63 : 4;
+		u64 tw_timestamp : 6;
+		u64 color : 2;
+		u64 pir_accum : 26;
+		u64 cir_accum : 26;
+	} s;
+	struct cvmx_pko_l2_sqx_shape_state_s cn73xx;
+	struct cvmx_pko_l2_sqx_shape_state_s cn78xx;
+	struct cvmx_pko_l2_sqx_shape_state_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_shape_state_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_shape_state cvmx_pko_l2_sqx_shape_state_t;
+
+/**
+ * cvmx_pko_l2_sq#_sw_xoff
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_SW_XOFF.
+ *
+ */
+union cvmx_pko_l2_sqx_sw_xoff {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_sw_xoff_s {
+		u64 reserved_4_63 : 60;
+		u64 drain_irq : 1;
+		u64 drain_null_link : 1;
+		u64 drain : 1;
+		u64 xoff : 1;
+	} s;
+	struct cvmx_pko_l2_sqx_sw_xoff_s cn73xx;
+	struct cvmx_pko_l2_sqx_sw_xoff_s cn78xx;
+	struct cvmx_pko_l2_sqx_sw_xoff_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_sw_xoff_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_sw_xoff cvmx_pko_l2_sqx_sw_xoff_t;
+
+/**
+ * cvmx_pko_l2_sq#_topology
+ */
+union cvmx_pko_l2_sqx_topology {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_topology_s {
+		u64 reserved_41_63 : 23;
+		u64 prio_anchor : 9;
+		u64 reserved_21_31 : 11;
+		u64 parent : 5;
+		u64 reserved_5_15 : 11;
+		u64 rr_prio : 4;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_l2_sqx_topology_cn73xx {
+		u64 reserved_40_63 : 24;
+		u64 prio_anchor : 8;
+		u64 reserved_20_31 : 12;
+		u64 parent : 4;
+		u64 reserved_5_15 : 11;
+		u64 rr_prio : 4;
+		u64 reserved_0_0 : 1;
+	} cn73xx;
+	struct cvmx_pko_l2_sqx_topology_s cn78xx;
+	struct cvmx_pko_l2_sqx_topology_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_topology_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_topology cvmx_pko_l2_sqx_topology_t;
+
+/**
+ * cvmx_pko_l2_sq#_yellow
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_YELLOW.
+ *
+ */
+union cvmx_pko_l2_sqx_yellow {
+	u64 u64;
+	struct cvmx_pko_l2_sqx_yellow_s {
+		u64 reserved_19_63 : 45;
+		u64 head : 9;
+		u64 reserved_9_9 : 1;
+		u64 tail : 9;
+	} s;
+	struct cvmx_pko_l2_sqx_yellow_s cn73xx;
+	struct cvmx_pko_l2_sqx_yellow_s cn78xx;
+	struct cvmx_pko_l2_sqx_yellow_s cn78xxp1;
+	struct cvmx_pko_l2_sqx_yellow_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqx_yellow cvmx_pko_l2_sqx_yellow_t;
+
+/**
+ * cvmx_pko_l2_sq_csr_bus_debug
+ */
+union cvmx_pko_l2_sq_csr_bus_debug {
+	u64 u64;
+	struct cvmx_pko_l2_sq_csr_bus_debug_s {
+		u64 csr_bus_debug : 64;
+	} s;
+	struct cvmx_pko_l2_sq_csr_bus_debug_s cn73xx;
+	struct cvmx_pko_l2_sq_csr_bus_debug_s cn78xx;
+	struct cvmx_pko_l2_sq_csr_bus_debug_s cn78xxp1;
+	struct cvmx_pko_l2_sq_csr_bus_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sq_csr_bus_debug cvmx_pko_l2_sq_csr_bus_debug_t;
+
+/**
+ * cvmx_pko_l2_sqa_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_l2_sqa_debug {
+	u64 u64;
+	struct cvmx_pko_l2_sqa_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_l2_sqa_debug_s cn73xx;
+	struct cvmx_pko_l2_sqa_debug_s cn78xx;
+	struct cvmx_pko_l2_sqa_debug_s cn78xxp1;
+	struct cvmx_pko_l2_sqa_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqa_debug cvmx_pko_l2_sqa_debug_t;
+
+/**
+ * cvmx_pko_l2_sqb_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_l2_sqb_debug {
+	u64 u64;
+	struct cvmx_pko_l2_sqb_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_l2_sqb_debug_s cn73xx;
+	struct cvmx_pko_l2_sqb_debug_s cn78xx;
+	struct cvmx_pko_l2_sqb_debug_s cn78xxp1;
+	struct cvmx_pko_l2_sqb_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_l2_sqb_debug cvmx_pko_l2_sqb_debug_t;
+
+/**
+ * cvmx_pko_l3_l2_sq#_channel
+ *
+ * PKO_CHANNEL_LEVEL[CC_LEVEL] determines whether this CSR array is associated to
+ * the L2 SQs or the L3 SQs.
+ */
+union cvmx_pko_l3_l2_sqx_channel {
+	u64 u64;
+	struct cvmx_pko_l3_l2_sqx_channel_s {
+		u64 reserved_44_63 : 20;
+		u64 cc_channel : 12;
+		u64 cc_word_cnt : 20;
+		u64 cc_packet_cnt : 10;
+		u64 cc_enable : 1;
+		u64 hw_xoff : 1;
+	} s;
+	struct cvmx_pko_l3_l2_sqx_channel_s cn73xx;
+	struct cvmx_pko_l3_l2_sqx_channel_s cn78xx;
+	struct cvmx_pko_l3_l2_sqx_channel_s cn78xxp1;
+	struct cvmx_pko_l3_l2_sqx_channel_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_l2_sqx_channel cvmx_pko_l3_l2_sqx_channel_t;
+
+/**
+ * cvmx_pko_l3_sq#_cir
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_CIR.
+ *
+ */
+union cvmx_pko_l3_sqx_cir {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_cir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_l3_sqx_cir_s cn73xx;
+	struct cvmx_pko_l3_sqx_cir_s cn78xx;
+	struct cvmx_pko_l3_sqx_cir_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_cir_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_cir cvmx_pko_l3_sqx_cir_t;
+
+/**
+ * cvmx_pko_l3_sq#_green
+ */
+union cvmx_pko_l3_sqx_green {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_green_s {
+		u64 reserved_41_63 : 23;
+		u64 rr_active : 1;
+		u64 active_vec : 20;
+		u64 head : 10;
+		u64 tail : 10;
+	} s;
+	struct cvmx_pko_l3_sqx_green_cn73xx {
+		u64 reserved_41_63 : 23;
+		u64 rr_active : 1;
+		u64 active_vec : 20;
+		u64 reserved_18_19 : 2;
+		u64 head : 8;
+		u64 reserved_8_9 : 2;
+		u64 tail : 8;
+	} cn73xx;
+	struct cvmx_pko_l3_sqx_green_s cn78xx;
+	struct cvmx_pko_l3_sqx_green_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_green_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_green cvmx_pko_l3_sqx_green_t;
+
+/**
+ * cvmx_pko_l3_sq#_pick
+ *
+ * This CSR contains the meta for the L3 SQ, and is for debug and reconfiguration
+ * only and should never be written. See also PKO_META_DESC_S.
+ */
+union cvmx_pko_l3_sqx_pick {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_pick_s {
+		u64 dq : 10;
+		u64 color : 2;
+		u64 child : 10;
+		u64 bubble : 1;
+		u64 p_con : 1;
+		u64 c_con : 1;
+		u64 uid : 7;
+		u64 jump : 1;
+		u64 fpd : 1;
+		u64 ds : 1;
+		u64 adjust : 9;
+		u64 pir_dis : 1;
+		u64 cir_dis : 1;
+		u64 red_algo_override : 2;
+		u64 length : 16;
+	} s;
+	struct cvmx_pko_l3_sqx_pick_s cn73xx;
+	struct cvmx_pko_l3_sqx_pick_s cn78xx;
+	struct cvmx_pko_l3_sqx_pick_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_pick_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_pick cvmx_pko_l3_sqx_pick_t;
+
+/**
+ * cvmx_pko_l3_sq#_pir
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_CIR.
+ *
+ */
+union cvmx_pko_l3_sqx_pir {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_pir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_l3_sqx_pir_s cn73xx;
+	struct cvmx_pko_l3_sqx_pir_s cn78xx;
+	struct cvmx_pko_l3_sqx_pir_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_pir_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_pir cvmx_pko_l3_sqx_pir_t;
+
+/**
+ * cvmx_pko_l3_sq#_pointers
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_POINTERS.
+ *
+ */
+union cvmx_pko_l3_sqx_pointers {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_pointers_s {
+		u64 reserved_25_63 : 39;
+		u64 prev : 9;
+		u64 reserved_9_15 : 7;
+		u64 next : 9;
+	} s;
+	struct cvmx_pko_l3_sqx_pointers_cn73xx {
+		u64 reserved_24_63 : 40;
+		u64 prev : 8;
+		u64 reserved_8_15 : 8;
+		u64 next : 8;
+	} cn73xx;
+	struct cvmx_pko_l3_sqx_pointers_s cn78xx;
+	struct cvmx_pko_l3_sqx_pointers_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_pointers_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_pointers cvmx_pko_l3_sqx_pointers_t;
+
+/**
+ * cvmx_pko_l3_sq#_red
+ *
+ * This register has the same bit fields as PKO_L3_SQ()_YELLOW.
+ *
+ */
+union cvmx_pko_l3_sqx_red {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_red_s {
+		u64 reserved_20_63 : 44;
+		u64 head : 10;
+		u64 tail : 10;
+	} s;
+	struct cvmx_pko_l3_sqx_red_cn73xx {
+		u64 reserved_18_63 : 46;
+		u64 head : 8;
+		u64 reserved_8_9 : 2;
+		u64 tail : 8;
+	} cn73xx;
+	struct cvmx_pko_l3_sqx_red_s cn78xx;
+	struct cvmx_pko_l3_sqx_red_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_red_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_red cvmx_pko_l3_sqx_red_t;
+
+/**
+ * cvmx_pko_l3_sq#_sched_state
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SCHED_STATE.
+ *
+ */
+union cvmx_pko_l3_sqx_sched_state {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_sched_state_s {
+		u64 reserved_25_63 : 39;
+		u64 rr_count : 25;
+	} s;
+	struct cvmx_pko_l3_sqx_sched_state_s cn73xx;
+	struct cvmx_pko_l3_sqx_sched_state_s cn78xx;
+	struct cvmx_pko_l3_sqx_sched_state_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_sched_state_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_sched_state cvmx_pko_l3_sqx_sched_state_t;
+
+/**
+ * cvmx_pko_l3_sq#_schedule
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SCHEDULE.
+ *
+ */
+union cvmx_pko_l3_sqx_schedule {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_schedule_s {
+		u64 reserved_28_63 : 36;
+		u64 prio : 4;
+		u64 rr_quantum : 24;
+	} s;
+	struct cvmx_pko_l3_sqx_schedule_s cn73xx;
+	struct cvmx_pko_l3_sqx_schedule_s cn78xx;
+	struct cvmx_pko_l3_sqx_schedule_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_schedule_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_schedule cvmx_pko_l3_sqx_schedule_t;
+
+/**
+ * cvmx_pko_l3_sq#_shape
+ */
+union cvmx_pko_l3_sqx_shape {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_shape_s {
+		u64 reserved_27_63 : 37;
+		u64 schedule_list : 2;
+		u64 length_disable : 1;
+		u64 reserved_13_23 : 11;
+		u64 yellow_disable : 1;
+		u64 red_disable : 1;
+		u64 red_algo : 2;
+		u64 adjust : 9;
+	} s;
+	struct cvmx_pko_l3_sqx_shape_s cn73xx;
+	struct cvmx_pko_l3_sqx_shape_cn78xx {
+		u64 reserved_25_63 : 39;
+		u64 length_disable : 1;
+		u64 reserved_13_23 : 11;
+		u64 yellow_disable : 1;
+		u64 red_disable : 1;
+		u64 red_algo : 2;
+		u64 adjust : 9;
+	} cn78xx;
+	struct cvmx_pko_l3_sqx_shape_cn78xx cn78xxp1;
+	struct cvmx_pko_l3_sqx_shape_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_shape cvmx_pko_l3_sqx_shape_t;
+
+/**
+ * cvmx_pko_l3_sq#_shape_state
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SHAPE_STATE.
+ * This register must not be written during normal operation.
+ */
+union cvmx_pko_l3_sqx_shape_state {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_shape_state_s {
+		u64 reserved_60_63 : 4;
+		u64 tw_timestamp : 6;
+		u64 color : 2;
+		u64 pir_accum : 26;
+		u64 cir_accum : 26;
+	} s;
+	struct cvmx_pko_l3_sqx_shape_state_s cn73xx;
+	struct cvmx_pko_l3_sqx_shape_state_s cn78xx;
+	struct cvmx_pko_l3_sqx_shape_state_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_shape_state_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_shape_state cvmx_pko_l3_sqx_shape_state_t;
+
+/**
+ * cvmx_pko_l3_sq#_sw_xoff
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_SW_XOFF
+ *
+ */
+union cvmx_pko_l3_sqx_sw_xoff {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_sw_xoff_s {
+		u64 reserved_4_63 : 60;
+		u64 drain_irq : 1;
+		u64 drain_null_link : 1;
+		u64 drain : 1;
+		u64 xoff : 1;
+	} s;
+	struct cvmx_pko_l3_sqx_sw_xoff_s cn73xx;
+	struct cvmx_pko_l3_sqx_sw_xoff_s cn78xx;
+	struct cvmx_pko_l3_sqx_sw_xoff_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_sw_xoff_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_sw_xoff cvmx_pko_l3_sqx_sw_xoff_t;
+
+/**
+ * cvmx_pko_l3_sq#_topology
+ */
+union cvmx_pko_l3_sqx_topology {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_topology_s {
+		u64 reserved_42_63 : 22;
+		u64 prio_anchor : 10;
+		u64 reserved_25_31 : 7;
+		u64 parent : 9;
+		u64 reserved_5_15 : 11;
+		u64 rr_prio : 4;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_l3_sqx_topology_cn73xx {
+		u64 reserved_40_63 : 24;
+		u64 prio_anchor : 8;
+		u64 reserved_24_31 : 8;
+		u64 parent : 8;
+		u64 reserved_5_15 : 11;
+		u64 rr_prio : 4;
+		u64 reserved_0_0 : 1;
+	} cn73xx;
+	struct cvmx_pko_l3_sqx_topology_s cn78xx;
+	struct cvmx_pko_l3_sqx_topology_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_topology_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_topology cvmx_pko_l3_sqx_topology_t;
+
+/**
+ * cvmx_pko_l3_sq#_yellow
+ */
+union cvmx_pko_l3_sqx_yellow {
+	u64 u64;
+	struct cvmx_pko_l3_sqx_yellow_s {
+		u64 reserved_20_63 : 44;
+		u64 head : 10;
+		u64 tail : 10;
+	} s;
+	struct cvmx_pko_l3_sqx_yellow_cn73xx {
+		u64 reserved_18_63 : 46;
+		u64 head : 8;
+		u64 reserved_8_9 : 2;
+		u64 tail : 8;
+	} cn73xx;
+	struct cvmx_pko_l3_sqx_yellow_s cn78xx;
+	struct cvmx_pko_l3_sqx_yellow_s cn78xxp1;
+	struct cvmx_pko_l3_sqx_yellow_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqx_yellow cvmx_pko_l3_sqx_yellow_t;
+
+/**
+ * cvmx_pko_l3_sq_csr_bus_debug
+ */
+union cvmx_pko_l3_sq_csr_bus_debug {
+	u64 u64;
+	struct cvmx_pko_l3_sq_csr_bus_debug_s {
+		u64 csr_bus_debug : 64;
+	} s;
+	struct cvmx_pko_l3_sq_csr_bus_debug_s cn73xx;
+	struct cvmx_pko_l3_sq_csr_bus_debug_s cn78xx;
+	struct cvmx_pko_l3_sq_csr_bus_debug_s cn78xxp1;
+	struct cvmx_pko_l3_sq_csr_bus_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sq_csr_bus_debug cvmx_pko_l3_sq_csr_bus_debug_t;
+
+/**
+ * cvmx_pko_l3_sqa_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_l3_sqa_debug {
+	u64 u64;
+	struct cvmx_pko_l3_sqa_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_l3_sqa_debug_s cn73xx;
+	struct cvmx_pko_l3_sqa_debug_s cn78xx;
+	struct cvmx_pko_l3_sqa_debug_s cn78xxp1;
+	struct cvmx_pko_l3_sqa_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqa_debug cvmx_pko_l3_sqa_debug_t;
+
+/**
+ * cvmx_pko_l3_sqb_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_l3_sqb_debug {
+	u64 u64;
+	struct cvmx_pko_l3_sqb_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_l3_sqb_debug_s cn73xx;
+	struct cvmx_pko_l3_sqb_debug_s cn78xx;
+	struct cvmx_pko_l3_sqb_debug_s cn78xxp1;
+	struct cvmx_pko_l3_sqb_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_l3_sqb_debug cvmx_pko_l3_sqb_debug_t;
+
+/**
+ * cvmx_pko_l4_sq#_cir
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_CIR.
+ *
+ */
+union cvmx_pko_l4_sqx_cir {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_cir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_l4_sqx_cir_s cn78xx;
+	struct cvmx_pko_l4_sqx_cir_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_cir cvmx_pko_l4_sqx_cir_t;
+
+/**
+ * cvmx_pko_l4_sq#_green
+ *
+ * This register has the same bit fields as PKO_L3_SQ()_GREEN.
+ *
+ */
+union cvmx_pko_l4_sqx_green {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_green_s {
+		u64 reserved_41_63 : 23;
+		u64 rr_active : 1;
+		u64 active_vec : 20;
+		u64 head : 10;
+		u64 tail : 10;
+	} s;
+	struct cvmx_pko_l4_sqx_green_s cn78xx;
+	struct cvmx_pko_l4_sqx_green_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_green cvmx_pko_l4_sqx_green_t;
+
+/**
+ * cvmx_pko_l4_sq#_pick
+ *
+ * This CSR contains the meta for the L4 SQ, and is for debug and reconfiguration
+ * only and should never be written. See also PKO_META_DESC_S.
+ */
+union cvmx_pko_l4_sqx_pick {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_pick_s {
+		u64 dq : 10;
+		u64 color : 2;
+		u64 child : 10;
+		u64 bubble : 1;
+		u64 p_con : 1;
+		u64 c_con : 1;
+		u64 uid : 7;
+		u64 jump : 1;
+		u64 fpd : 1;
+		u64 ds : 1;
+		u64 adjust : 9;
+		u64 pir_dis : 1;
+		u64 cir_dis : 1;
+		u64 red_algo_override : 2;
+		u64 length : 16;
+	} s;
+	struct cvmx_pko_l4_sqx_pick_s cn78xx;
+	struct cvmx_pko_l4_sqx_pick_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_pick cvmx_pko_l4_sqx_pick_t;
+
+/**
+ * cvmx_pko_l4_sq#_pir
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_CIR.
+ *
+ */
+union cvmx_pko_l4_sqx_pir {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_pir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_l4_sqx_pir_s cn78xx;
+	struct cvmx_pko_l4_sqx_pir_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_pir cvmx_pko_l4_sqx_pir_t;
+
+/**
+ * cvmx_pko_l4_sq#_pointers
+ */
+union cvmx_pko_l4_sqx_pointers {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_pointers_s {
+		u64 reserved_26_63 : 38;
+		u64 prev : 10;
+		u64 reserved_10_15 : 6;
+		u64 next : 10;
+	} s;
+	struct cvmx_pko_l4_sqx_pointers_s cn78xx;
+	struct cvmx_pko_l4_sqx_pointers_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_pointers cvmx_pko_l4_sqx_pointers_t;
+
+/**
+ * cvmx_pko_l4_sq#_red
+ *
+ * This register has the same bit fields as PKO_L3_SQ()_YELLOW.
+ *
+ */
+union cvmx_pko_l4_sqx_red {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_red_s {
+		u64 reserved_20_63 : 44;
+		u64 head : 10;
+		u64 tail : 10;
+	} s;
+	struct cvmx_pko_l4_sqx_red_s cn78xx;
+	struct cvmx_pko_l4_sqx_red_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_red cvmx_pko_l4_sqx_red_t;
+
+/**
+ * cvmx_pko_l4_sq#_sched_state
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SCHED_STATE.
+ *
+ */
+union cvmx_pko_l4_sqx_sched_state {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_sched_state_s {
+		u64 reserved_25_63 : 39;
+		u64 rr_count : 25;
+	} s;
+	struct cvmx_pko_l4_sqx_sched_state_s cn78xx;
+	struct cvmx_pko_l4_sqx_sched_state_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_sched_state cvmx_pko_l4_sqx_sched_state_t;
+
+/**
+ * cvmx_pko_l4_sq#_schedule
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SCHEDULE.
+ *
+ */
+union cvmx_pko_l4_sqx_schedule {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_schedule_s {
+		u64 reserved_28_63 : 36;
+		u64 prio : 4;
+		u64 rr_quantum : 24;
+	} s;
+	struct cvmx_pko_l4_sqx_schedule_s cn78xx;
+	struct cvmx_pko_l4_sqx_schedule_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_schedule cvmx_pko_l4_sqx_schedule_t;
+
+/**
+ * cvmx_pko_l4_sq#_shape
+ *
+ * This register has the same bit fields as PKO_L3_SQ()_SHAPE.
+ *
+ */
+union cvmx_pko_l4_sqx_shape {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_shape_s {
+		u64 reserved_25_63 : 39;
+		u64 length_disable : 1;
+		u64 reserved_13_23 : 11;
+		u64 yellow_disable : 1;
+		u64 red_disable : 1;
+		u64 red_algo : 2;
+		u64 adjust : 9;
+	} s;
+	struct cvmx_pko_l4_sqx_shape_s cn78xx;
+	struct cvmx_pko_l4_sqx_shape_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_shape cvmx_pko_l4_sqx_shape_t;
+
+/**
+ * cvmx_pko_l4_sq#_shape_state
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SHAPE_STATE.
+ * This register must not be written during normal operation.
+ */
+union cvmx_pko_l4_sqx_shape_state {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_shape_state_s {
+		u64 reserved_60_63 : 4;
+		u64 tw_timestamp : 6;
+		u64 color : 2;
+		u64 pir_accum : 26;
+		u64 cir_accum : 26;
+	} s;
+	struct cvmx_pko_l4_sqx_shape_state_s cn78xx;
+	struct cvmx_pko_l4_sqx_shape_state_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_shape_state cvmx_pko_l4_sqx_shape_state_t;
+
+/**
+ * cvmx_pko_l4_sq#_sw_xoff
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_SW_XOFF.
+ *
+ */
+union cvmx_pko_l4_sqx_sw_xoff {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_sw_xoff_s {
+		u64 reserved_4_63 : 60;
+		u64 drain_irq : 1;
+		u64 drain_null_link : 1;
+		u64 drain : 1;
+		u64 xoff : 1;
+	} s;
+	struct cvmx_pko_l4_sqx_sw_xoff_s cn78xx;
+	struct cvmx_pko_l4_sqx_sw_xoff_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_sw_xoff cvmx_pko_l4_sqx_sw_xoff_t;
+
+/**
+ * cvmx_pko_l4_sq#_topology
+ */
+union cvmx_pko_l4_sqx_topology {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_topology_s {
+		u64 reserved_42_63 : 22;
+		u64 prio_anchor : 10;
+		u64 reserved_25_31 : 7;
+		u64 parent : 9;
+		u64 reserved_5_15 : 11;
+		u64 rr_prio : 4;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_l4_sqx_topology_s cn78xx;
+	struct cvmx_pko_l4_sqx_topology_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_topology cvmx_pko_l4_sqx_topology_t;
+
+/**
+ * cvmx_pko_l4_sq#_yellow
+ *
+ * This register has the same bit fields as PKO_L3_SQ()_YELLOW.
+ *
+ */
+union cvmx_pko_l4_sqx_yellow {
+	u64 u64;
+	struct cvmx_pko_l4_sqx_yellow_s {
+		u64 reserved_20_63 : 44;
+		u64 head : 10;
+		u64 tail : 10;
+	} s;
+	struct cvmx_pko_l4_sqx_yellow_s cn78xx;
+	struct cvmx_pko_l4_sqx_yellow_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqx_yellow cvmx_pko_l4_sqx_yellow_t;
+
+/**
+ * cvmx_pko_l4_sq_csr_bus_debug
+ */
+union cvmx_pko_l4_sq_csr_bus_debug {
+	u64 u64;
+	struct cvmx_pko_l4_sq_csr_bus_debug_s {
+		u64 csr_bus_debug : 64;
+	} s;
+	struct cvmx_pko_l4_sq_csr_bus_debug_s cn78xx;
+	struct cvmx_pko_l4_sq_csr_bus_debug_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sq_csr_bus_debug cvmx_pko_l4_sq_csr_bus_debug_t;
+
+/**
+ * cvmx_pko_l4_sqa_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_l4_sqa_debug {
+	u64 u64;
+	struct cvmx_pko_l4_sqa_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_l4_sqa_debug_s cn78xx;
+	struct cvmx_pko_l4_sqa_debug_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqa_debug cvmx_pko_l4_sqa_debug_t;
+
+/**
+ * cvmx_pko_l4_sqb_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_l4_sqb_debug {
+	u64 u64;
+	struct cvmx_pko_l4_sqb_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_l4_sqb_debug_s cn78xx;
+	struct cvmx_pko_l4_sqb_debug_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l4_sqb_debug cvmx_pko_l4_sqb_debug_t;
+
+/**
+ * cvmx_pko_l5_sq#_cir
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_CIR.
+ *
+ */
+union cvmx_pko_l5_sqx_cir {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_cir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_l5_sqx_cir_s cn78xx;
+	struct cvmx_pko_l5_sqx_cir_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_cir cvmx_pko_l5_sqx_cir_t;
+
+/**
+ * cvmx_pko_l5_sq#_green
+ *
+ * This register has the same bit fields as PKO_L3_SQ()_GREEN.
+ *
+ */
+union cvmx_pko_l5_sqx_green {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_green_s {
+		u64 reserved_41_63 : 23;
+		u64 rr_active : 1;
+		u64 active_vec : 20;
+		u64 head : 10;
+		u64 tail : 10;
+	} s;
+	struct cvmx_pko_l5_sqx_green_s cn78xx;
+	struct cvmx_pko_l5_sqx_green_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_green cvmx_pko_l5_sqx_green_t;
+
+/**
+ * cvmx_pko_l5_sq#_pick
+ *
+ * This CSR contains the meta for the L5 SQ, and is for debug and reconfiguration
+ * only and should never be written. See also PKO_META_DESC_S.
+ */
+union cvmx_pko_l5_sqx_pick {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_pick_s {
+		u64 dq : 10;
+		u64 color : 2;
+		u64 child : 10;
+		u64 bubble : 1;
+		u64 p_con : 1;
+		u64 c_con : 1;
+		u64 uid : 7;
+		u64 jump : 1;
+		u64 fpd : 1;
+		u64 ds : 1;
+		u64 adjust : 9;
+		u64 pir_dis : 1;
+		u64 cir_dis : 1;
+		u64 red_algo_override : 2;
+		u64 length : 16;
+	} s;
+	struct cvmx_pko_l5_sqx_pick_s cn78xx;
+	struct cvmx_pko_l5_sqx_pick_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_pick cvmx_pko_l5_sqx_pick_t;
+
+/**
+ * cvmx_pko_l5_sq#_pir
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_CIR.
+ *
+ */
+union cvmx_pko_l5_sqx_pir {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_pir_s {
+		u64 reserved_41_63 : 23;
+		u64 burst_exponent : 4;
+		u64 burst_mantissa : 8;
+		u64 reserved_17_28 : 12;
+		u64 rate_divider_exponent : 4;
+		u64 rate_exponent : 4;
+		u64 rate_mantissa : 8;
+		u64 enable : 1;
+	} s;
+	struct cvmx_pko_l5_sqx_pir_s cn78xx;
+	struct cvmx_pko_l5_sqx_pir_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_pir cvmx_pko_l5_sqx_pir_t;
+
+/**
+ * cvmx_pko_l5_sq#_pointers
+ *
+ * This register has the same bit fields as PKO_L4_SQ()_POINTERS.
+ *
+ */
+union cvmx_pko_l5_sqx_pointers {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_pointers_s {
+		u64 reserved_26_63 : 38;
+		u64 prev : 10;
+		u64 reserved_10_15 : 6;
+		u64 next : 10;
+	} s;
+	struct cvmx_pko_l5_sqx_pointers_s cn78xx;
+	struct cvmx_pko_l5_sqx_pointers_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_pointers cvmx_pko_l5_sqx_pointers_t;
+
+/**
+ * cvmx_pko_l5_sq#_red
+ *
+ * This register has the same bit fields as PKO_L3_SQ()_YELLOW.
+ *
+ */
+union cvmx_pko_l5_sqx_red {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_red_s {
+		u64 reserved_20_63 : 44;
+		u64 head : 10;
+		u64 tail : 10;
+	} s;
+	struct cvmx_pko_l5_sqx_red_s cn78xx;
+	struct cvmx_pko_l5_sqx_red_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_red cvmx_pko_l5_sqx_red_t;
+
+/**
+ * cvmx_pko_l5_sq#_sched_state
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SCHED_STATE.
+ *
+ */
+union cvmx_pko_l5_sqx_sched_state {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_sched_state_s {
+		u64 reserved_25_63 : 39;
+		u64 rr_count : 25;
+	} s;
+	struct cvmx_pko_l5_sqx_sched_state_s cn78xx;
+	struct cvmx_pko_l5_sqx_sched_state_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_sched_state cvmx_pko_l5_sqx_sched_state_t;
+
+/**
+ * cvmx_pko_l5_sq#_schedule
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SCHEDULE.
+ *
+ */
+union cvmx_pko_l5_sqx_schedule {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_schedule_s {
+		u64 reserved_28_63 : 36;
+		u64 prio : 4;
+		u64 rr_quantum : 24;
+	} s;
+	struct cvmx_pko_l5_sqx_schedule_s cn78xx;
+	struct cvmx_pko_l5_sqx_schedule_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_schedule cvmx_pko_l5_sqx_schedule_t;
+
+/**
+ * cvmx_pko_l5_sq#_shape
+ */
+union cvmx_pko_l5_sqx_shape {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_shape_s {
+		u64 reserved_25_63 : 39;
+		u64 length_disable : 1;
+		u64 reserved_13_23 : 11;
+		u64 yellow_disable : 1;
+		u64 red_disable : 1;
+		u64 red_algo : 2;
+		u64 adjust : 9;
+	} s;
+	struct cvmx_pko_l5_sqx_shape_s cn78xx;
+	struct cvmx_pko_l5_sqx_shape_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_shape cvmx_pko_l5_sqx_shape_t;
+
+/**
+ * cvmx_pko_l5_sq#_shape_state
+ *
+ * This register has the same bit fields as PKO_L2_SQ()_SHAPE_STATE.
+ * This register must not be written during normal operation.
+ */
+union cvmx_pko_l5_sqx_shape_state {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_shape_state_s {
+		u64 reserved_60_63 : 4;
+		u64 tw_timestamp : 6;
+		u64 color : 2;
+		u64 pir_accum : 26;
+		u64 cir_accum : 26;
+	} s;
+	struct cvmx_pko_l5_sqx_shape_state_s cn78xx;
+	struct cvmx_pko_l5_sqx_shape_state_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_shape_state cvmx_pko_l5_sqx_shape_state_t;
+
+/**
+ * cvmx_pko_l5_sq#_sw_xoff
+ *
+ * This register has the same bit fields as PKO_L1_SQ()_SW_XOFF.
+ *
+ */
+union cvmx_pko_l5_sqx_sw_xoff {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_sw_xoff_s {
+		u64 reserved_4_63 : 60;
+		u64 drain_irq : 1;
+		u64 drain_null_link : 1;
+		u64 drain : 1;
+		u64 xoff : 1;
+	} s;
+	struct cvmx_pko_l5_sqx_sw_xoff_s cn78xx;
+	struct cvmx_pko_l5_sqx_sw_xoff_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_sw_xoff cvmx_pko_l5_sqx_sw_xoff_t;
+
+/**
+ * cvmx_pko_l5_sq#_topology
+ */
+union cvmx_pko_l5_sqx_topology {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_topology_s {
+		u64 reserved_42_63 : 22;
+		u64 prio_anchor : 10;
+		u64 reserved_26_31 : 6;
+		u64 parent : 10;
+		u64 reserved_5_15 : 11;
+		u64 rr_prio : 4;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_l5_sqx_topology_s cn78xx;
+	struct cvmx_pko_l5_sqx_topology_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_topology cvmx_pko_l5_sqx_topology_t;
+
+/**
+ * cvmx_pko_l5_sq#_yellow
+ *
+ * This register has the same bit fields as PKO_L3_SQ()_YELLOW.
+ *
+ */
+union cvmx_pko_l5_sqx_yellow {
+	u64 u64;
+	struct cvmx_pko_l5_sqx_yellow_s {
+		u64 reserved_20_63 : 44;
+		u64 head : 10;
+		u64 tail : 10;
+	} s;
+	struct cvmx_pko_l5_sqx_yellow_s cn78xx;
+	struct cvmx_pko_l5_sqx_yellow_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqx_yellow cvmx_pko_l5_sqx_yellow_t;
+
+/**
+ * cvmx_pko_l5_sq_csr_bus_debug
+ */
+union cvmx_pko_l5_sq_csr_bus_debug {
+	u64 u64;
+	struct cvmx_pko_l5_sq_csr_bus_debug_s {
+		u64 csr_bus_debug : 64;
+	} s;
+	struct cvmx_pko_l5_sq_csr_bus_debug_s cn78xx;
+	struct cvmx_pko_l5_sq_csr_bus_debug_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sq_csr_bus_debug cvmx_pko_l5_sq_csr_bus_debug_t;
+
+/**
+ * cvmx_pko_l5_sqa_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_l5_sqa_debug {
+	u64 u64;
+	struct cvmx_pko_l5_sqa_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_l5_sqa_debug_s cn78xx;
+	struct cvmx_pko_l5_sqa_debug_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqa_debug cvmx_pko_l5_sqa_debug_t;
+
+/**
+ * cvmx_pko_l5_sqb_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_l5_sqb_debug {
+	u64 u64;
+	struct cvmx_pko_l5_sqb_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_l5_sqb_debug_s cn78xx;
+	struct cvmx_pko_l5_sqb_debug_s cn78xxp1;
+};
+
+typedef union cvmx_pko_l5_sqb_debug cvmx_pko_l5_sqb_debug_t;
+
+/**
+ * cvmx_pko_lut#
+ *
+ * PKO_LUT has a location for each used PKI_CHAN_E. The following table
+ * shows the mapping between LINK/MAC_NUM's, PKI_CHAN_E channels, and
+ * PKO_LUT indices.
+ *
+ * <pre>
+ *   LINK/   PKI_CHAN_E    Corresponding
+ * MAC_NUM   Range         PKO_LUT index   Description
+ * -------   -----------   -------------   -----------------
+ *     0     0x000-0x03F   0x040-0x07F     LBK Loopback
+ *     1     0x100-0x13F   0x080-0x0BF     DPI packet output
+ *     2     0x800-0x80F   0x000-0x00F     BGX0 Logical MAC 0
+ *     3     0x810-0x81F   0x010-0x01F     BGX0 Logical MAC 1
+ *     4     0x820-0x82F   0x020-0x02F     BGX0 Logical MAC 2
+ *     5     0x830-0x83F   0x030-0x03F     BGX0 Logical MAC 3
+ * </pre>
+ */
+union cvmx_pko_lutx {
+	u64 u64;
+	struct cvmx_pko_lutx_s {
+		u64 reserved_16_63 : 48;
+		u64 valid : 1;
+		u64 reserved_14_14 : 1;
+		u64 pq_idx : 5;
+		u64 queue_number : 9;
+	} s;
+	struct cvmx_pko_lutx_cn73xx {
+		u64 reserved_16_63 : 48;
+		u64 valid : 1;
+		u64 reserved_13_14 : 2;
+		u64 pq_idx : 4;
+		u64 reserved_8_8 : 1;
+		u64 queue_number : 8;
+	} cn73xx;
+	struct cvmx_pko_lutx_s cn78xx;
+	struct cvmx_pko_lutx_s cn78xxp1;
+	struct cvmx_pko_lutx_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_lutx cvmx_pko_lutx_t;
+
+/**
+ * cvmx_pko_lut_bist_status
+ */
+union cvmx_pko_lut_bist_status {
+	u64 u64;
+	struct cvmx_pko_lut_bist_status_s {
+		u64 reserved_1_63 : 63;
+		u64 bist_status : 1;
+	} s;
+	struct cvmx_pko_lut_bist_status_s cn73xx;
+	struct cvmx_pko_lut_bist_status_s cn78xx;
+	struct cvmx_pko_lut_bist_status_s cn78xxp1;
+	struct cvmx_pko_lut_bist_status_s cnf75xx;
+};
+
+typedef union cvmx_pko_lut_bist_status cvmx_pko_lut_bist_status_t;
+
+/**
+ * cvmx_pko_lut_ecc_ctl0
+ */
+union cvmx_pko_lut_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_lut_ecc_ctl0_s {
+		u64 c2q_lut_ram_flip : 2;
+		u64 c2q_lut_ram_cdis : 1;
+		u64 reserved_0_60 : 61;
+	} s;
+	struct cvmx_pko_lut_ecc_ctl0_s cn73xx;
+	struct cvmx_pko_lut_ecc_ctl0_s cn78xx;
+	struct cvmx_pko_lut_ecc_ctl0_s cn78xxp1;
+	struct cvmx_pko_lut_ecc_ctl0_s cnf75xx;
+};
+
+typedef union cvmx_pko_lut_ecc_ctl0 cvmx_pko_lut_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_lut_ecc_dbe_sts0
+ */
+union cvmx_pko_lut_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_lut_ecc_dbe_sts0_s {
+		u64 c2q_lut_ram_dbe : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_lut_ecc_dbe_sts0_s cn73xx;
+	struct cvmx_pko_lut_ecc_dbe_sts0_s cn78xx;
+	struct cvmx_pko_lut_ecc_dbe_sts0_s cn78xxp1;
+	struct cvmx_pko_lut_ecc_dbe_sts0_s cnf75xx;
+};
+
+typedef union cvmx_pko_lut_ecc_dbe_sts0 cvmx_pko_lut_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_lut_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_lut_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_lut_ecc_dbe_sts_cmb0_s {
+		u64 lut_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_lut_ecc_dbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_lut_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_lut_ecc_dbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_lut_ecc_dbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_lut_ecc_dbe_sts_cmb0 cvmx_pko_lut_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_lut_ecc_sbe_sts0
+ */
+union cvmx_pko_lut_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_lut_ecc_sbe_sts0_s {
+		u64 c2q_lut_ram_sbe : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_lut_ecc_sbe_sts0_s cn73xx;
+	struct cvmx_pko_lut_ecc_sbe_sts0_s cn78xx;
+	struct cvmx_pko_lut_ecc_sbe_sts0_s cn78xxp1;
+	struct cvmx_pko_lut_ecc_sbe_sts0_s cnf75xx;
+};
+
+typedef union cvmx_pko_lut_ecc_sbe_sts0 cvmx_pko_lut_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_lut_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_lut_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_lut_ecc_sbe_sts_cmb0_s {
+		u64 lut_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_lut_ecc_sbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_lut_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_lut_ecc_sbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_lut_ecc_sbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_lut_ecc_sbe_sts_cmb0 cvmx_pko_lut_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_mac#_cfg
+ *
+ * These registers create the links between the MACs and the TxFIFO used to store the data,
+ * and hold the per-MAC configuration bits.  These registers must be disabled (FIFO_NUM set
+ * to 31) prior to reconfiguration of any of the other bits.
+ *
+ * <pre>
+ *   CSR Name       Associated MAC
+ *   ------------   -------------------
+ *   PKO_MAC0_CFG   LBK loopback
+ *   PKO_MAC1_CFG   DPI packet output
+ *   PKO_MAC2_CFG   BGX0  logical MAC 0
+ *   PKO_MAC3_CFG   BGX0  logical MAC 1
+ *   PKO_MAC4_CFG   BGX0  logical MAC 2
+ *   PKO_MAC5_CFG   BGX0  logical MAC 3
+ *   PKO_MAC6_CFG   SRIO0 logical MAC 0
+ *   PKO_MAC7_CFG   SRIO0 logical MAC 1
+ *   PKO_MAC8_CFG   SRIO1 logical MAC 0
+ *   PKO_MAC9_CFG   SRIO1 logical MAC 1
+ * </pre>
+ */
+union cvmx_pko_macx_cfg {
+	u64 u64;
+	struct cvmx_pko_macx_cfg_s {
+		u64 reserved_17_63 : 47;
+		u64 min_pad_ena : 1;
+		u64 fcs_ena : 1;
+		u64 fcs_sop_off : 8;
+		u64 skid_max_cnt : 2;
+		u64 fifo_num : 5;
+	} s;
+	struct cvmx_pko_macx_cfg_s cn73xx;
+	struct cvmx_pko_macx_cfg_s cn78xx;
+	struct cvmx_pko_macx_cfg_s cn78xxp1;
+	struct cvmx_pko_macx_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pko_macx_cfg cvmx_pko_macx_cfg_t;
+
+/**
+ * cvmx_pko_mci0_cred_cnt#
+ */
+union cvmx_pko_mci0_cred_cntx {
+	u64 u64;
+	struct cvmx_pko_mci0_cred_cntx_s {
+		u64 reserved_13_63 : 51;
+		u64 cred_cnt : 13;
+	} s;
+	struct cvmx_pko_mci0_cred_cntx_s cn78xx;
+	struct cvmx_pko_mci0_cred_cntx_s cn78xxp1;
+};
+
+typedef union cvmx_pko_mci0_cred_cntx cvmx_pko_mci0_cred_cntx_t;
+
+/**
+ * cvmx_pko_mci0_max_cred#
+ */
+union cvmx_pko_mci0_max_credx {
+	u64 u64;
+	struct cvmx_pko_mci0_max_credx_s {
+		u64 reserved_12_63 : 52;
+		u64 max_cred_lim : 12;
+	} s;
+	struct cvmx_pko_mci0_max_credx_s cn78xx;
+	struct cvmx_pko_mci0_max_credx_s cn78xxp1;
+};
+
+typedef union cvmx_pko_mci0_max_credx cvmx_pko_mci0_max_credx_t;
+
+/**
+ * cvmx_pko_mci1_cred_cnt#
+ */
+union cvmx_pko_mci1_cred_cntx {
+	u64 u64;
+	struct cvmx_pko_mci1_cred_cntx_s {
+		u64 reserved_13_63 : 51;
+		u64 cred_cnt : 13;
+	} s;
+	struct cvmx_pko_mci1_cred_cntx_s cn73xx;
+	struct cvmx_pko_mci1_cred_cntx_s cn78xx;
+	struct cvmx_pko_mci1_cred_cntx_s cn78xxp1;
+	struct cvmx_pko_mci1_cred_cntx_s cnf75xx;
+};
+
+typedef union cvmx_pko_mci1_cred_cntx cvmx_pko_mci1_cred_cntx_t;
+
+/**
+ * cvmx_pko_mci1_max_cred#
+ */
+union cvmx_pko_mci1_max_credx {
+	u64 u64;
+	struct cvmx_pko_mci1_max_credx_s {
+		u64 reserved_12_63 : 52;
+		u64 max_cred_lim : 12;
+	} s;
+	struct cvmx_pko_mci1_max_credx_s cn73xx;
+	struct cvmx_pko_mci1_max_credx_s cn78xx;
+	struct cvmx_pko_mci1_max_credx_s cn78xxp1;
+	struct cvmx_pko_mci1_max_credx_s cnf75xx;
+};
+
+typedef union cvmx_pko_mci1_max_credx cvmx_pko_mci1_max_credx_t;
+
+/**
+ * cvmx_pko_mem_count0
+ *
+ * Notes:
+ * Total number of packets seen by PKO, per port
+ * A write to this address will clear the entry whose index is specified as COUNT[5:0].
+ * This CSR is a memory of 44 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  A read of any entry that has not been
+ * previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_count0 {
+	u64 u64;
+	struct cvmx_pko_mem_count0_s {
+		u64 reserved_32_63 : 32;
+		u64 count : 32;
+	} s;
+	struct cvmx_pko_mem_count0_s cn30xx;
+	struct cvmx_pko_mem_count0_s cn31xx;
+	struct cvmx_pko_mem_count0_s cn38xx;
+	struct cvmx_pko_mem_count0_s cn38xxp2;
+	struct cvmx_pko_mem_count0_s cn50xx;
+	struct cvmx_pko_mem_count0_s cn52xx;
+	struct cvmx_pko_mem_count0_s cn52xxp1;
+	struct cvmx_pko_mem_count0_s cn56xx;
+	struct cvmx_pko_mem_count0_s cn56xxp1;
+	struct cvmx_pko_mem_count0_s cn58xx;
+	struct cvmx_pko_mem_count0_s cn58xxp1;
+	struct cvmx_pko_mem_count0_s cn61xx;
+	struct cvmx_pko_mem_count0_s cn63xx;
+	struct cvmx_pko_mem_count0_s cn63xxp1;
+	struct cvmx_pko_mem_count0_s cn66xx;
+	struct cvmx_pko_mem_count0_s cn68xx;
+	struct cvmx_pko_mem_count0_s cn68xxp1;
+	struct cvmx_pko_mem_count0_s cn70xx;
+	struct cvmx_pko_mem_count0_s cn70xxp1;
+	struct cvmx_pko_mem_count0_s cnf71xx;
+};
+
+typedef union cvmx_pko_mem_count0 cvmx_pko_mem_count0_t;
+
+/**
+ * cvmx_pko_mem_count1
+ *
+ * Notes:
+ * Total number of bytes seen by PKO, per port
+ * A write to this address will clear the entry whose index is specified as COUNT[5:0].
+ * This CSR is a memory of 44 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  A read of any entry that has not been
+ * previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_count1 {
+	u64 u64;
+	struct cvmx_pko_mem_count1_s {
+		u64 reserved_48_63 : 16;
+		u64 count : 48;
+	} s;
+	struct cvmx_pko_mem_count1_s cn30xx;
+	struct cvmx_pko_mem_count1_s cn31xx;
+	struct cvmx_pko_mem_count1_s cn38xx;
+	struct cvmx_pko_mem_count1_s cn38xxp2;
+	struct cvmx_pko_mem_count1_s cn50xx;
+	struct cvmx_pko_mem_count1_s cn52xx;
+	struct cvmx_pko_mem_count1_s cn52xxp1;
+	struct cvmx_pko_mem_count1_s cn56xx;
+	struct cvmx_pko_mem_count1_s cn56xxp1;
+	struct cvmx_pko_mem_count1_s cn58xx;
+	struct cvmx_pko_mem_count1_s cn58xxp1;
+	struct cvmx_pko_mem_count1_s cn61xx;
+	struct cvmx_pko_mem_count1_s cn63xx;
+	struct cvmx_pko_mem_count1_s cn63xxp1;
+	struct cvmx_pko_mem_count1_s cn66xx;
+	struct cvmx_pko_mem_count1_s cn68xx;
+	struct cvmx_pko_mem_count1_s cn68xxp1;
+	struct cvmx_pko_mem_count1_s cn70xx;
+	struct cvmx_pko_mem_count1_s cn70xxp1;
+	struct cvmx_pko_mem_count1_s cnf71xx;
+};
+
+typedef union cvmx_pko_mem_count1 cvmx_pko_mem_count1_t;
+
+/**
+ * cvmx_pko_mem_debug0
+ *
+ * Notes:
+ * Internal per-port state intended for debug use only - pko_prt_psb.cmnd[63:0]
+ * This CSR is a memory of 12 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug0 {
+	u64 u64;
+	struct cvmx_pko_mem_debug0_s {
+		u64 fau : 28;
+		u64 cmd : 14;
+		u64 segs : 6;
+		u64 size : 16;
+	} s;
+	struct cvmx_pko_mem_debug0_s cn30xx;
+	struct cvmx_pko_mem_debug0_s cn31xx;
+	struct cvmx_pko_mem_debug0_s cn38xx;
+	struct cvmx_pko_mem_debug0_s cn38xxp2;
+	struct cvmx_pko_mem_debug0_s cn50xx;
+	struct cvmx_pko_mem_debug0_s cn52xx;
+	struct cvmx_pko_mem_debug0_s cn52xxp1;
+	struct cvmx_pko_mem_debug0_s cn56xx;
+	struct cvmx_pko_mem_debug0_s cn56xxp1;
+	struct cvmx_pko_mem_debug0_s cn58xx;
+	struct cvmx_pko_mem_debug0_s cn58xxp1;
+	struct cvmx_pko_mem_debug0_s cn61xx;
+	struct cvmx_pko_mem_debug0_s cn63xx;
+	struct cvmx_pko_mem_debug0_s cn63xxp1;
+	struct cvmx_pko_mem_debug0_s cn66xx;
+	struct cvmx_pko_mem_debug0_s cn68xx;
+	struct cvmx_pko_mem_debug0_s cn68xxp1;
+	struct cvmx_pko_mem_debug0_s cn70xx;
+	struct cvmx_pko_mem_debug0_s cn70xxp1;
+	struct cvmx_pko_mem_debug0_s cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug0 cvmx_pko_mem_debug0_t;
+
+/**
+ * cvmx_pko_mem_debug1
+ *
+ * Notes:
+ * Internal per-port state intended for debug use only - pko_prt_psb.curr[63:0]
+ * This CSR is a memory of 12 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug1 {
+	u64 u64;
+	struct cvmx_pko_mem_debug1_s {
+		u64 i : 1;
+		u64 back : 4;
+		u64 pool : 3;
+		u64 size : 16;
+		u64 ptr : 40;
+	} s;
+	struct cvmx_pko_mem_debug1_s cn30xx;
+	struct cvmx_pko_mem_debug1_s cn31xx;
+	struct cvmx_pko_mem_debug1_s cn38xx;
+	struct cvmx_pko_mem_debug1_s cn38xxp2;
+	struct cvmx_pko_mem_debug1_s cn50xx;
+	struct cvmx_pko_mem_debug1_s cn52xx;
+	struct cvmx_pko_mem_debug1_s cn52xxp1;
+	struct cvmx_pko_mem_debug1_s cn56xx;
+	struct cvmx_pko_mem_debug1_s cn56xxp1;
+	struct cvmx_pko_mem_debug1_s cn58xx;
+	struct cvmx_pko_mem_debug1_s cn58xxp1;
+	struct cvmx_pko_mem_debug1_s cn61xx;
+	struct cvmx_pko_mem_debug1_s cn63xx;
+	struct cvmx_pko_mem_debug1_s cn63xxp1;
+	struct cvmx_pko_mem_debug1_s cn66xx;
+	struct cvmx_pko_mem_debug1_s cn68xx;
+	struct cvmx_pko_mem_debug1_s cn68xxp1;
+	struct cvmx_pko_mem_debug1_s cn70xx;
+	struct cvmx_pko_mem_debug1_s cn70xxp1;
+	struct cvmx_pko_mem_debug1_s cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug1 cvmx_pko_mem_debug1_t;
+
+/**
+ * cvmx_pko_mem_debug10
+ *
+ * Notes:
+ * Internal per-engine state intended for debug use only - pko.dat.ptr.ptrs1, pko.dat.ptr.ptrs2
+ * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug10 {
+	u64 u64;
+	struct cvmx_pko_mem_debug10_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pko_mem_debug10_cn30xx {
+		u64 fau : 28;
+		u64 cmd : 14;
+		u64 segs : 6;
+		u64 size : 16;
+	} cn30xx;
+	struct cvmx_pko_mem_debug10_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug10_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug10_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug10_cn50xx {
+		u64 reserved_49_63 : 15;
+		u64 ptrs1 : 17;
+		u64 reserved_17_31 : 15;
+		u64 ptrs2 : 17;
+	} cn50xx;
+	struct cvmx_pko_mem_debug10_cn50xx cn52xx;
+	struct cvmx_pko_mem_debug10_cn50xx cn52xxp1;
+	struct cvmx_pko_mem_debug10_cn50xx cn56xx;
+	struct cvmx_pko_mem_debug10_cn50xx cn56xxp1;
+	struct cvmx_pko_mem_debug10_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug10_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug10_cn50xx cn61xx;
+	struct cvmx_pko_mem_debug10_cn50xx cn63xx;
+	struct cvmx_pko_mem_debug10_cn50xx cn63xxp1;
+	struct cvmx_pko_mem_debug10_cn50xx cn66xx;
+	struct cvmx_pko_mem_debug10_cn50xx cn68xx;
+	struct cvmx_pko_mem_debug10_cn50xx cn68xxp1;
+	struct cvmx_pko_mem_debug10_cn50xx cn70xx;
+	struct cvmx_pko_mem_debug10_cn50xx cn70xxp1;
+	struct cvmx_pko_mem_debug10_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug10 cvmx_pko_mem_debug10_t;
+
+/**
+ * cvmx_pko_mem_debug11
+ *
+ * Notes:
+ * Internal per-engine state intended for debug use only - pko.out.sta.state[22:0]
+ * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug11 {
+	u64 u64;
+	struct cvmx_pko_mem_debug11_s {
+		u64 i : 1;
+		u64 back : 4;
+		u64 pool : 3;
+		u64 size : 16;
+		u64 reserved_0_39 : 40;
+	} s;
+	struct cvmx_pko_mem_debug11_cn30xx {
+		u64 i : 1;
+		u64 back : 4;
+		u64 pool : 3;
+		u64 size : 16;
+		u64 ptr : 40;
+	} cn30xx;
+	struct cvmx_pko_mem_debug11_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug11_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug11_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug11_cn50xx {
+		u64 reserved_23_63 : 41;
+		u64 maj : 1;
+		u64 uid : 3;
+		u64 sop : 1;
+		u64 len : 1;
+		u64 chk : 1;
+		u64 cnt : 13;
+		u64 mod : 3;
+	} cn50xx;
+	struct cvmx_pko_mem_debug11_cn50xx cn52xx;
+	struct cvmx_pko_mem_debug11_cn50xx cn52xxp1;
+	struct cvmx_pko_mem_debug11_cn50xx cn56xx;
+	struct cvmx_pko_mem_debug11_cn50xx cn56xxp1;
+	struct cvmx_pko_mem_debug11_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug11_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug11_cn50xx cn61xx;
+	struct cvmx_pko_mem_debug11_cn50xx cn63xx;
+	struct cvmx_pko_mem_debug11_cn50xx cn63xxp1;
+	struct cvmx_pko_mem_debug11_cn50xx cn66xx;
+	struct cvmx_pko_mem_debug11_cn50xx cn68xx;
+	struct cvmx_pko_mem_debug11_cn50xx cn68xxp1;
+	struct cvmx_pko_mem_debug11_cn50xx cn70xx;
+	struct cvmx_pko_mem_debug11_cn50xx cn70xxp1;
+	struct cvmx_pko_mem_debug11_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug11 cvmx_pko_mem_debug11_t;
+
+/**
+ * cvmx_pko_mem_debug12
+ *
+ * Notes:
+ * Internal per-engine x4 state intended for debug use only - pko.out.ctl.cmnd[63:0]
+ * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug12 {
+	u64 u64;
+	struct cvmx_pko_mem_debug12_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pko_mem_debug12_cn30xx {
+		u64 data : 64;
+	} cn30xx;
+	struct cvmx_pko_mem_debug12_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug12_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug12_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug12_cn50xx {
+		u64 fau : 28;
+		u64 cmd : 14;
+		u64 segs : 6;
+		u64 size : 16;
+	} cn50xx;
+	struct cvmx_pko_mem_debug12_cn50xx cn52xx;
+	struct cvmx_pko_mem_debug12_cn50xx cn52xxp1;
+	struct cvmx_pko_mem_debug12_cn50xx cn56xx;
+	struct cvmx_pko_mem_debug12_cn50xx cn56xxp1;
+	struct cvmx_pko_mem_debug12_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug12_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug12_cn50xx cn61xx;
+	struct cvmx_pko_mem_debug12_cn50xx cn63xx;
+	struct cvmx_pko_mem_debug12_cn50xx cn63xxp1;
+	struct cvmx_pko_mem_debug12_cn50xx cn66xx;
+	struct cvmx_pko_mem_debug12_cn68xx {
+		u64 state : 64;
+	} cn68xx;
+	struct cvmx_pko_mem_debug12_cn68xx cn68xxp1;
+	struct cvmx_pko_mem_debug12_cn50xx cn70xx;
+	struct cvmx_pko_mem_debug12_cn50xx cn70xxp1;
+	struct cvmx_pko_mem_debug12_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug12 cvmx_pko_mem_debug12_t;
+
+/**
+ * cvmx_pko_mem_debug13
+ *
+ * Notes:
+ * Internal per-engine x4 state intended for debug use only - pko.out.ctl.head[63:0]
+ * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug13 {
+	u64 u64;
+	struct cvmx_pko_mem_debug13_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pko_mem_debug13_cn30xx {
+		u64 reserved_51_63 : 13;
+		u64 widx : 17;
+		u64 ridx2 : 17;
+		u64 widx2 : 17;
+	} cn30xx;
+	struct cvmx_pko_mem_debug13_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug13_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug13_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug13_cn50xx {
+		u64 i : 1;
+		u64 back : 4;
+		u64 pool : 3;
+		u64 size : 16;
+		u64 ptr : 40;
+	} cn50xx;
+	struct cvmx_pko_mem_debug13_cn50xx cn52xx;
+	struct cvmx_pko_mem_debug13_cn50xx cn52xxp1;
+	struct cvmx_pko_mem_debug13_cn50xx cn56xx;
+	struct cvmx_pko_mem_debug13_cn50xx cn56xxp1;
+	struct cvmx_pko_mem_debug13_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug13_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug13_cn50xx cn61xx;
+	struct cvmx_pko_mem_debug13_cn50xx cn63xx;
+	struct cvmx_pko_mem_debug13_cn50xx cn63xxp1;
+	struct cvmx_pko_mem_debug13_cn50xx cn66xx;
+	struct cvmx_pko_mem_debug13_cn68xx {
+		u64 state : 64;
+	} cn68xx;
+	struct cvmx_pko_mem_debug13_cn68xx cn68xxp1;
+	struct cvmx_pko_mem_debug13_cn50xx cn70xx;
+	struct cvmx_pko_mem_debug13_cn50xx cn70xxp1;
+	struct cvmx_pko_mem_debug13_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug13 cvmx_pko_mem_debug13_t;
+
+/**
+ * cvmx_pko_mem_debug14
+ *
+ * Notes:
+ * Internal per-port state intended for debug use only - pko.prt.psb.save[63:0]
+ * This CSR is a memory of 132 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug14 {
+	u64 u64;
+	struct cvmx_pko_mem_debug14_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pko_mem_debug14_cn30xx {
+		u64 reserved_17_63 : 47;
+		u64 ridx : 17;
+	} cn30xx;
+	struct cvmx_pko_mem_debug14_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug14_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug14_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug14_cn52xx {
+		u64 data : 64;
+	} cn52xx;
+	struct cvmx_pko_mem_debug14_cn52xx cn52xxp1;
+	struct cvmx_pko_mem_debug14_cn52xx cn56xx;
+	struct cvmx_pko_mem_debug14_cn52xx cn56xxp1;
+	struct cvmx_pko_mem_debug14_cn52xx cn61xx;
+	struct cvmx_pko_mem_debug14_cn52xx cn63xx;
+	struct cvmx_pko_mem_debug14_cn52xx cn63xxp1;
+	struct cvmx_pko_mem_debug14_cn52xx cn66xx;
+	struct cvmx_pko_mem_debug14_cn52xx cn70xx;
+	struct cvmx_pko_mem_debug14_cn52xx cn70xxp1;
+	struct cvmx_pko_mem_debug14_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug14 cvmx_pko_mem_debug14_t;
+
+/**
+ * cvmx_pko_mem_debug2
+ *
+ * Notes:
+ * Internal per-port state intended for debug use only - pko_prt_psb.head[63:0]
+ * This CSR is a memory of 12 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug2 {
+	u64 u64;
+	struct cvmx_pko_mem_debug2_s {
+		u64 i : 1;
+		u64 back : 4;
+		u64 pool : 3;
+		u64 size : 16;
+		u64 ptr : 40;
+	} s;
+	struct cvmx_pko_mem_debug2_s cn30xx;
+	struct cvmx_pko_mem_debug2_s cn31xx;
+	struct cvmx_pko_mem_debug2_s cn38xx;
+	struct cvmx_pko_mem_debug2_s cn38xxp2;
+	struct cvmx_pko_mem_debug2_s cn50xx;
+	struct cvmx_pko_mem_debug2_s cn52xx;
+	struct cvmx_pko_mem_debug2_s cn52xxp1;
+	struct cvmx_pko_mem_debug2_s cn56xx;
+	struct cvmx_pko_mem_debug2_s cn56xxp1;
+	struct cvmx_pko_mem_debug2_s cn58xx;
+	struct cvmx_pko_mem_debug2_s cn58xxp1;
+	struct cvmx_pko_mem_debug2_s cn61xx;
+	struct cvmx_pko_mem_debug2_s cn63xx;
+	struct cvmx_pko_mem_debug2_s cn63xxp1;
+	struct cvmx_pko_mem_debug2_s cn66xx;
+	struct cvmx_pko_mem_debug2_s cn68xx;
+	struct cvmx_pko_mem_debug2_s cn68xxp1;
+	struct cvmx_pko_mem_debug2_s cn70xx;
+	struct cvmx_pko_mem_debug2_s cn70xxp1;
+	struct cvmx_pko_mem_debug2_s cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug2 cvmx_pko_mem_debug2_t;
+
+/**
+ * cvmx_pko_mem_debug3
+ *
+ * Notes:
+ * Internal per-port state intended for debug use only - pko_prt_psb.resp[63:0]
+ * This CSR is a memory of 12 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug3 {
+	u64 u64;
+	struct cvmx_pko_mem_debug3_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pko_mem_debug3_cn30xx {
+		u64 i : 1;
+		u64 back : 4;
+		u64 pool : 3;
+		u64 size : 16;
+		u64 ptr : 40;
+	} cn30xx;
+	struct cvmx_pko_mem_debug3_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug3_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug3_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug3_cn50xx {
+		u64 data : 64;
+	} cn50xx;
+	struct cvmx_pko_mem_debug3_cn50xx cn52xx;
+	struct cvmx_pko_mem_debug3_cn50xx cn52xxp1;
+	struct cvmx_pko_mem_debug3_cn50xx cn56xx;
+	struct cvmx_pko_mem_debug3_cn50xx cn56xxp1;
+	struct cvmx_pko_mem_debug3_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug3_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug3_cn50xx cn61xx;
+	struct cvmx_pko_mem_debug3_cn50xx cn63xx;
+	struct cvmx_pko_mem_debug3_cn50xx cn63xxp1;
+	struct cvmx_pko_mem_debug3_cn50xx cn66xx;
+	struct cvmx_pko_mem_debug3_cn50xx cn68xx;
+	struct cvmx_pko_mem_debug3_cn50xx cn68xxp1;
+	struct cvmx_pko_mem_debug3_cn50xx cn70xx;
+	struct cvmx_pko_mem_debug3_cn50xx cn70xxp1;
+	struct cvmx_pko_mem_debug3_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug3 cvmx_pko_mem_debug3_t;
+
+/**
+ * cvmx_pko_mem_debug4
+ *
+ * Notes:
+ * Internal per-port state intended for debug use only - pko_prt_psb.state[63:0]
+ * This CSR is a memory of 12 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug4 {
+	u64 u64;
+	struct cvmx_pko_mem_debug4_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pko_mem_debug4_cn30xx {
+		u64 data : 64;
+	} cn30xx;
+	struct cvmx_pko_mem_debug4_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug4_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug4_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug4_cn50xx {
+		u64 cmnd_segs : 3;
+		u64 cmnd_siz : 16;
+		u64 cmnd_off : 6;
+		u64 uid : 3;
+		u64 dread_sop : 1;
+		u64 init_dwrite : 1;
+		u64 chk_once : 1;
+		u64 chk_mode : 1;
+		u64 active : 1;
+		u64 static_p : 1;
+		u64 qos : 3;
+		u64 qcb_ridx : 5;
+		u64 qid_off_max : 4;
+		u64 qid_off : 4;
+		u64 qid_base : 8;
+		u64 wait : 1;
+		u64 minor : 2;
+		u64 major : 3;
+	} cn50xx;
+	struct cvmx_pko_mem_debug4_cn52xx {
+		u64 curr_siz : 8;
+		u64 curr_off : 16;
+		u64 cmnd_segs : 6;
+		u64 cmnd_siz : 16;
+		u64 cmnd_off : 6;
+		u64 uid : 2;
+		u64 dread_sop : 1;
+		u64 init_dwrite : 1;
+		u64 chk_once : 1;
+		u64 chk_mode : 1;
+		u64 wait : 1;
+		u64 minor : 2;
+		u64 major : 3;
+	} cn52xx;
+	struct cvmx_pko_mem_debug4_cn52xx cn52xxp1;
+	struct cvmx_pko_mem_debug4_cn52xx cn56xx;
+	struct cvmx_pko_mem_debug4_cn52xx cn56xxp1;
+	struct cvmx_pko_mem_debug4_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug4_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug4_cn52xx cn61xx;
+	struct cvmx_pko_mem_debug4_cn52xx cn63xx;
+	struct cvmx_pko_mem_debug4_cn52xx cn63xxp1;
+	struct cvmx_pko_mem_debug4_cn52xx cn66xx;
+	struct cvmx_pko_mem_debug4_cn68xx {
+		u64 curr_siz : 9;
+		u64 curr_off : 16;
+		u64 cmnd_segs : 6;
+		u64 cmnd_siz : 16;
+		u64 cmnd_off : 6;
+		u64 dread_sop : 1;
+		u64 init_dwrite : 1;
+		u64 chk_once : 1;
+		u64 chk_mode : 1;
+		u64 reserved_6_6 : 1;
+		u64 minor : 2;
+		u64 major : 4;
+	} cn68xx;
+	struct cvmx_pko_mem_debug4_cn68xx cn68xxp1;
+	struct cvmx_pko_mem_debug4_cn52xx cn70xx;
+	struct cvmx_pko_mem_debug4_cn52xx cn70xxp1;
+	struct cvmx_pko_mem_debug4_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug4 cvmx_pko_mem_debug4_t;
+
+/**
+ * cvmx_pko_mem_debug5
+ *
+ * Notes:
+ * Internal per-port state intended for debug use only - pko_prt_psb.state[127:64]
+ * This CSR is a memory of 12 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug5 {
+	u64 u64;
+	struct cvmx_pko_mem_debug5_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pko_mem_debug5_cn30xx {
+		u64 dwri_mod : 1;
+		u64 dwri_sop : 1;
+		u64 dwri_len : 1;
+		u64 dwri_cnt : 13;
+		u64 cmnd_siz : 16;
+		u64 uid : 1;
+		u64 xfer_wor : 1;
+		u64 xfer_dwr : 1;
+		u64 cbuf_fre : 1;
+		u64 reserved_27_27 : 1;
+		u64 chk_mode : 1;
+		u64 active : 1;
+		u64 qos : 3;
+		u64 qcb_ridx : 5;
+		u64 qid_off : 3;
+		u64 qid_base : 7;
+		u64 wait : 1;
+		u64 minor : 2;
+		u64 major : 4;
+	} cn30xx;
+	struct cvmx_pko_mem_debug5_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug5_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug5_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug5_cn50xx {
+		u64 curr_ptr : 29;
+		u64 curr_siz : 16;
+		u64 curr_off : 16;
+		u64 cmnd_segs : 3;
+	} cn50xx;
+	struct cvmx_pko_mem_debug5_cn52xx {
+		u64 reserved_54_63 : 10;
+		u64 nxt_inflt : 6;
+		u64 curr_ptr : 40;
+		u64 curr_siz : 8;
+	} cn52xx;
+	struct cvmx_pko_mem_debug5_cn52xx cn52xxp1;
+	struct cvmx_pko_mem_debug5_cn52xx cn56xx;
+	struct cvmx_pko_mem_debug5_cn52xx cn56xxp1;
+	struct cvmx_pko_mem_debug5_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug5_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug5_cn61xx {
+		u64 reserved_56_63 : 8;
+		u64 ptp : 1;
+		u64 major_3 : 1;
+		u64 nxt_inflt : 6;
+		u64 curr_ptr : 40;
+		u64 curr_siz : 8;
+	} cn61xx;
+	struct cvmx_pko_mem_debug5_cn61xx cn63xx;
+	struct cvmx_pko_mem_debug5_cn61xx cn63xxp1;
+	struct cvmx_pko_mem_debug5_cn61xx cn66xx;
+	struct cvmx_pko_mem_debug5_cn68xx {
+		u64 reserved_57_63 : 7;
+		u64 uid : 3;
+		u64 ptp : 1;
+		u64 nxt_inflt : 6;
+		u64 curr_ptr : 40;
+		u64 curr_siz : 7;
+	} cn68xx;
+	struct cvmx_pko_mem_debug5_cn68xx cn68xxp1;
+	struct cvmx_pko_mem_debug5_cn61xx cn70xx;
+	struct cvmx_pko_mem_debug5_cn61xx cn70xxp1;
+	struct cvmx_pko_mem_debug5_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug5 cvmx_pko_mem_debug5_t;
+
+/**
+ * cvmx_pko_mem_debug6
+ *
+ * Notes:
+ * Internal per-port state intended for debug use only - pko_prt_psb.port[63:0]
+ * This CSR is a memory of 44 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug6 {
+	u64 u64;
+	struct cvmx_pko_mem_debug6_s {
+		u64 reserved_38_63 : 26;
+		u64 qos_active : 1;
+		u64 reserved_0_36 : 37;
+	} s;
+	struct cvmx_pko_mem_debug6_cn30xx {
+		u64 reserved_11_63 : 53;
+		u64 qid_offm : 3;
+		u64 static_p : 1;
+		u64 work_min : 3;
+		u64 dwri_chk : 1;
+		u64 dwri_uid : 1;
+		u64 dwri_mod : 2;
+	} cn30xx;
+	struct cvmx_pko_mem_debug6_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug6_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug6_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug6_cn50xx {
+		u64 reserved_11_63 : 53;
+		u64 curr_ptr : 11;
+	} cn50xx;
+	struct cvmx_pko_mem_debug6_cn52xx {
+		u64 reserved_37_63 : 27;
+		u64 qid_offres : 4;
+		u64 qid_offths : 4;
+		u64 preempter : 1;
+		u64 preemptee : 1;
+		u64 preempted : 1;
+		u64 active : 1;
+		u64 statc : 1;
+		u64 qos : 3;
+		u64 qcb_ridx : 5;
+		u64 qid_offmax : 4;
+		u64 qid_off : 4;
+		u64 qid_base : 8;
+	} cn52xx;
+	struct cvmx_pko_mem_debug6_cn52xx cn52xxp1;
+	struct cvmx_pko_mem_debug6_cn52xx cn56xx;
+	struct cvmx_pko_mem_debug6_cn52xx cn56xxp1;
+	struct cvmx_pko_mem_debug6_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug6_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug6_cn52xx cn61xx;
+	struct cvmx_pko_mem_debug6_cn52xx cn63xx;
+	struct cvmx_pko_mem_debug6_cn52xx cn63xxp1;
+	struct cvmx_pko_mem_debug6_cn52xx cn66xx;
+	struct cvmx_pko_mem_debug6_cn68xx {
+		u64 reserved_38_63 : 26;
+		u64 qos_active : 1;
+		u64 qid_offths : 5;
+		u64 preempter : 1;
+		u64 preemptee : 1;
+		u64 active : 1;
+		u64 static_p : 1;
+		u64 qos : 3;
+		u64 qcb_ridx : 7;
+		u64 qid_offmax : 5;
+		u64 qid_off : 5;
+		u64 qid_base : 8;
+	} cn68xx;
+	struct cvmx_pko_mem_debug6_cn68xx cn68xxp1;
+	struct cvmx_pko_mem_debug6_cn70xx {
+		u64 reserved_63_37 : 27;
+		u64 qid_offres : 4;
+		u64 qid_offths : 4;
+		u64 preempter : 1;
+		u64 preemptee : 1;
+		u64 preempted : 1;
+		u64 active : 1;
+		u64 staticb : 1;
+		u64 qos : 3;
+		u64 qcb_ridx : 5;
+		u64 qid_offmax : 4;
+		u64 qid_off : 4;
+		u64 qid_base : 8;
+	} cn70xx;
+	struct cvmx_pko_mem_debug6_cn70xx cn70xxp1;
+	struct cvmx_pko_mem_debug6_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug6 cvmx_pko_mem_debug6_t;
+
+/**
+ * cvmx_pko_mem_debug7
+ *
+ * Notes:
+ * Internal per-queue state intended for debug use only - pko_prt_qsb.state[63:0]
+ * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug7 {
+	u64 u64;
+	struct cvmx_pko_mem_debug7_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pko_mem_debug7_cn30xx {
+		u64 reserved_58_63 : 6;
+		u64 dwb : 9;
+		u64 start : 33;
+		u64 size : 16;
+	} cn30xx;
+	struct cvmx_pko_mem_debug7_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug7_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug7_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug7_cn50xx {
+		u64 qos : 5;
+		u64 tail : 1;
+		u64 buf_siz : 13;
+		u64 buf_ptr : 33;
+		u64 qcb_widx : 6;
+		u64 qcb_ridx : 6;
+	} cn50xx;
+	struct cvmx_pko_mem_debug7_cn50xx cn52xx;
+	struct cvmx_pko_mem_debug7_cn50xx cn52xxp1;
+	struct cvmx_pko_mem_debug7_cn50xx cn56xx;
+	struct cvmx_pko_mem_debug7_cn50xx cn56xxp1;
+	struct cvmx_pko_mem_debug7_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug7_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug7_cn50xx cn61xx;
+	struct cvmx_pko_mem_debug7_cn50xx cn63xx;
+	struct cvmx_pko_mem_debug7_cn50xx cn63xxp1;
+	struct cvmx_pko_mem_debug7_cn50xx cn66xx;
+	struct cvmx_pko_mem_debug7_cn68xx {
+		u64 buf_siz : 11;
+		u64 buf_ptr : 37;
+		u64 qcb_widx : 8;
+		u64 qcb_ridx : 8;
+	} cn68xx;
+	struct cvmx_pko_mem_debug7_cn68xx cn68xxp1;
+	struct cvmx_pko_mem_debug7_cn50xx cn70xx;
+	struct cvmx_pko_mem_debug7_cn50xx cn70xxp1;
+	struct cvmx_pko_mem_debug7_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug7 cvmx_pko_mem_debug7_t;
+
+/**
+ * cvmx_pko_mem_debug8
+ *
+ * Notes:
+ * Internal per-queue state intended for debug use only - pko_prt_qsb.state[91:64]
+ * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug8 {
+	u64 u64;
+	struct cvmx_pko_mem_debug8_s {
+		u64 reserved_59_63 : 5;
+		u64 tail : 1;
+		u64 reserved_0_57 : 58;
+	} s;
+	struct cvmx_pko_mem_debug8_cn30xx {
+		u64 qos : 5;
+		u64 tail : 1;
+		u64 buf_siz : 13;
+		u64 buf_ptr : 33;
+		u64 qcb_widx : 6;
+		u64 qcb_ridx : 6;
+	} cn30xx;
+	struct cvmx_pko_mem_debug8_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug8_cn30xx cn38xx;
+	struct cvmx_pko_mem_debug8_cn30xx cn38xxp2;
+	struct cvmx_pko_mem_debug8_cn50xx {
+		u64 reserved_28_63 : 36;
+		u64 doorbell : 20;
+		u64 reserved_6_7 : 2;
+		u64 static_p : 1;
+		u64 s_tail : 1;
+		u64 static_q : 1;
+		u64 qos : 3;
+	} cn50xx;
+	struct cvmx_pko_mem_debug8_cn52xx {
+		u64 reserved_29_63 : 35;
+		u64 preempter : 1;
+		u64 doorbell : 20;
+		u64 reserved_7_7 : 1;
+		u64 preemptee : 1;
+		u64 static_p : 1;
+		u64 s_tail : 1;
+		u64 static_q : 1;
+		u64 qos : 3;
+	} cn52xx;
+	struct cvmx_pko_mem_debug8_cn52xx cn52xxp1;
+	struct cvmx_pko_mem_debug8_cn52xx cn56xx;
+	struct cvmx_pko_mem_debug8_cn52xx cn56xxp1;
+	struct cvmx_pko_mem_debug8_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug8_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug8_cn61xx {
+		u64 reserved_42_63 : 22;
+		u64 qid_qqos : 8;
+		u64 reserved_33_33 : 1;
+		u64 qid_idx : 4;
+		u64 preempter : 1;
+		u64 doorbell : 20;
+		u64 reserved_7_7 : 1;
+		u64 preemptee : 1;
+		u64 static_p : 1;
+		u64 s_tail : 1;
+		u64 static_q : 1;
+		u64 qos : 3;
+	} cn61xx;
+	struct cvmx_pko_mem_debug8_cn52xx cn63xx;
+	struct cvmx_pko_mem_debug8_cn52xx cn63xxp1;
+	struct cvmx_pko_mem_debug8_cn61xx cn66xx;
+	struct cvmx_pko_mem_debug8_cn68xx {
+		u64 reserved_50_63 : 14;
+		u64 qid_qqos : 8;
+		u64 qid_idx : 5;
+		u64 preempter : 1;
+		u64 doorbell : 20;
+		u64 reserved_9_15 : 7;
+		u64 qid_qos : 6;
+		u64 qid_tail : 1;
+		u64 buf_siz : 2;
+	} cn68xx;
+	struct cvmx_pko_mem_debug8_cn68xx cn68xxp1;
+	struct cvmx_pko_mem_debug8_cn61xx cn70xx;
+	struct cvmx_pko_mem_debug8_cn61xx cn70xxp1;
+	struct cvmx_pko_mem_debug8_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug8 cvmx_pko_mem_debug8_t;
+
+/**
+ * cvmx_pko_mem_debug9
+ *
+ * Notes:
+ * Internal per-engine state intended for debug use only - pko.dat.ptr.ptrs0, pko.dat.ptr.ptrs3
+ * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.
+ */
+union cvmx_pko_mem_debug9 {
+	u64 u64;
+	struct cvmx_pko_mem_debug9_s {
+		u64 reserved_49_63 : 15;
+		u64 ptrs0 : 17;
+		u64 reserved_0_31 : 32;
+	} s;
+	struct cvmx_pko_mem_debug9_cn30xx {
+		u64 reserved_28_63 : 36;
+		u64 doorbell : 20;
+		u64 reserved_5_7 : 3;
+		u64 s_tail : 1;
+		u64 static_q : 1;
+		u64 qos : 3;
+	} cn30xx;
+	struct cvmx_pko_mem_debug9_cn30xx cn31xx;
+	struct cvmx_pko_mem_debug9_cn38xx {
+		u64 reserved_28_63 : 36;
+		u64 doorbell : 20;
+		u64 reserved_6_7 : 2;
+		u64 static_p : 1;
+		u64 s_tail : 1;
+		u64 static_q : 1;
+		u64 qos : 3;
+	} cn38xx;
+	struct cvmx_pko_mem_debug9_cn38xx cn38xxp2;
+	struct cvmx_pko_mem_debug9_cn50xx {
+		u64 reserved_49_63 : 15;
+		u64 ptrs0 : 17;
+		u64 reserved_17_31 : 15;
+		u64 ptrs3 : 17;
+	} cn50xx;
+	struct cvmx_pko_mem_debug9_cn50xx cn52xx;
+	struct cvmx_pko_mem_debug9_cn50xx cn52xxp1;
+	struct cvmx_pko_mem_debug9_cn50xx cn56xx;
+	struct cvmx_pko_mem_debug9_cn50xx cn56xxp1;
+	struct cvmx_pko_mem_debug9_cn50xx cn58xx;
+	struct cvmx_pko_mem_debug9_cn50xx cn58xxp1;
+	struct cvmx_pko_mem_debug9_cn50xx cn61xx;
+	struct cvmx_pko_mem_debug9_cn50xx cn63xx;
+	struct cvmx_pko_mem_debug9_cn50xx cn63xxp1;
+	struct cvmx_pko_mem_debug9_cn50xx cn66xx;
+	struct cvmx_pko_mem_debug9_cn50xx cn68xx;
+	struct cvmx_pko_mem_debug9_cn50xx cn68xxp1;
+	struct cvmx_pko_mem_debug9_cn50xx cn70xx;
+	struct cvmx_pko_mem_debug9_cn50xx cn70xxp1;
+	struct cvmx_pko_mem_debug9_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_debug9 cvmx_pko_mem_debug9_t;
+
+/**
+ * cvmx_pko_mem_iport_ptrs
+ *
+ * Notes:
+ * This CSR is a memory of 128 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  The index to this CSR is an IPORT.  A read of any
+ * entry that has not been previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_iport_ptrs {
+	u64 u64;
+	struct cvmx_pko_mem_iport_ptrs_s {
+		u64 reserved_63_63 : 1;
+		u64 crc : 1;
+		u64 static_p : 1;
+		u64 qos_mask : 8;
+		u64 min_pkt : 3;
+		u64 reserved_31_49 : 19;
+		u64 pipe : 7;
+		u64 reserved_21_23 : 3;
+		u64 intr : 5;
+		u64 reserved_13_15 : 3;
+		u64 eid : 5;
+		u64 reserved_7_7 : 1;
+		u64 ipid : 7;
+	} s;
+	struct cvmx_pko_mem_iport_ptrs_s cn68xx;
+	struct cvmx_pko_mem_iport_ptrs_s cn68xxp1;
+};
+
+typedef union cvmx_pko_mem_iport_ptrs cvmx_pko_mem_iport_ptrs_t;
+
+/**
+ * cvmx_pko_mem_iport_qos
+ *
+ * Notes:
+ * Sets the QOS mask, per port.  These QOS_MASK bits are logically and physically the same QOS_MASK
+ * bits in PKO_MEM_IPORT_PTRS.  This CSR address allows the QOS_MASK bits to be written during PKO
+ * operation without affecting any other port state.  The engine to which port PID is mapped is engine
+ * EID.  Note that the port to engine mapping must be the same as was previously programmed via the
+ * PKO_MEM_IPORT_PTRS CSR.
+ * This CSR is a memory of 128 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  The index to this CSR is an IPORT.  A read of
+ * any entry that has not been previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_iport_qos {
+	u64 u64;
+	struct cvmx_pko_mem_iport_qos_s {
+		u64 reserved_61_63 : 3;
+		u64 qos_mask : 8;
+		u64 reserved_13_52 : 40;
+		u64 eid : 5;
+		u64 reserved_7_7 : 1;
+		u64 ipid : 7;
+	} s;
+	struct cvmx_pko_mem_iport_qos_s cn68xx;
+	struct cvmx_pko_mem_iport_qos_s cn68xxp1;
+};
+
+typedef union cvmx_pko_mem_iport_qos cvmx_pko_mem_iport_qos_t;
+
+/**
+ * cvmx_pko_mem_iqueue_ptrs
+ *
+ * Notes:
+ * Sets the queue to port mapping and the initial command buffer pointer, per queue.  Unused queues must
+ * set BUF_PTR=0.  Each queue may map to at most one port.  No more than 32 queues may map to a port.
+ * The set of queues that is mapped to a port must be a contiguous array of queues.  The port to which
+ * queue QID is mapped is port IPID.  The index of queue QID in port IPID's queue list is IDX.  The last
+ * queue in port IPID's queue array must have its TAIL bit set.
+ * STATIC_Q marks queue QID as having static priority.  STATIC_P marks the port IPID to which QID is
+ * mapped as having at least one queue with static priority.  If any QID that maps to IPID has static
+ * priority, then all QID that map to IPID must have STATIC_P set.  Queues marked as static priority
+ * must be contiguous and begin at IDX 0.  The last queue that is marked as having static priority
+ * must have its S_TAIL bit set.
+ * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  The index to this CSR is an IQUEUE.  A read of any
+ * entry that has not been previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_iqueue_ptrs {
+	u64 u64;
+	struct cvmx_pko_mem_iqueue_ptrs_s {
+		u64 s_tail : 1;
+		u64 static_p : 1;
+		u64 static_q : 1;
+		u64 qos_mask : 8;
+		u64 buf_ptr : 31;
+		u64 tail : 1;
+		u64 index : 5;
+		u64 reserved_15_15 : 1;
+		u64 ipid : 7;
+		u64 qid : 8;
+	} s;
+	struct cvmx_pko_mem_iqueue_ptrs_s cn68xx;
+	struct cvmx_pko_mem_iqueue_ptrs_s cn68xxp1;
+};
+
+typedef union cvmx_pko_mem_iqueue_ptrs cvmx_pko_mem_iqueue_ptrs_t;
+
+/**
+ * cvmx_pko_mem_iqueue_qos
+ *
+ * Notes:
+ * Sets the QOS mask, per queue.  These QOS_MASK bits are logically and physically the same QOS_MASK
+ * bits in PKO_MEM_IQUEUE_PTRS.  This CSR address allows the QOS_MASK bits to be written during PKO
+ * operation without affecting any other queue state.  The port to which queue QID is mapped is port
+ * IPID.  Note that the queue to port mapping must be the same as was previously programmed via the
+ * PKO_MEM_IQUEUE_PTRS CSR.
+ * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  The index to this CSR is an IQUEUE.  A read of any
+ * entry that has not been previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_iqueue_qos {
+	u64 u64;
+	struct cvmx_pko_mem_iqueue_qos_s {
+		u64 reserved_61_63 : 3;
+		u64 qos_mask : 8;
+		u64 reserved_15_52 : 38;
+		u64 ipid : 7;
+		u64 qid : 8;
+	} s;
+	struct cvmx_pko_mem_iqueue_qos_s cn68xx;
+	struct cvmx_pko_mem_iqueue_qos_s cn68xxp1;
+};
+
+typedef union cvmx_pko_mem_iqueue_qos cvmx_pko_mem_iqueue_qos_t;
+
+/**
+ * cvmx_pko_mem_port_ptrs
+ *
+ * Notes:
+ * Sets the port to engine mapping, per port.  Ports marked as static priority need not be contiguous,
+ * but they must be the lowest numbered PIDs mapped to this EID and must have QOS_MASK=0xff.  If EID==8
+ * or EID==9, then PID[1:0] is used to direct the packet to the correct port on that interface.
+ * EID==15 can be used for unused PKO-internal ports.
+ * The reset configuration is the following:
+ *   PID EID(ext port) BP_PORT QOS_MASK STATIC_P
+ *   -------------------------------------------
+ *     0   0( 0)             0     0xff        0
+ *     1   1( 1)             1     0xff        0
+ *     2   2( 2)             2     0xff        0
+ *     3   3( 3)             3     0xff        0
+ *     4   0( 0)             4     0xff        0
+ *     5   1( 1)             5     0xff        0
+ *     6   2( 2)             6     0xff        0
+ *     7   3( 3)             7     0xff        0
+ *     8   0( 0)             8     0xff        0
+ *     9   1( 1)             9     0xff        0
+ *    10   2( 2)            10     0xff        0
+ *    11   3( 3)            11     0xff        0
+ *    12   0( 0)            12     0xff        0
+ *    13   1( 1)            13     0xff        0
+ *    14   2( 2)            14     0xff        0
+ *    15   3( 3)            15     0xff        0
+ *   -------------------------------------------
+ *    16   4(16)            16     0xff        0
+ *    17   5(17)            17     0xff        0
+ *    18   6(18)            18     0xff        0
+ *    19   7(19)            19     0xff        0
+ *    20   4(16)            20     0xff        0
+ *    21   5(17)            21     0xff        0
+ *    22   6(18)            22     0xff        0
+ *    23   7(19)            23     0xff        0
+ *    24   4(16)            24     0xff        0
+ *    25   5(17)            25     0xff        0
+ *    26   6(18)            26     0xff        0
+ *    27   7(19)            27     0xff        0
+ *    28   4(16)            28     0xff        0
+ *    29   5(17)            29     0xff        0
+ *    30   6(18)            30     0xff        0
+ *    31   7(19)            31     0xff        0
+ *   -------------------------------------------
+ *    32   8(32)            32     0xff        0
+ *    33   8(33)            33     0xff        0
+ *    34   8(34)            34     0xff        0
+ *    35   8(35)            35     0xff        0
+ *   -------------------------------------------
+ *    36   9(36)            36     0xff        0
+ *    37   9(37)            37     0xff        0
+ *    38   9(38)            38     0xff        0
+ *    39   9(39)            39     0xff        0
+ *
+ * This CSR is a memory of 48 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  A read of any entry that has not been
+ * previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_port_ptrs {
+	u64 u64;
+	struct cvmx_pko_mem_port_ptrs_s {
+		u64 reserved_62_63 : 2;
+		u64 static_p : 1;
+		u64 qos_mask : 8;
+		u64 reserved_16_52 : 37;
+		u64 bp_port : 6;
+		u64 eid : 4;
+		u64 pid : 6;
+	} s;
+	struct cvmx_pko_mem_port_ptrs_s cn52xx;
+	struct cvmx_pko_mem_port_ptrs_s cn52xxp1;
+	struct cvmx_pko_mem_port_ptrs_s cn56xx;
+	struct cvmx_pko_mem_port_ptrs_s cn56xxp1;
+	struct cvmx_pko_mem_port_ptrs_s cn61xx;
+	struct cvmx_pko_mem_port_ptrs_s cn63xx;
+	struct cvmx_pko_mem_port_ptrs_s cn63xxp1;
+	struct cvmx_pko_mem_port_ptrs_s cn66xx;
+	struct cvmx_pko_mem_port_ptrs_s cn70xx;
+	struct cvmx_pko_mem_port_ptrs_s cn70xxp1;
+	struct cvmx_pko_mem_port_ptrs_s cnf71xx;
+};
+
+typedef union cvmx_pko_mem_port_ptrs cvmx_pko_mem_port_ptrs_t;
+
+/**
+ * cvmx_pko_mem_port_qos
+ *
+ * Notes:
+ * Sets the QOS mask, per port.  These QOS_MASK bits are logically and physically the same QOS_MASK
+ * bits in PKO_MEM_PORT_PTRS.  This CSR address allows the QOS_MASK bits to be written during PKO
+ * operation without affecting any other port state.  The engine to which port PID is mapped is engine
+ * EID.  Note that the port to engine mapping must be the same as was previously programmed via the
+ * PKO_MEM_PORT_PTRS CSR.
+ * This CSR is a memory of 44 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  A read of any entry that has not been
+ * previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_port_qos {
+	u64 u64;
+	struct cvmx_pko_mem_port_qos_s {
+		u64 reserved_61_63 : 3;
+		u64 qos_mask : 8;
+		u64 reserved_10_52 : 43;
+		u64 eid : 4;
+		u64 pid : 6;
+	} s;
+	struct cvmx_pko_mem_port_qos_s cn52xx;
+	struct cvmx_pko_mem_port_qos_s cn52xxp1;
+	struct cvmx_pko_mem_port_qos_s cn56xx;
+	struct cvmx_pko_mem_port_qos_s cn56xxp1;
+	struct cvmx_pko_mem_port_qos_s cn61xx;
+	struct cvmx_pko_mem_port_qos_s cn63xx;
+	struct cvmx_pko_mem_port_qos_s cn63xxp1;
+	struct cvmx_pko_mem_port_qos_s cn66xx;
+	struct cvmx_pko_mem_port_qos_s cn70xx;
+	struct cvmx_pko_mem_port_qos_s cn70xxp1;
+	struct cvmx_pko_mem_port_qos_s cnf71xx;
+};
+
+typedef union cvmx_pko_mem_port_qos cvmx_pko_mem_port_qos_t;
+
+/**
+ * cvmx_pko_mem_port_rate0
+ *
+ * Notes:
+ * This CSR is a memory of 44 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  A read of any entry that has not been
+ * previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_port_rate0 {
+	u64 u64;
+	struct cvmx_pko_mem_port_rate0_s {
+		u64 reserved_51_63 : 13;
+		u64 rate_word : 19;
+		u64 rate_pkt : 24;
+		u64 reserved_7_7 : 1;
+		u64 pid : 7;
+	} s;
+	struct cvmx_pko_mem_port_rate0_cn52xx {
+		u64 reserved_51_63 : 13;
+		u64 rate_word : 19;
+		u64 rate_pkt : 24;
+		u64 reserved_6_7 : 2;
+		u64 pid : 6;
+	} cn52xx;
+	struct cvmx_pko_mem_port_rate0_cn52xx cn52xxp1;
+	struct cvmx_pko_mem_port_rate0_cn52xx cn56xx;
+	struct cvmx_pko_mem_port_rate0_cn52xx cn56xxp1;
+	struct cvmx_pko_mem_port_rate0_cn52xx cn61xx;
+	struct cvmx_pko_mem_port_rate0_cn52xx cn63xx;
+	struct cvmx_pko_mem_port_rate0_cn52xx cn63xxp1;
+	struct cvmx_pko_mem_port_rate0_cn52xx cn66xx;
+	struct cvmx_pko_mem_port_rate0_s cn68xx;
+	struct cvmx_pko_mem_port_rate0_s cn68xxp1;
+	struct cvmx_pko_mem_port_rate0_cn52xx cn70xx;
+	struct cvmx_pko_mem_port_rate0_cn52xx cn70xxp1;
+	struct cvmx_pko_mem_port_rate0_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_port_rate0 cvmx_pko_mem_port_rate0_t;
+
+/**
+ * cvmx_pko_mem_port_rate1
+ *
+ * Notes:
+ * Writing PKO_MEM_PORT_RATE1[PID,RATE_LIM] has the side effect of setting the corresponding
+ * accumulator to zero.
+ * This CSR is a memory of 44 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  A read of any entry that has not been
+ * previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_port_rate1 {
+	u64 u64;
+	struct cvmx_pko_mem_port_rate1_s {
+		u64 reserved_32_63 : 32;
+		u64 rate_lim : 24;
+		u64 reserved_7_7 : 1;
+		u64 pid : 7;
+	} s;
+	struct cvmx_pko_mem_port_rate1_cn52xx {
+		u64 reserved_32_63 : 32;
+		u64 rate_lim : 24;
+		u64 reserved_6_7 : 2;
+		u64 pid : 6;
+	} cn52xx;
+	struct cvmx_pko_mem_port_rate1_cn52xx cn52xxp1;
+	struct cvmx_pko_mem_port_rate1_cn52xx cn56xx;
+	struct cvmx_pko_mem_port_rate1_cn52xx cn56xxp1;
+	struct cvmx_pko_mem_port_rate1_cn52xx cn61xx;
+	struct cvmx_pko_mem_port_rate1_cn52xx cn63xx;
+	struct cvmx_pko_mem_port_rate1_cn52xx cn63xxp1;
+	struct cvmx_pko_mem_port_rate1_cn52xx cn66xx;
+	struct cvmx_pko_mem_port_rate1_s cn68xx;
+	struct cvmx_pko_mem_port_rate1_s cn68xxp1;
+	struct cvmx_pko_mem_port_rate1_cn52xx cn70xx;
+	struct cvmx_pko_mem_port_rate1_cn52xx cn70xxp1;
+	struct cvmx_pko_mem_port_rate1_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pko_mem_port_rate1 cvmx_pko_mem_port_rate1_t;
+
+/**
+ * cvmx_pko_mem_queue_ptrs
+ *
+ * Notes:
+ * Sets the queue to port mapping and the initial command buffer pointer, per queue
+ * Each queue may map to at most one port.  No more than 16 queues may map to a port.  The set of
+ * queues that is mapped to a port must be a contiguous array of queues.  The port to which queue QID
+ * is mapped is port PID.  The index of queue QID in port PID's queue list is IDX.  The last queue in
+ * port PID's queue array must have its TAIL bit set.  Unused queues must be mapped to port 63.
+ * STATIC_Q marks queue QID as having static priority.  STATIC_P marks the port PID to which QID is
+ * mapped as having at least one queue with static priority.  If any QID that maps to PID has static
+ * priority, then all QID that map to PID must have STATIC_P set.  Queues marked as static priority
+ * must be contiguous and begin at IDX 0.  The last queue that is marked as having static priority
+ * must have its S_TAIL bit set.
+ * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  A read of any entry that has not been
+ * previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_queue_ptrs {
+	u64 u64;
+	struct cvmx_pko_mem_queue_ptrs_s {
+		u64 s_tail : 1;
+		u64 static_p : 1;
+		u64 static_q : 1;
+		u64 qos_mask : 8;
+		u64 buf_ptr : 36;
+		u64 tail : 1;
+		u64 index : 3;
+		u64 port : 6;
+		u64 queue : 7;
+	} s;
+	struct cvmx_pko_mem_queue_ptrs_s cn30xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn31xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn38xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn38xxp2;
+	struct cvmx_pko_mem_queue_ptrs_s cn50xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn52xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn52xxp1;
+	struct cvmx_pko_mem_queue_ptrs_s cn56xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn56xxp1;
+	struct cvmx_pko_mem_queue_ptrs_s cn58xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn58xxp1;
+	struct cvmx_pko_mem_queue_ptrs_s cn61xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn63xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn63xxp1;
+	struct cvmx_pko_mem_queue_ptrs_s cn66xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn70xx;
+	struct cvmx_pko_mem_queue_ptrs_s cn70xxp1;
+	struct cvmx_pko_mem_queue_ptrs_s cnf71xx;
+};
+
+typedef union cvmx_pko_mem_queue_ptrs cvmx_pko_mem_queue_ptrs_t;
+
+/**
+ * cvmx_pko_mem_queue_qos
+ *
+ * Notes:
+ * Sets the QOS mask, per queue.  These QOS_MASK bits are logically and physically the same QOS_MASK
+ * bits in PKO_MEM_QUEUE_PTRS.  This CSR address allows the QOS_MASK bits to be written during PKO
+ * operation without affecting any other queue state.  The port to which queue QID is mapped is port
+ * PID.  Note that the queue to port mapping must be the same as was previously programmed via the
+ * PKO_MEM_QUEUE_PTRS CSR.
+ * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  A read of any entry that has not been
+ * previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_queue_qos {
+	u64 u64;
+	struct cvmx_pko_mem_queue_qos_s {
+		u64 reserved_61_63 : 3;
+		u64 qos_mask : 8;
+		u64 reserved_13_52 : 40;
+		u64 pid : 6;
+		u64 qid : 7;
+	} s;
+	struct cvmx_pko_mem_queue_qos_s cn30xx;
+	struct cvmx_pko_mem_queue_qos_s cn31xx;
+	struct cvmx_pko_mem_queue_qos_s cn38xx;
+	struct cvmx_pko_mem_queue_qos_s cn38xxp2;
+	struct cvmx_pko_mem_queue_qos_s cn50xx;
+	struct cvmx_pko_mem_queue_qos_s cn52xx;
+	struct cvmx_pko_mem_queue_qos_s cn52xxp1;
+	struct cvmx_pko_mem_queue_qos_s cn56xx;
+	struct cvmx_pko_mem_queue_qos_s cn56xxp1;
+	struct cvmx_pko_mem_queue_qos_s cn58xx;
+	struct cvmx_pko_mem_queue_qos_s cn58xxp1;
+	struct cvmx_pko_mem_queue_qos_s cn61xx;
+	struct cvmx_pko_mem_queue_qos_s cn63xx;
+	struct cvmx_pko_mem_queue_qos_s cn63xxp1;
+	struct cvmx_pko_mem_queue_qos_s cn66xx;
+	struct cvmx_pko_mem_queue_qos_s cn70xx;
+	struct cvmx_pko_mem_queue_qos_s cn70xxp1;
+	struct cvmx_pko_mem_queue_qos_s cnf71xx;
+};
+
+typedef union cvmx_pko_mem_queue_qos cvmx_pko_mem_queue_qos_t;
+
+/**
+ * cvmx_pko_mem_throttle_int
+ *
+ * Notes:
+ * Writing PACKET and WORD with 0 resets both counts for INT to 0 rather than add 0.
+ * Otherwise, writes to this CSR add to the existing WORD/PACKET counts for the interface INT.
+ *
+ * PKO tracks the number of (8-byte) WORD's and PACKET's in-flight (sum total in both PKO
+ * and the interface MAC) on the interface. (When PKO first selects a packet from a PKO queue, it
+ * increments the counts appropriately. When the interface MAC has (largely) completed sending
+ * the words/packet, PKO decrements the count appropriately.) When PKO_REG_FLAGS[ENA_THROTTLE]
+ * is set and the most-significant bit of the WORD or packet count for a interface is set,
+ * PKO will not transfer any packets over the interface. Software can limit the amount of
+ * packet data and/or the number of packets that OCTEON can send out the chip after receiving backpressure
+ * from the interface/pipe via these per-pipe throttle counts when PKO_REG_FLAGS[ENA_THROTTLE]=1.
+ * For example, to limit the number of packets outstanding in the interface to N, preset PACKET for
+ * the pipe to the value 0x20-N (0x20 is the smallest PACKET value with the most-significant bit set).
+ *
+ * This CSR is a memory of 32 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  The index to this CSR is an INTERFACE.  A read of any
+ * entry that has not been previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_throttle_int {
+	u64 u64;
+	struct cvmx_pko_mem_throttle_int_s {
+		u64 reserved_47_63 : 17;
+		u64 word : 15;
+		u64 reserved_14_31 : 18;
+		u64 packet : 6;
+		u64 reserved_5_7 : 3;
+		u64 intr : 5;
+	} s;
+	struct cvmx_pko_mem_throttle_int_s cn68xx;
+	struct cvmx_pko_mem_throttle_int_s cn68xxp1;
+};
+
+typedef union cvmx_pko_mem_throttle_int cvmx_pko_mem_throttle_int_t;
+
+/**
+ * cvmx_pko_mem_throttle_pipe
+ *
+ * Notes:
+ * Writing PACKET and WORD with 0 resets both counts for PIPE to 0 rather than add 0.
+ * Otherwise, writes to this CSR add to the existing WORD/PACKET counts for the PKO pipe PIPE.
+ *
+ * PKO tracks the number of (8-byte) WORD's and PACKET's in-flight (sum total in both PKO
+ * and the interface MAC) on the pipe. (When PKO first selects a packet from a PKO queue, it
+ * increments the counts appropriately. When the interface MAC has (largely) completed sending
+ * the words/packet, PKO decrements the count appropriately.) When PKO_REG_FLAGS[ENA_THROTTLE]
+ * is set and the most-significant bit of the WORD or packet count for a PKO pipe is set,
+ * PKO will not transfer any packets over the PKO pipe. Software can limit the amount of
+ * packet data and/or the number of packets that OCTEON can send out the chip after receiving backpressure
+ * from the interface/pipe via these per-pipe throttle counts when PKO_REG_FLAGS[ENA_THROTTLE]=1.
+ * For example, to limit the number of packets outstanding in the pipe to N, preset PACKET for
+ * the pipe to the value 0x20-N (0x20 is the smallest PACKET value with the most-significant bit set).
+ *
+ * This CSR is a memory of 128 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
+ * CSR read operations to this address can be performed.  The index to this CSR is a PIPE.  A read of any
+ * entry that has not been previously written is illegal and will result in unpredictable CSR read data.
+ */
+union cvmx_pko_mem_throttle_pipe {
+	u64 u64;
+	struct cvmx_pko_mem_throttle_pipe_s {
+		u64 reserved_47_63 : 17;
+		u64 word : 15;
+		u64 reserved_14_31 : 18;
+		u64 packet : 6;
+		u64 reserved_7_7 : 1;
+		u64 pipe : 7;
+	} s;
+	struct cvmx_pko_mem_throttle_pipe_s cn68xx;
+	struct cvmx_pko_mem_throttle_pipe_s cn68xxp1;
+};
+
+typedef union cvmx_pko_mem_throttle_pipe cvmx_pko_mem_throttle_pipe_t;
+
+/**
+ * cvmx_pko_ncb_bist_status
+ *
+ * Each bit is the BIST result of an individual memory (per bit, 0 = pass and 1 = fail).
+ *
+ */
+union cvmx_pko_ncb_bist_status {
+	u64 u64;
+	struct cvmx_pko_ncb_bist_status_s {
+		u64 ncbi_l2_out_ram_bist_status : 1;
+		u64 ncbi_pp_out_ram_bist_status : 1;
+		u64 ncbo_pdm_cmd_dat_ram_bist_status : 1;
+		u64 ncbi_l2_pdm_pref_ram_bist_status : 1;
+		u64 ncbo_pp_fif_ram_bist_status : 1;
+		u64 ncbo_skid_fif_ram_bist_status : 1;
+		u64 reserved_0_57 : 58;
+	} s;
+	struct cvmx_pko_ncb_bist_status_s cn73xx;
+	struct cvmx_pko_ncb_bist_status_s cn78xx;
+	struct cvmx_pko_ncb_bist_status_s cn78xxp1;
+	struct cvmx_pko_ncb_bist_status_s cnf75xx;
+};
+
+typedef union cvmx_pko_ncb_bist_status cvmx_pko_ncb_bist_status_t;
+
+/**
+ * cvmx_pko_ncb_ecc_ctl0
+ */
+union cvmx_pko_ncb_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_ncb_ecc_ctl0_s {
+		u64 ncbi_l2_out_ram_flip : 2;
+		u64 ncbi_l2_out_ram_cdis : 1;
+		u64 ncbi_pp_out_ram_flip : 2;
+		u64 ncbi_pp_out_ram_cdis : 1;
+		u64 ncbo_pdm_cmd_dat_ram_flip : 2;
+		u64 ncbo_pdm_cmd_dat_ram_cdis : 1;
+		u64 ncbi_l2_pdm_pref_ram_flip : 2;
+		u64 ncbi_l2_pdm_pref_ram_cdis : 1;
+		u64 ncbo_pp_fif_ram_flip : 2;
+		u64 ncbo_pp_fif_ram_cdis : 1;
+		u64 ncbo_skid_fif_ram_flip : 2;
+		u64 ncbo_skid_fif_ram_cdis : 1;
+		u64 reserved_0_45 : 46;
+	} s;
+	struct cvmx_pko_ncb_ecc_ctl0_s cn73xx;
+	struct cvmx_pko_ncb_ecc_ctl0_s cn78xx;
+	struct cvmx_pko_ncb_ecc_ctl0_s cn78xxp1;
+	struct cvmx_pko_ncb_ecc_ctl0_s cnf75xx;
+};
+
+typedef union cvmx_pko_ncb_ecc_ctl0 cvmx_pko_ncb_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_ncb_ecc_dbe_sts0
+ */
+union cvmx_pko_ncb_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_ncb_ecc_dbe_sts0_s {
+		u64 ncbi_l2_out_ram_dbe : 1;
+		u64 ncbi_pp_out_ram_dbe : 1;
+		u64 ncbo_pdm_cmd_dat_ram_dbe : 1;
+		u64 ncbi_l2_pdm_pref_ram_dbe : 1;
+		u64 ncbo_pp_fif_ram_dbe : 1;
+		u64 ncbo_skid_fif_ram_dbe : 1;
+		u64 reserved_0_57 : 58;
+	} s;
+	struct cvmx_pko_ncb_ecc_dbe_sts0_s cn73xx;
+	struct cvmx_pko_ncb_ecc_dbe_sts0_s cn78xx;
+	struct cvmx_pko_ncb_ecc_dbe_sts0_s cn78xxp1;
+	struct cvmx_pko_ncb_ecc_dbe_sts0_s cnf75xx;
+};
+
+typedef union cvmx_pko_ncb_ecc_dbe_sts0 cvmx_pko_ncb_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_ncb_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_ncb_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_ncb_ecc_dbe_sts_cmb0_s {
+		u64 ncb_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_ncb_ecc_dbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_ncb_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_ncb_ecc_dbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_ncb_ecc_dbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_ncb_ecc_dbe_sts_cmb0 cvmx_pko_ncb_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_ncb_ecc_sbe_sts0
+ */
+union cvmx_pko_ncb_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_ncb_ecc_sbe_sts0_s {
+		u64 ncbi_l2_out_ram_sbe : 1;
+		u64 ncbi_pp_out_ram_sbe : 1;
+		u64 ncbo_pdm_cmd_dat_ram_sbe : 1;
+		u64 ncbi_l2_pdm_pref_ram_sbe : 1;
+		u64 ncbo_pp_fif_ram_sbe : 1;
+		u64 ncbo_skid_fif_ram_sbe : 1;
+		u64 reserved_0_57 : 58;
+	} s;
+	struct cvmx_pko_ncb_ecc_sbe_sts0_s cn73xx;
+	struct cvmx_pko_ncb_ecc_sbe_sts0_s cn78xx;
+	struct cvmx_pko_ncb_ecc_sbe_sts0_s cn78xxp1;
+	struct cvmx_pko_ncb_ecc_sbe_sts0_s cnf75xx;
+};
+
+typedef union cvmx_pko_ncb_ecc_sbe_sts0 cvmx_pko_ncb_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_ncb_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_ncb_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_ncb_ecc_sbe_sts_cmb0_s {
+		u64 ncb_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_ncb_ecc_sbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_ncb_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_ncb_ecc_sbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_ncb_ecc_sbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_ncb_ecc_sbe_sts_cmb0 cvmx_pko_ncb_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_ncb_int
+ */
+union cvmx_pko_ncb_int {
+	u64 u64;
+	struct cvmx_pko_ncb_int_s {
+		u64 reserved_2_63 : 62;
+		u64 tso_segment_cnt : 1;
+		u64 ncb_tx_error : 1;
+	} s;
+	struct cvmx_pko_ncb_int_s cn73xx;
+	struct cvmx_pko_ncb_int_s cn78xx;
+	struct cvmx_pko_ncb_int_s cn78xxp1;
+	struct cvmx_pko_ncb_int_s cnf75xx;
+};
+
+typedef union cvmx_pko_ncb_int cvmx_pko_ncb_int_t;
+
+/**
+ * cvmx_pko_ncb_tx_err_info
+ */
+union cvmx_pko_ncb_tx_err_info {
+	u64 u64;
+	struct cvmx_pko_ncb_tx_err_info_s {
+		u64 reserved_32_63 : 32;
+		u64 wcnt : 5;
+		u64 src : 12;
+		u64 dst : 8;
+		u64 tag : 4;
+		u64 eot : 1;
+		u64 sot : 1;
+		u64 valid : 1;
+	} s;
+	struct cvmx_pko_ncb_tx_err_info_s cn73xx;
+	struct cvmx_pko_ncb_tx_err_info_s cn78xx;
+	struct cvmx_pko_ncb_tx_err_info_s cn78xxp1;
+	struct cvmx_pko_ncb_tx_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_ncb_tx_err_info cvmx_pko_ncb_tx_err_info_t;
+
+/**
+ * cvmx_pko_ncb_tx_err_word
+ */
+union cvmx_pko_ncb_tx_err_word {
+	u64 u64;
+	struct cvmx_pko_ncb_tx_err_word_s {
+		u64 err_word : 64;
+	} s;
+	struct cvmx_pko_ncb_tx_err_word_s cn73xx;
+	struct cvmx_pko_ncb_tx_err_word_s cn78xx;
+	struct cvmx_pko_ncb_tx_err_word_s cn78xxp1;
+	struct cvmx_pko_ncb_tx_err_word_s cnf75xx;
+};
+
+typedef union cvmx_pko_ncb_tx_err_word cvmx_pko_ncb_tx_err_word_t;
+
+/**
+ * cvmx_pko_pdm_bist_status
+ *
+ * Each bit is the BIST result of an individual memory (per bit, 0 = pass and 1 = fail).
+ *
+ */
+union cvmx_pko_pdm_bist_status {
+	u64 u64;
+	struct cvmx_pko_pdm_bist_status_s {
+		u64 flshb_cache_lo_ram_bist_status : 1;
+		u64 flshb_cache_hi_ram_bist_status : 1;
+		u64 isrm_ca_iinst_ram_bist_status : 1;
+		u64 isrm_ca_cm_ram_bist_status : 1;
+		u64 isrm_st_ram2_bist_status : 1;
+		u64 isrm_st_ram1_bist_status : 1;
+		u64 isrm_st_ram0_bist_status : 1;
+		u64 isrd_st_ram3_bist_status : 1;
+		u64 isrd_st_ram2_bist_status : 1;
+		u64 isrd_st_ram1_bist_status : 1;
+		u64 isrd_st_ram0_bist_status : 1;
+		u64 drp_hi_ram_bist_status : 1;
+		u64 drp_lo_ram_bist_status : 1;
+		u64 dwp_hi_ram_bist_status : 1;
+		u64 dwp_lo_ram_bist_status : 1;
+		u64 mwp_hi_ram_bist_status : 1;
+		u64 mwp_lo_ram_bist_status : 1;
+		u64 fillb_m_rsp_ram_hi_bist_status : 1;
+		u64 fillb_m_rsp_ram_lo_bist_status : 1;
+		u64 fillb_d_rsp_ram_hi_bist_status : 1;
+		u64 fillb_d_rsp_ram_lo_bist_status : 1;
+		u64 fillb_d_rsp_dat_fifo_bist_status : 1;
+		u64 fillb_m_rsp_dat_fifo_bist_status : 1;
+		u64 flshb_m_dat_ram_bist_status : 1;
+		u64 flshb_d_dat_ram_bist_status : 1;
+		u64 minpad_ram_bist_status : 1;
+		u64 mwp_hi_spt_ram_bist_status : 1;
+		u64 mwp_lo_spt_ram_bist_status : 1;
+		u64 buf_wm_ram_bist_status : 1;
+		u64 reserved_0_34 : 35;
+	} s;
+	struct cvmx_pko_pdm_bist_status_s cn73xx;
+	struct cvmx_pko_pdm_bist_status_s cn78xx;
+	struct cvmx_pko_pdm_bist_status_s cn78xxp1;
+	struct cvmx_pko_pdm_bist_status_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_bist_status cvmx_pko_pdm_bist_status_t;
+
+/**
+ * cvmx_pko_pdm_cfg
+ */
+union cvmx_pko_pdm_cfg {
+	u64 u64;
+	struct cvmx_pko_pdm_cfg_s {
+		u64 reserved_13_63 : 51;
+		u64 dis_lpd_w2r_fill : 1;
+		u64 en_fr_w2r_ptr_swp : 1;
+		u64 dis_flsh_cache : 1;
+		u64 pko_pad_minlen : 7;
+		u64 diag_mode : 1;
+		u64 alloc_lds : 1;
+		u64 alloc_sts : 1;
+	} s;
+	struct cvmx_pko_pdm_cfg_s cn73xx;
+	struct cvmx_pko_pdm_cfg_s cn78xx;
+	struct cvmx_pko_pdm_cfg_s cn78xxp1;
+	struct cvmx_pko_pdm_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_cfg cvmx_pko_pdm_cfg_t;
+
+/**
+ * cvmx_pko_pdm_cfg_dbg
+ */
+union cvmx_pko_pdm_cfg_dbg {
+	u64 u64;
+	struct cvmx_pko_pdm_cfg_dbg_s {
+		u64 reserved_32_63 : 32;
+		u64 cp_stall_thrshld : 32;
+	} s;
+	struct cvmx_pko_pdm_cfg_dbg_s cn73xx;
+	struct cvmx_pko_pdm_cfg_dbg_s cn78xx;
+	struct cvmx_pko_pdm_cfg_dbg_s cn78xxp1;
+	struct cvmx_pko_pdm_cfg_dbg_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_cfg_dbg cvmx_pko_pdm_cfg_dbg_t;
+
+/**
+ * cvmx_pko_pdm_cp_dbg
+ */
+union cvmx_pko_pdm_cp_dbg {
+	u64 u64;
+	struct cvmx_pko_pdm_cp_dbg_s {
+		u64 reserved_16_63 : 48;
+		u64 stateless_fif_cnt : 6;
+		u64 reserved_5_9 : 5;
+		u64 op_fif_not_full : 5;
+	} s;
+	struct cvmx_pko_pdm_cp_dbg_s cn73xx;
+	struct cvmx_pko_pdm_cp_dbg_s cn78xx;
+	struct cvmx_pko_pdm_cp_dbg_s cn78xxp1;
+	struct cvmx_pko_pdm_cp_dbg_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_cp_dbg cvmx_pko_pdm_cp_dbg_t;
+
+/**
+ * cvmx_pko_pdm_dq#_minpad
+ */
+union cvmx_pko_pdm_dqx_minpad {
+	u64 u64;
+	struct cvmx_pko_pdm_dqx_minpad_s {
+		u64 reserved_1_63 : 63;
+		u64 minpad : 1;
+	} s;
+	struct cvmx_pko_pdm_dqx_minpad_s cn73xx;
+	struct cvmx_pko_pdm_dqx_minpad_s cn78xx;
+	struct cvmx_pko_pdm_dqx_minpad_s cn78xxp1;
+	struct cvmx_pko_pdm_dqx_minpad_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_dqx_minpad cvmx_pko_pdm_dqx_minpad_t;
+
+/**
+ * cvmx_pko_pdm_drpbuf_dbg
+ */
+union cvmx_pko_pdm_drpbuf_dbg {
+	u64 u64;
+	struct cvmx_pko_pdm_drpbuf_dbg_s {
+		u64 reserved_43_63 : 21;
+		u64 sel_nxt_ptr : 1;
+		u64 load_val : 1;
+		u64 rdy : 1;
+		u64 cur_state : 3;
+		u64 reserved_33_36 : 4;
+		u64 track_rd_cnt : 6;
+		u64 track_wr_cnt : 6;
+		u64 reserved_17_20 : 4;
+		u64 mem_addr : 13;
+		u64 mem_en : 4;
+	} s;
+	struct cvmx_pko_pdm_drpbuf_dbg_s cn73xx;
+	struct cvmx_pko_pdm_drpbuf_dbg_s cn78xx;
+	struct cvmx_pko_pdm_drpbuf_dbg_s cn78xxp1;
+	struct cvmx_pko_pdm_drpbuf_dbg_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_drpbuf_dbg cvmx_pko_pdm_drpbuf_dbg_t;
+
+/**
+ * cvmx_pko_pdm_dwpbuf_dbg
+ */
+union cvmx_pko_pdm_dwpbuf_dbg {
+	u64 u64;
+	struct cvmx_pko_pdm_dwpbuf_dbg_s {
+		u64 reserved_48_63 : 16;
+		u64 cmd_proc : 1;
+		u64 reserved_46_46 : 1;
+		u64 mem_data_val : 1;
+		u64 insert_np : 1;
+		u64 reserved_43_43 : 1;
+		u64 sel_nxt_ptr : 1;
+		u64 load_val : 1;
+		u64 rdy : 1;
+		u64 cur_state : 3;
+		u64 mem_rdy : 1;
+		u64 reserved_33_35 : 3;
+		u64 track_rd_cnt : 6;
+		u64 track_wr_cnt : 6;
+		u64 reserved_19_20 : 2;
+		u64 insert_dp : 2;
+		u64 mem_addr : 13;
+		u64 mem_en : 4;
+	} s;
+	struct cvmx_pko_pdm_dwpbuf_dbg_cn73xx {
+		u64 reserved_48_63 : 16;
+		u64 cmd_proc : 1;
+		u64 reserved_46_46 : 1;
+		u64 mem_data_val : 1;
+		u64 insert_np : 1;
+		u64 reserved_43_43 : 1;
+		u64 sel_nxt_ptr : 1;
+		u64 load_val : 1;
+		u64 rdy : 1;
+		u64 reserved_37_39 : 3;
+		u64 mem_rdy : 1;
+		u64 reserved_19_35 : 17;
+		u64 insert_dp : 2;
+		u64 reserved_15_16 : 2;
+		u64 mem_addr : 11;
+		u64 mem_en : 4;
+	} cn73xx;
+	struct cvmx_pko_pdm_dwpbuf_dbg_s cn78xx;
+	struct cvmx_pko_pdm_dwpbuf_dbg_s cn78xxp1;
+	struct cvmx_pko_pdm_dwpbuf_dbg_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_dwpbuf_dbg cvmx_pko_pdm_dwpbuf_dbg_t;
+
+/**
+ * cvmx_pko_pdm_ecc_ctl0
+ */
+union cvmx_pko_pdm_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_pdm_ecc_ctl0_s {
+		u64 flshb_cache_lo_ram_flip : 2;
+		u64 flshb_cache_lo_ram_cdis : 1;
+		u64 flshb_cache_hi_ram_flip : 2;
+		u64 flshb_cache_hi_ram_cdis : 1;
+		u64 isrm_ca_iinst_ram_flip : 2;
+		u64 isrm_ca_iinst_ram_cdis : 1;
+		u64 isrm_ca_cm_ram_flip : 2;
+		u64 isrm_ca_cm_ram_cdis : 1;
+		u64 isrm_st_ram2_flip : 2;
+		u64 isrm_st_ram2_cdis : 1;
+		u64 isrm_st_ram1_flip : 2;
+		u64 isrm_st_ram1_cdis : 1;
+		u64 isrm_st_ram0_flip : 2;
+		u64 isrm_st_ram0_cdis : 1;
+		u64 isrd_st_ram3_flip : 2;
+		u64 isrd_st_ram3_cdis : 1;
+		u64 isrd_st_ram2_flip : 2;
+		u64 isrd_st_ram2_cdis : 1;
+		u64 isrd_st_ram1_flip : 2;
+		u64 isrd_st_ram1_cdis : 1;
+		u64 isrd_st_ram0_flip : 2;
+		u64 isrd_st_ram0_cdis : 1;
+		u64 drp_hi_ram_flip : 2;
+		u64 drp_hi_ram_cdis : 1;
+		u64 drp_lo_ram_flip : 2;
+		u64 drp_lo_ram_cdis : 1;
+		u64 dwp_hi_ram_flip : 2;
+		u64 dwp_hi_ram_cdis : 1;
+		u64 dwp_lo_ram_flip : 2;
+		u64 dwp_lo_ram_cdis : 1;
+		u64 mwp_hi_ram_flip : 2;
+		u64 mwp_hi_ram_cdis : 1;
+		u64 mwp_lo_ram_flip : 2;
+		u64 mwp_lo_ram_cdis : 1;
+		u64 fillb_m_rsp_ram_hi_flip : 2;
+		u64 fillb_m_rsp_ram_hi_cdis : 1;
+		u64 fillb_m_rsp_ram_lo_flip : 2;
+		u64 fillb_m_rsp_ram_lo_cdis : 1;
+		u64 fillb_d_rsp_ram_hi_flip : 2;
+		u64 fillb_d_rsp_ram_hi_cdis : 1;
+		u64 fillb_d_rsp_ram_lo_flip : 2;
+		u64 fillb_d_rsp_ram_lo_cdis : 1;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_pdm_ecc_ctl0_cn73xx {
+		u64 flshb_cache_lo_ram_flip : 2;
+		u64 flshb_cache_lo_ram_cdis : 1;
+		u64 flshb_cache_hi_ram_flip : 2;
+		u64 flshb_cache_hi_ram_cdis : 1;
+		u64 isrm_ca_iinst_ram_flip : 2;
+		u64 isrm_ca_iinst_ram_cdis : 1;
+		u64 isrm_ca_cm_ram_flip : 2;
+		u64 isrm_ca_cm_ram_cdis : 1;
+		u64 isrm_st_ram2_flip : 2;
+		u64 isrm_st_ram2_cdis : 1;
+		u64 isrm_st_ram1_flip : 2;
+		u64 isrm_st_ram1_cdis : 1;
+		u64 isrm_st_ram0_flip : 2;
+		u64 isrm_st_ram0_cdis : 1;
+		u64 isrd_st_ram3_flip : 2;
+		u64 isrd_st_ram3_cdis : 1;
+		u64 isrd_st_ram2_flip : 2;
+		u64 isrd_st_ram2_cdis : 1;
+		u64 isrd_st_ram1_flip : 2;
+		u64 isrd_st_ram1_cdis : 1;
+		u64 isrd_st_ram0_flip : 2;
+		u64 isrd_st_ram0_cdis : 1;
+		u64 drp_hi_ram_flip : 2;
+		u64 drp_hi_ram_cdis : 1;
+		u64 drp_lo_ram_flip : 2;
+		u64 drp_lo_ram_cdis : 1;
+		u64 dwp_hi_ram_flip : 2;
+		u64 dwp_hi_ram_cdis : 1;
+		u64 dwp_lo_ram_flip : 2;
+		u64 dwp_lo_ram_cdis : 1;
+		u64 reserved_13_18 : 6;
+		u64 fillb_m_rsp_ram_hi_flip : 2;
+		u64 fillb_m_rsp_ram_hi_cdis : 1;
+		u64 fillb_m_rsp_ram_lo_flip : 2;
+		u64 fillb_m_rsp_ram_lo_cdis : 1;
+		u64 fillb_d_rsp_ram_hi_flip : 2;
+		u64 fillb_d_rsp_ram_hi_cdis : 1;
+		u64 fillb_d_rsp_ram_lo_flip : 2;
+		u64 fillb_d_rsp_ram_lo_cdis : 1;
+		u64 reserved_0_0 : 1;
+	} cn73xx;
+	struct cvmx_pko_pdm_ecc_ctl0_s cn78xx;
+	struct cvmx_pko_pdm_ecc_ctl0_s cn78xxp1;
+	struct cvmx_pko_pdm_ecc_ctl0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_ecc_ctl0 cvmx_pko_pdm_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_pdm_ecc_ctl1
+ */
+union cvmx_pko_pdm_ecc_ctl1 {
+	u64 u64;
+	struct cvmx_pko_pdm_ecc_ctl1_s {
+		u64 reserved_15_63 : 49;
+		u64 buf_wm_ram_flip : 2;
+		u64 buf_wm_ram_cdis : 1;
+		u64 mwp_mem0_ram_flip : 2;
+		u64 mwp_mem1_ram_flip : 2;
+		u64 mwp_mem2_ram_flip : 2;
+		u64 mwp_mem3_ram_flip : 2;
+		u64 mwp_ram_cdis : 1;
+		u64 minpad_ram_flip : 2;
+		u64 minpad_ram_cdis : 1;
+	} s;
+	struct cvmx_pko_pdm_ecc_ctl1_s cn73xx;
+	struct cvmx_pko_pdm_ecc_ctl1_s cn78xx;
+	struct cvmx_pko_pdm_ecc_ctl1_s cn78xxp1;
+	struct cvmx_pko_pdm_ecc_ctl1_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_ecc_ctl1 cvmx_pko_pdm_ecc_ctl1_t;
+
+/**
+ * cvmx_pko_pdm_ecc_dbe_sts0
+ */
+union cvmx_pko_pdm_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pdm_ecc_dbe_sts0_s {
+		u64 flshb_cache_lo_ram_dbe : 1;
+		u64 flshb_cache_hi_ram_dbe : 1;
+		u64 isrm_ca_iinst_ram_dbe : 1;
+		u64 isrm_ca_cm_ram_dbe : 1;
+		u64 isrm_st_ram2_dbe : 1;
+		u64 isrm_st_ram1_dbe : 1;
+		u64 isrm_st_ram0_dbe : 1;
+		u64 isrd_st_ram3_dbe : 1;
+		u64 isrd_st_ram2_dbe : 1;
+		u64 isrd_st_ram1_dbe : 1;
+		u64 isrd_st_ram0_dbe : 1;
+		u64 drp_hi_ram_dbe : 1;
+		u64 drp_lo_ram_dbe : 1;
+		u64 dwp_hi_ram_dbe : 1;
+		u64 dwp_lo_ram_dbe : 1;
+		u64 mwp_hi_ram_dbe : 1;
+		u64 mwp_lo_ram_dbe : 1;
+		u64 fillb_m_rsp_ram_hi_dbe : 1;
+		u64 fillb_m_rsp_ram_lo_dbe : 1;
+		u64 fillb_d_rsp_ram_hi_dbe : 1;
+		u64 fillb_d_rsp_ram_lo_dbe : 1;
+		u64 minpad_ram_dbe : 1;
+		u64 mwp_hi_spt_ram_dbe : 1;
+		u64 mwp_lo_spt_ram_dbe : 1;
+		u64 buf_wm_ram_dbe : 1;
+		u64 reserved_0_38 : 39;
+	} s;
+	struct cvmx_pko_pdm_ecc_dbe_sts0_s cn73xx;
+	struct cvmx_pko_pdm_ecc_dbe_sts0_s cn78xx;
+	struct cvmx_pko_pdm_ecc_dbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pdm_ecc_dbe_sts0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_ecc_dbe_sts0 cvmx_pko_pdm_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_pdm_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_pdm_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pdm_ecc_dbe_sts_cmb0_s {
+		u64 pdm_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pdm_ecc_dbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pdm_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pdm_ecc_dbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pdm_ecc_dbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_ecc_dbe_sts_cmb0 cvmx_pko_pdm_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pdm_ecc_sbe_sts0
+ */
+union cvmx_pko_pdm_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pdm_ecc_sbe_sts0_s {
+		u64 flshb_cache_lo_ram_sbe : 1;
+		u64 flshb_cache_hi_ram_sbe : 1;
+		u64 isrm_ca_iinst_ram_sbe : 1;
+		u64 isrm_ca_cm_ram_sbe : 1;
+		u64 isrm_st_ram2_sbe : 1;
+		u64 isrm_st_ram1_sbe : 1;
+		u64 isrm_st_ram0_sbe : 1;
+		u64 isrd_st_ram3_sbe : 1;
+		u64 isrd_st_ram2_sbe : 1;
+		u64 isrd_st_ram1_sbe : 1;
+		u64 isrd_st_ram0_sbe : 1;
+		u64 drp_hi_ram_sbe : 1;
+		u64 drp_lo_ram_sbe : 1;
+		u64 dwp_hi_ram_sbe : 1;
+		u64 dwp_lo_ram_sbe : 1;
+		u64 mwp_hi_ram_sbe : 1;
+		u64 mwp_lo_ram_sbe : 1;
+		u64 fillb_m_rsp_ram_hi_sbe : 1;
+		u64 fillb_m_rsp_ram_lo_sbe : 1;
+		u64 fillb_d_rsp_ram_hi_sbe : 1;
+		u64 fillb_d_rsp_ram_lo_sbe : 1;
+		u64 minpad_ram_sbe : 1;
+		u64 mwp_hi_spt_ram_sbe : 1;
+		u64 mwp_lo_spt_ram_sbe : 1;
+		u64 buf_wm_ram_sbe : 1;
+		u64 reserved_0_38 : 39;
+	} s;
+	struct cvmx_pko_pdm_ecc_sbe_sts0_s cn73xx;
+	struct cvmx_pko_pdm_ecc_sbe_sts0_s cn78xx;
+	struct cvmx_pko_pdm_ecc_sbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pdm_ecc_sbe_sts0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_ecc_sbe_sts0 cvmx_pko_pdm_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_pdm_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_pdm_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pdm_ecc_sbe_sts_cmb0_s {
+		u64 pdm_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pdm_ecc_sbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pdm_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pdm_ecc_sbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pdm_ecc_sbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_ecc_sbe_sts_cmb0 cvmx_pko_pdm_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pdm_fillb_dbg0
+ */
+union cvmx_pko_pdm_fillb_dbg0 {
+	u64 u64;
+	struct cvmx_pko_pdm_fillb_dbg0_s {
+		u64 reserved_57_63 : 7;
+		u64 pd_seq : 5;
+		u64 resp_pd_seq : 5;
+		u64 d_rsp_lo_ram_addr_sel : 2;
+		u64 d_rsp_hi_ram_addr_sel : 2;
+		u64 d_rsp_rd_seq : 5;
+		u64 d_rsp_fifo_rd_seq : 5;
+		u64 d_fill_req_fifo_val : 1;
+		u64 d_rsp_ram_valid : 32;
+	} s;
+	struct cvmx_pko_pdm_fillb_dbg0_s cn73xx;
+	struct cvmx_pko_pdm_fillb_dbg0_s cn78xx;
+	struct cvmx_pko_pdm_fillb_dbg0_s cn78xxp1;
+	struct cvmx_pko_pdm_fillb_dbg0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_fillb_dbg0 cvmx_pko_pdm_fillb_dbg0_t;
+
+/**
+ * cvmx_pko_pdm_fillb_dbg1
+ */
+union cvmx_pko_pdm_fillb_dbg1 {
+	u64 u64;
+	struct cvmx_pko_pdm_fillb_dbg1_s {
+		u64 reserved_57_63 : 7;
+		u64 mp_seq : 5;
+		u64 resp_mp_seq : 5;
+		u64 m_rsp_lo_ram_addr_sel : 2;
+		u64 m_rsp_hi_ram_addr_sel : 2;
+		u64 m_rsp_rd_seq : 5;
+		u64 m_rsp_fifo_rd_seq : 5;
+		u64 m_fill_req_fifo_val : 1;
+		u64 m_rsp_ram_valid : 32;
+	} s;
+	struct cvmx_pko_pdm_fillb_dbg1_s cn73xx;
+	struct cvmx_pko_pdm_fillb_dbg1_s cn78xx;
+	struct cvmx_pko_pdm_fillb_dbg1_s cn78xxp1;
+	struct cvmx_pko_pdm_fillb_dbg1_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_fillb_dbg1 cvmx_pko_pdm_fillb_dbg1_t;
+
+/**
+ * cvmx_pko_pdm_fillb_dbg2
+ */
+union cvmx_pko_pdm_fillb_dbg2 {
+	u64 u64;
+	struct cvmx_pko_pdm_fillb_dbg2_s {
+		u64 reserved_9_63 : 55;
+		u64 fillb_sm : 5;
+		u64 reserved_3_3 : 1;
+		u64 iobp0_credit_cntr : 3;
+	} s;
+	struct cvmx_pko_pdm_fillb_dbg2_s cn73xx;
+	struct cvmx_pko_pdm_fillb_dbg2_s cn78xx;
+	struct cvmx_pko_pdm_fillb_dbg2_s cn78xxp1;
+	struct cvmx_pko_pdm_fillb_dbg2_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_fillb_dbg2 cvmx_pko_pdm_fillb_dbg2_t;
+
+/**
+ * cvmx_pko_pdm_flshb_dbg0
+ */
+union cvmx_pko_pdm_flshb_dbg0 {
+	u64 u64;
+	struct cvmx_pko_pdm_flshb_dbg0_s {
+		u64 reserved_44_63 : 20;
+		u64 flshb_sm : 7;
+		u64 flshb_ctl_sm : 9;
+		u64 cam_hptr : 5;
+		u64 cam_tptr : 5;
+		u64 expected_stdns : 6;
+		u64 d_flshb_eot_cntr : 3;
+		u64 m_flshb_eot_cntr : 3;
+		u64 ncbi_credit_cntr : 6;
+	} s;
+	struct cvmx_pko_pdm_flshb_dbg0_s cn73xx;
+	struct cvmx_pko_pdm_flshb_dbg0_s cn78xx;
+	struct cvmx_pko_pdm_flshb_dbg0_s cn78xxp1;
+	struct cvmx_pko_pdm_flshb_dbg0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_flshb_dbg0 cvmx_pko_pdm_flshb_dbg0_t;
+
+/**
+ * cvmx_pko_pdm_flshb_dbg1
+ */
+union cvmx_pko_pdm_flshb_dbg1 {
+	u64 u64;
+	struct cvmx_pko_pdm_flshb_dbg1_s {
+		u64 cam_stdn : 32;
+		u64 cam_valid : 32;
+	} s;
+	struct cvmx_pko_pdm_flshb_dbg1_s cn73xx;
+	struct cvmx_pko_pdm_flshb_dbg1_s cn78xx;
+	struct cvmx_pko_pdm_flshb_dbg1_s cn78xxp1;
+	struct cvmx_pko_pdm_flshb_dbg1_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_flshb_dbg1 cvmx_pko_pdm_flshb_dbg1_t;
+
+/**
+ * cvmx_pko_pdm_intf_dbg_rd
+ *
+ * For diagnostic use only.
+ *
+ */
+union cvmx_pko_pdm_intf_dbg_rd {
+	u64 u64;
+	struct cvmx_pko_pdm_intf_dbg_rd_s {
+		u64 reserved_48_63 : 16;
+		u64 in_flight : 8;
+		u64 pdm_req_cred_cnt : 8;
+		u64 pse_buf_waddr : 8;
+		u64 pse_buf_raddr : 8;
+		u64 resp_buf_waddr : 8;
+		u64 resp_buf_raddr : 8;
+	} s;
+	struct cvmx_pko_pdm_intf_dbg_rd_s cn73xx;
+	struct cvmx_pko_pdm_intf_dbg_rd_s cn78xx;
+	struct cvmx_pko_pdm_intf_dbg_rd_s cn78xxp1;
+	struct cvmx_pko_pdm_intf_dbg_rd_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_intf_dbg_rd cvmx_pko_pdm_intf_dbg_rd_t;
+
+/**
+ * cvmx_pko_pdm_isrd_dbg
+ */
+union cvmx_pko_pdm_isrd_dbg {
+	u64 u64;
+	struct cvmx_pko_pdm_isrd_dbg_s {
+		u64 isrd_vals_in : 4;
+		u64 reserved_59_59 : 1;
+		u64 req_hptr : 6;
+		u64 rdy_hptr : 6;
+		u64 reserved_44_46 : 3;
+		u64 in_arb_reqs : 8;
+		u64 in_arb_gnts : 7;
+		u64 cmt_arb_reqs : 7;
+		u64 cmt_arb_gnts : 7;
+		u64 in_use : 4;
+		u64 has_cred : 4;
+		u64 val_exec : 7;
+	} s;
+	struct cvmx_pko_pdm_isrd_dbg_s cn73xx;
+	struct cvmx_pko_pdm_isrd_dbg_s cn78xx;
+	struct cvmx_pko_pdm_isrd_dbg_cn78xxp1 {
+		u64 reserved_44_63 : 20;
+		u64 in_arb_reqs : 8;
+		u64 in_arb_gnts : 7;
+		u64 cmt_arb_reqs : 7;
+		u64 cmt_arb_gnts : 7;
+		u64 in_use : 4;
+		u64 has_cred : 4;
+		u64 val_exec : 7;
+	} cn78xxp1;
+	struct cvmx_pko_pdm_isrd_dbg_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_isrd_dbg cvmx_pko_pdm_isrd_dbg_t;
+
+/**
+ * cvmx_pko_pdm_isrd_dbg_dq
+ */
+union cvmx_pko_pdm_isrd_dbg_dq {
+	u64 u64;
+	struct cvmx_pko_pdm_isrd_dbg_dq_s {
+		u64 reserved_46_63 : 18;
+		u64 pebrd_sic_dq : 10;
+		u64 reserved_34_35 : 2;
+		u64 pebfill_sic_dq : 10;
+		u64 reserved_22_23 : 2;
+		u64 fr_sic_dq : 10;
+		u64 reserved_10_11 : 2;
+		u64 cp_sic_dq : 10;
+	} s;
+	struct cvmx_pko_pdm_isrd_dbg_dq_s cn73xx;
+	struct cvmx_pko_pdm_isrd_dbg_dq_s cn78xx;
+	struct cvmx_pko_pdm_isrd_dbg_dq_s cn78xxp1;
+	struct cvmx_pko_pdm_isrd_dbg_dq_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_isrd_dbg_dq cvmx_pko_pdm_isrd_dbg_dq_t;
+
+/**
+ * cvmx_pko_pdm_isrm_dbg
+ */
+union cvmx_pko_pdm_isrm_dbg {
+	u64 u64;
+	struct cvmx_pko_pdm_isrm_dbg_s {
+		u64 val_in : 3;
+		u64 reserved_34_60 : 27;
+		u64 in_arb_reqs : 7;
+		u64 in_arb_gnts : 6;
+		u64 cmt_arb_reqs : 6;
+		u64 cmt_arb_gnts : 6;
+		u64 in_use : 3;
+		u64 has_cred : 3;
+		u64 val_exec : 3;
+	} s;
+	struct cvmx_pko_pdm_isrm_dbg_s cn73xx;
+	struct cvmx_pko_pdm_isrm_dbg_s cn78xx;
+	struct cvmx_pko_pdm_isrm_dbg_cn78xxp1 {
+		u64 reserved_34_63 : 30;
+		u64 in_arb_reqs : 7;
+		u64 in_arb_gnts : 6;
+		u64 cmt_arb_reqs : 6;
+		u64 cmt_arb_gnts : 6;
+		u64 in_use : 3;
+		u64 has_cred : 3;
+		u64 val_exec : 3;
+	} cn78xxp1;
+	struct cvmx_pko_pdm_isrm_dbg_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_isrm_dbg cvmx_pko_pdm_isrm_dbg_t;
+
+/**
+ * cvmx_pko_pdm_isrm_dbg_dq
+ */
+union cvmx_pko_pdm_isrm_dbg_dq {
+	u64 u64;
+	struct cvmx_pko_pdm_isrm_dbg_dq_s {
+		u64 reserved_34_63 : 30;
+		u64 ack_sic_dq : 10;
+		u64 reserved_22_23 : 2;
+		u64 fr_sic_dq : 10;
+		u64 reserved_10_11 : 2;
+		u64 cp_sic_dq : 10;
+	} s;
+	struct cvmx_pko_pdm_isrm_dbg_dq_s cn73xx;
+	struct cvmx_pko_pdm_isrm_dbg_dq_s cn78xx;
+	struct cvmx_pko_pdm_isrm_dbg_dq_s cn78xxp1;
+	struct cvmx_pko_pdm_isrm_dbg_dq_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_isrm_dbg_dq cvmx_pko_pdm_isrm_dbg_dq_t;
+
+/**
+ * cvmx_pko_pdm_mem_addr
+ */
+union cvmx_pko_pdm_mem_addr {
+	u64 u64;
+	struct cvmx_pko_pdm_mem_addr_s {
+		u64 memsel : 3;
+		u64 reserved_17_60 : 44;
+		u64 memaddr : 14;
+		u64 reserved_2_2 : 1;
+		u64 membanksel : 2;
+	} s;
+	struct cvmx_pko_pdm_mem_addr_s cn73xx;
+	struct cvmx_pko_pdm_mem_addr_s cn78xx;
+	struct cvmx_pko_pdm_mem_addr_s cn78xxp1;
+	struct cvmx_pko_pdm_mem_addr_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_mem_addr cvmx_pko_pdm_mem_addr_t;
+
+/**
+ * cvmx_pko_pdm_mem_data
+ */
+union cvmx_pko_pdm_mem_data {
+	u64 u64;
+	struct cvmx_pko_pdm_mem_data_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_pko_pdm_mem_data_s cn73xx;
+	struct cvmx_pko_pdm_mem_data_s cn78xx;
+	struct cvmx_pko_pdm_mem_data_s cn78xxp1;
+	struct cvmx_pko_pdm_mem_data_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_mem_data cvmx_pko_pdm_mem_data_t;
+
+/**
+ * cvmx_pko_pdm_mem_rw_ctl
+ */
+union cvmx_pko_pdm_mem_rw_ctl {
+	u64 u64;
+	struct cvmx_pko_pdm_mem_rw_ctl_s {
+		u64 reserved_2_63 : 62;
+		u64 read : 1;
+		u64 write : 1;
+	} s;
+	struct cvmx_pko_pdm_mem_rw_ctl_s cn73xx;
+	struct cvmx_pko_pdm_mem_rw_ctl_s cn78xx;
+	struct cvmx_pko_pdm_mem_rw_ctl_s cn78xxp1;
+	struct cvmx_pko_pdm_mem_rw_ctl_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_mem_rw_ctl cvmx_pko_pdm_mem_rw_ctl_t;
+
+/**
+ * cvmx_pko_pdm_mem_rw_sts
+ */
+union cvmx_pko_pdm_mem_rw_sts {
+	u64 u64;
+	struct cvmx_pko_pdm_mem_rw_sts_s {
+		u64 reserved_1_63 : 63;
+		u64 readdone : 1;
+	} s;
+	struct cvmx_pko_pdm_mem_rw_sts_s cn73xx;
+	struct cvmx_pko_pdm_mem_rw_sts_s cn78xx;
+	struct cvmx_pko_pdm_mem_rw_sts_s cn78xxp1;
+	struct cvmx_pko_pdm_mem_rw_sts_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_mem_rw_sts cvmx_pko_pdm_mem_rw_sts_t;
+
+/**
+ * cvmx_pko_pdm_mwpbuf_dbg
+ */
+union cvmx_pko_pdm_mwpbuf_dbg {
+	u64 u64;
+	struct cvmx_pko_pdm_mwpbuf_dbg_s {
+		u64 reserved_49_63 : 15;
+		u64 str_proc : 1;
+		u64 cmd_proc : 1;
+		u64 str_val : 1;
+		u64 mem_data_val : 1;
+		u64 insert_np : 1;
+		u64 insert_mp : 1;
+		u64 sel_nxt_ptr : 1;
+		u64 load_val : 1;
+		u64 rdy : 1;
+		u64 cur_state : 3;
+		u64 mem_rdy : 1;
+		u64 str_rdy : 1;
+		u64 contention_type : 2;
+		u64 track_rd_cnt : 6;
+		u64 track_wr_cnt : 6;
+		u64 mem_wen : 4;
+		u64 mem_addr : 13;
+		u64 mem_en : 4;
+	} s;
+	struct cvmx_pko_pdm_mwpbuf_dbg_cn73xx {
+		u64 reserved_49_63 : 15;
+		u64 str_proc : 1;
+		u64 cmd_proc : 1;
+		u64 str_val : 1;
+		u64 mem_data_val : 1;
+		u64 insert_np : 1;
+		u64 insert_mp : 1;
+		u64 sel_nxt_ptr : 1;
+		u64 load_val : 1;
+		u64 rdy : 1;
+		u64 cur_state : 3;
+		u64 mem_rdy : 1;
+		u64 str_rdy : 1;
+		u64 contention_type : 2;
+		u64 reserved_21_32 : 12;
+		u64 mem_wen : 4;
+		u64 reserved_15_16 : 2;
+		u64 mem_addr : 11;
+		u64 mem_en : 4;
+	} cn73xx;
+	struct cvmx_pko_pdm_mwpbuf_dbg_s cn78xx;
+	struct cvmx_pko_pdm_mwpbuf_dbg_s cn78xxp1;
+	struct cvmx_pko_pdm_mwpbuf_dbg_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_mwpbuf_dbg cvmx_pko_pdm_mwpbuf_dbg_t;
+
+/**
+ * cvmx_pko_pdm_sts
+ */
+union cvmx_pko_pdm_sts {
+	u64 u64;
+	struct cvmx_pko_pdm_sts_s {
+		u64 reserved_38_63 : 26;
+		u64 cp_stalled_thrshld_hit : 1;
+		u64 reserved_35_36 : 2;
+		u64 mwpbuf_data_val_err : 1;
+		u64 drpbuf_data_val_err : 1;
+		u64 dwpbuf_data_val_err : 1;
+		u64 reserved_30_31 : 2;
+		u64 qcmd_iobx_err_sts : 4;
+		u64 qcmd_iobx_err : 1;
+		u64 sendpkt_lmtdma_err_sts : 4;
+		u64 sendpkt_lmtdma_err : 1;
+		u64 sendpkt_lmtst_err_sts : 4;
+		u64 sendpkt_lmtst_err : 1;
+		u64 fpa_no_ptrs : 1;
+		u64 reserved_12_13 : 2;
+		u64 cp_sendpkt_err_no_drp_code : 2;
+		u64 cp_sendpkt_err_no_drp : 1;
+		u64 reserved_7_8 : 2;
+		u64 cp_sendpkt_err_drop_code : 3;
+		u64 cp_sendpkt_err_drop : 1;
+		u64 reserved_1_2 : 2;
+		u64 desc_crc_err : 1;
+	} s;
+	struct cvmx_pko_pdm_sts_s cn73xx;
+	struct cvmx_pko_pdm_sts_s cn78xx;
+	struct cvmx_pko_pdm_sts_s cn78xxp1;
+	struct cvmx_pko_pdm_sts_s cnf75xx;
+};
+
+typedef union cvmx_pko_pdm_sts cvmx_pko_pdm_sts_t;
+
+/**
+ * cvmx_pko_peb_bist_status
+ *
+ * Each bit is the BIST result of an individual memory (per bit, 0 = pass and 1 = fail).
+ *
+ */
+union cvmx_pko_peb_bist_status {
+	u64 u64;
+	struct cvmx_pko_peb_bist_status_s {
+		u64 reserved_26_63 : 38;
+		u64 add_work_fifo : 1;
+		u64 pdm_pse_buf_ram : 1;
+		u64 iobp0_fifo_ram : 1;
+		u64 iobp1_fifo_ram : 1;
+		u64 state_mem0 : 1;
+		u64 reserved_19_20 : 2;
+		u64 state_mem3 : 1;
+		u64 iobp1_uid_fifo_ram : 1;
+		u64 nxt_link_ptr_ram : 1;
+		u64 pd_bank0_ram : 1;
+		u64 pd_bank1_ram : 1;
+		u64 pd_bank2_ram : 1;
+		u64 pd_bank3_ram : 1;
+		u64 pd_var_bank_ram : 1;
+		u64 pdm_resp_buf_ram : 1;
+		u64 tx_fifo_pkt_ram : 1;
+		u64 tx_fifo_hdr_ram : 1;
+		u64 tx_fifo_crc_ram : 1;
+		u64 ts_addwork_ram : 1;
+		u64 send_mem_ts_fifo : 1;
+		u64 send_mem_stdn_fifo : 1;
+		u64 send_mem_fifo : 1;
+		u64 pkt_mrk_ram : 1;
+		u64 peb_st_inf_ram : 1;
+		u64 peb_sm_jmp_ram : 1;
+	} s;
+	struct cvmx_pko_peb_bist_status_cn73xx {
+		u64 reserved_26_63 : 38;
+		u64 add_work_fifo : 1;
+		u64 pdm_pse_buf_ram : 1;
+		u64 iobp0_fifo_ram : 1;
+		u64 iobp1_fifo_ram : 1;
+		u64 state_mem0 : 1;
+		u64 reserved_19_20 : 2;
+		u64 state_mem3 : 1;
+		u64 iobp1_uid_fifo_ram : 1;
+		u64 nxt_link_ptr_ram : 1;
+		u64 pd_bank0_ram : 1;
+		u64 reserved_13_14 : 2;
+		u64 pd_bank3_ram : 1;
+		u64 pd_var_bank_ram : 1;
+		u64 pdm_resp_buf_ram : 1;
+		u64 tx_fifo_pkt_ram : 1;
+		u64 tx_fifo_hdr_ram : 1;
+		u64 tx_fifo_crc_ram : 1;
+		u64 ts_addwork_ram : 1;
+		u64 send_mem_ts_fifo : 1;
+		u64 send_mem_stdn_fifo : 1;
+		u64 send_mem_fifo : 1;
+		u64 pkt_mrk_ram : 1;
+		u64 peb_st_inf_ram : 1;
+		u64 reserved_0_0 : 1;
+	} cn73xx;
+	struct cvmx_pko_peb_bist_status_cn73xx cn78xx;
+	struct cvmx_pko_peb_bist_status_s cn78xxp1;
+	struct cvmx_pko_peb_bist_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_peb_bist_status cvmx_pko_peb_bist_status_t;
+
+/**
+ * cvmx_pko_peb_ecc_ctl0
+ */
+union cvmx_pko_peb_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_peb_ecc_ctl0_s {
+		u64 iobp1_uid_fifo_ram_flip : 2;
+		u64 iobp1_uid_fifo_ram_cdis : 1;
+		u64 iobp0_fifo_ram_flip : 2;
+		u64 iobp0_fifo_ram_cdis : 1;
+		u64 iobp1_fifo_ram_flip : 2;
+		u64 iobp1_fifo_ram_cdis : 1;
+		u64 pdm_resp_buf_ram_flip : 2;
+		u64 pdm_resp_buf_ram_cdis : 1;
+		u64 pdm_pse_buf_ram_flip : 2;
+		u64 pdm_pse_buf_ram_cdis : 1;
+		u64 peb_sm_jmp_ram_flip : 2;
+		u64 peb_sm_jmp_ram_cdis : 1;
+		u64 peb_st_inf_ram_flip : 2;
+		u64 peb_st_inf_ram_cdis : 1;
+		u64 pd_bank3_ram_flip : 2;
+		u64 pd_bank3_ram_cdis : 1;
+		u64 pd_bank2_ram_flip : 2;
+		u64 pd_bank2_ram_cdis : 1;
+		u64 pd_bank1_ram_flip : 2;
+		u64 pd_bank1_ram_cdis : 1;
+		u64 pd_bank0_ram_flip : 2;
+		u64 pd_bank0_ram_cdis : 1;
+		u64 pd_var_bank_ram_flip : 2;
+		u64 pd_var_bank_ram_cdis : 1;
+		u64 tx_fifo_crc_ram_flip : 2;
+		u64 tx_fifo_crc_ram_cdis : 1;
+		u64 tx_fifo_hdr_ram_flip : 2;
+		u64 tx_fifo_hdr_ram_cdis : 1;
+		u64 tx_fifo_pkt_ram_flip : 2;
+		u64 tx_fifo_pkt_ram_cdis : 1;
+		u64 add_work_fifo_flip : 2;
+		u64 add_work_fifo_cdis : 1;
+		u64 send_mem_fifo_flip : 2;
+		u64 send_mem_fifo_cdis : 1;
+		u64 send_mem_stdn_fifo_flip : 2;
+		u64 send_mem_stdn_fifo_cdis : 1;
+		u64 send_mem_ts_fifo_flip : 2;
+		u64 send_mem_ts_fifo_cdis : 1;
+		u64 nxt_link_ptr_ram_flip : 2;
+		u64 nxt_link_ptr_ram_cdis : 1;
+		u64 pkt_mrk_ram_flip : 2;
+		u64 pkt_mrk_ram_cdis : 1;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_peb_ecc_ctl0_cn73xx {
+		u64 iobp1_uid_fifo_ram_flip : 2;
+		u64 iobp1_uid_fifo_ram_cdis : 1;
+		u64 iobp0_fifo_ram_flip : 2;
+		u64 iobp0_fifo_ram_cdis : 1;
+		u64 iobp1_fifo_ram_flip : 2;
+		u64 iobp1_fifo_ram_cdis : 1;
+		u64 pdm_resp_buf_ram_flip : 2;
+		u64 pdm_resp_buf_ram_cdis : 1;
+		u64 pdm_pse_buf_ram_flip : 2;
+		u64 pdm_pse_buf_ram_cdis : 1;
+		u64 reserved_46_48 : 3;
+		u64 peb_st_inf_ram_flip : 2;
+		u64 peb_st_inf_ram_cdis : 1;
+		u64 pd_bank3_ram_flip : 2;
+		u64 pd_bank3_ram_cdis : 1;
+		u64 reserved_34_39 : 6;
+		u64 pd_bank0_ram_flip : 2;
+		u64 pd_bank0_ram_cdis : 1;
+		u64 pd_var_bank_ram_flip : 2;
+		u64 pd_var_bank_ram_cdis : 1;
+		u64 tx_fifo_crc_ram_flip : 2;
+		u64 tx_fifo_crc_ram_cdis : 1;
+		u64 tx_fifo_hdr_ram_flip : 2;
+		u64 tx_fifo_hdr_ram_cdis : 1;
+		u64 tx_fifo_pkt_ram_flip : 2;
+		u64 tx_fifo_pkt_ram_cdis : 1;
+		u64 add_work_fifo_flip : 2;
+		u64 add_work_fifo_cdis : 1;
+		u64 send_mem_fifo_flip : 2;
+		u64 send_mem_fifo_cdis : 1;
+		u64 send_mem_stdn_fifo_flip : 2;
+		u64 send_mem_stdn_fifo_cdis : 1;
+		u64 send_mem_ts_fifo_flip : 2;
+		u64 send_mem_ts_fifo_cdis : 1;
+		u64 nxt_link_ptr_ram_flip : 2;
+		u64 nxt_link_ptr_ram_cdis : 1;
+		u64 pkt_mrk_ram_flip : 2;
+		u64 pkt_mrk_ram_cdis : 1;
+		u64 reserved_0_0 : 1;
+	} cn73xx;
+	struct cvmx_pko_peb_ecc_ctl0_cn73xx cn78xx;
+	struct cvmx_pko_peb_ecc_ctl0_s cn78xxp1;
+	struct cvmx_pko_peb_ecc_ctl0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_peb_ecc_ctl0 cvmx_pko_peb_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_peb_ecc_ctl1
+ */
+union cvmx_pko_peb_ecc_ctl1 {
+	u64 u64;
+	struct cvmx_pko_peb_ecc_ctl1_s {
+		u64 ts_addwork_ram_flip : 2;
+		u64 ts_addwork_ram_cdis : 1;
+		u64 state_mem0_flip : 2;
+		u64 state_mem0_cdis : 1;
+		u64 reserved_52_57 : 6;
+		u64 state_mem3_flip : 2;
+		u64 state_mem3_cdis : 1;
+		u64 reserved_0_48 : 49;
+	} s;
+	struct cvmx_pko_peb_ecc_ctl1_s cn73xx;
+	struct cvmx_pko_peb_ecc_ctl1_cn78xx {
+		u64 ts_addwork_ram_flip : 2;
+		u64 ts_addwork_ram_cdis : 1;
+		u64 reserved_0_60 : 61;
+	} cn78xx;
+	struct cvmx_pko_peb_ecc_ctl1_cn78xx cn78xxp1;
+	struct cvmx_pko_peb_ecc_ctl1_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_ecc_ctl1 cvmx_pko_peb_ecc_ctl1_t;
+
+/**
+ * cvmx_pko_peb_ecc_dbe_sts0
+ */
+union cvmx_pko_peb_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_peb_ecc_dbe_sts0_s {
+		u64 iobp1_uid_fifo_ram_dbe : 1;
+		u64 iobp0_fifo_ram_dbe : 1;
+		u64 iobp1_fifo_ram_dbe : 1;
+		u64 pdm_resp_buf_ram_dbe : 1;
+		u64 pdm_pse_buf_ram_dbe : 1;
+		u64 peb_sm_jmp_ram_dbe : 1;
+		u64 peb_st_inf_ram_dbe : 1;
+		u64 pd_bank3_ram_dbe : 1;
+		u64 pd_bank2_ram_dbe : 1;
+		u64 pd_bank1_ram_dbe : 1;
+		u64 pd_bank0_ram_dbe : 1;
+		u64 pd_var_bank_ram_dbe : 1;
+		u64 tx_fifo_crc_ram_dbe : 1;
+		u64 tx_fifo_hdr_ram_dbe : 1;
+		u64 tx_fifo_pkt_ram_dbe : 1;
+		u64 add_work_fifo_dbe : 1;
+		u64 send_mem_fifo_dbe : 1;
+		u64 send_mem_stdn_fifo_dbe : 1;
+		u64 send_mem_ts_fifo_dbe : 1;
+		u64 nxt_link_ptr_ram_dbe : 1;
+		u64 pkt_mrk_ram_dbe : 1;
+		u64 ts_addwork_ram_dbe : 1;
+		u64 state_mem0_dbe : 1;
+		u64 reserved_39_40 : 2;
+		u64 state_mem3_dbe : 1;
+		u64 reserved_0_37 : 38;
+	} s;
+	struct cvmx_pko_peb_ecc_dbe_sts0_cn73xx {
+		u64 iobp1_uid_fifo_ram_dbe : 1;
+		u64 iobp0_fifo_ram_dbe : 1;
+		u64 iobp1_fifo_ram_dbe : 1;
+		u64 pdm_resp_buf_ram_dbe : 1;
+		u64 pdm_pse_buf_ram_dbe : 1;
+		u64 reserved_58_58 : 1;
+		u64 peb_st_inf_ram_dbe : 1;
+		u64 pd_bank3_ram_dbe : 1;
+		u64 reserved_54_55 : 2;
+		u64 pd_bank0_ram_dbe : 1;
+		u64 pd_var_bank_ram_dbe : 1;
+		u64 tx_fifo_crc_ram_dbe : 1;
+		u64 tx_fifo_hdr_ram_dbe : 1;
+		u64 tx_fifo_pkt_ram_dbe : 1;
+		u64 add_work_fifo_dbe : 1;
+		u64 send_mem_fifo_dbe : 1;
+		u64 send_mem_stdn_fifo_dbe : 1;
+		u64 send_mem_ts_fifo_dbe : 1;
+		u64 nxt_link_ptr_ram_dbe : 1;
+		u64 pkt_mrk_ram_dbe : 1;
+		u64 ts_addwork_ram_dbe : 1;
+		u64 state_mem0_dbe : 1;
+		u64 reserved_39_40 : 2;
+		u64 state_mem3_dbe : 1;
+		u64 reserved_0_37 : 38;
+	} cn73xx;
+	struct cvmx_pko_peb_ecc_dbe_sts0_cn78xx {
+		u64 iobp1_uid_fifo_ram_dbe : 1;
+		u64 iobp0_fifo_ram_dbe : 1;
+		u64 iobp1_fifo_ram_dbe : 1;
+		u64 pdm_resp_buf_ram_dbe : 1;
+		u64 pdm_pse_buf_ram_dbe : 1;
+		u64 reserved_58_58 : 1;
+		u64 peb_st_inf_ram_dbe : 1;
+		u64 pd_bank3_ram_dbe : 1;
+		u64 reserved_54_55 : 2;
+		u64 pd_bank0_ram_dbe : 1;
+		u64 pd_var_bank_ram_dbe : 1;
+		u64 tx_fifo_crc_ram_dbe : 1;
+		u64 tx_fifo_hdr_ram_dbe : 1;
+		u64 tx_fifo_pkt_ram_dbe : 1;
+		u64 add_work_fifo_dbe : 1;
+		u64 send_mem_fifo_dbe : 1;
+		u64 send_mem_stdn_fifo_dbe : 1;
+		u64 send_mem_ts_fifo_dbe : 1;
+		u64 nxt_link_ptr_ram_dbe : 1;
+		u64 pkt_mrk_ram_dbe : 1;
+		u64 ts_addwork_ram_dbe : 1;
+		u64 reserved_0_41 : 42;
+	} cn78xx;
+	struct cvmx_pko_peb_ecc_dbe_sts0_cn78xxp1 {
+		u64 iobp1_uid_fifo_ram_dbe : 1;
+		u64 iobp0_fifo_ram_dbe : 1;
+		u64 iobp1_fifo_ram_dbe : 1;
+		u64 pdm_resp_buf_ram_dbe : 1;
+		u64 pdm_pse_buf_ram_dbe : 1;
+		u64 peb_sm_jmp_ram_dbe : 1;
+		u64 peb_st_inf_ram_dbe : 1;
+		u64 pd_bank3_ram_dbe : 1;
+		u64 pd_bank2_ram_dbe : 1;
+		u64 pd_bank1_ram_dbe : 1;
+		u64 pd_bank0_ram_dbe : 1;
+		u64 pd_var_bank_ram_dbe : 1;
+		u64 tx_fifo_crc_ram_dbe : 1;
+		u64 tx_fifo_hdr_ram_dbe : 1;
+		u64 tx_fifo_pkt_ram_dbe : 1;
+		u64 add_work_fifo_dbe : 1;
+		u64 send_mem_fifo_dbe : 1;
+		u64 send_mem_stdn_fifo_dbe : 1;
+		u64 send_mem_ts_fifo_dbe : 1;
+		u64 nxt_link_ptr_ram_dbe : 1;
+		u64 pkt_mrk_ram_dbe : 1;
+		u64 ts_addwork_ram_dbe : 1;
+		u64 reserved_0_41 : 42;
+	} cn78xxp1;
+	struct cvmx_pko_peb_ecc_dbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_peb_ecc_dbe_sts0 cvmx_pko_peb_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_peb_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_peb_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_peb_ecc_dbe_sts_cmb0_s {
+		u64 peb_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_peb_ecc_dbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_peb_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_peb_ecc_dbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_peb_ecc_dbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_ecc_dbe_sts_cmb0 cvmx_pko_peb_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_peb_ecc_sbe_sts0
+ */
+union cvmx_pko_peb_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_peb_ecc_sbe_sts0_s {
+		u64 iobp1_uid_fifo_ram_sbe : 1;
+		u64 iobp0_fifo_ram_sbe : 1;
+		u64 iobp1_fifo_ram_sbe : 1;
+		u64 pdm_resp_buf_ram_sbe : 1;
+		u64 pdm_pse_buf_ram_sbe : 1;
+		u64 peb_sm_jmp_ram_sbe : 1;
+		u64 peb_st_inf_ram_sbe : 1;
+		u64 pd_bank3_ram_sbe : 1;
+		u64 pd_bank2_ram_sbe : 1;
+		u64 pd_bank1_ram_sbe : 1;
+		u64 pd_bank0_ram_sbe : 1;
+		u64 pd_var_bank_ram_sbe : 1;
+		u64 tx_fifo_crc_ram_sbe : 1;
+		u64 tx_fifo_hdr_ram_sbe : 1;
+		u64 tx_fifo_pkt_ram_sbe : 1;
+		u64 add_work_fifo_sbe : 1;
+		u64 send_mem_fifo_sbe : 1;
+		u64 send_mem_stdn_fifo_sbe : 1;
+		u64 send_mem_ts_fifo_sbe : 1;
+		u64 nxt_link_ptr_ram_sbe : 1;
+		u64 pkt_mrk_ram_sbe : 1;
+		u64 ts_addwork_ram_sbe : 1;
+		u64 state_mem0_sbe : 1;
+		u64 reserved_39_40 : 2;
+		u64 state_mem3_sbe : 1;
+		u64 reserved_0_37 : 38;
+	} s;
+	struct cvmx_pko_peb_ecc_sbe_sts0_cn73xx {
+		u64 iobp1_uid_fifo_ram_sbe : 1;
+		u64 iobp0_fifo_ram_sbe : 1;
+		u64 iobp1_fifo_ram_sbe : 1;
+		u64 pdm_resp_buf_ram_sbe : 1;
+		u64 pdm_pse_buf_ram_sbe : 1;
+		u64 reserved_58_58 : 1;
+		u64 peb_st_inf_ram_sbe : 1;
+		u64 pd_bank3_ram_sbe : 1;
+		u64 reserved_54_55 : 2;
+		u64 pd_bank0_ram_sbe : 1;
+		u64 pd_var_bank_ram_sbe : 1;
+		u64 tx_fifo_crc_ram_sbe : 1;
+		u64 tx_fifo_hdr_ram_sbe : 1;
+		u64 tx_fifo_pkt_ram_sbe : 1;
+		u64 add_work_fifo_sbe : 1;
+		u64 send_mem_fifo_sbe : 1;
+		u64 send_mem_stdn_fifo_sbe : 1;
+		u64 send_mem_ts_fifo_sbe : 1;
+		u64 nxt_link_ptr_ram_sbe : 1;
+		u64 pkt_mrk_ram_sbe : 1;
+		u64 ts_addwork_ram_sbe : 1;
+		u64 state_mem0_sbe : 1;
+		u64 reserved_39_40 : 2;
+		u64 state_mem3_sbe : 1;
+		u64 reserved_0_37 : 38;
+	} cn73xx;
+	struct cvmx_pko_peb_ecc_sbe_sts0_cn78xx {
+		u64 iobp1_uid_fifo_ram_sbe : 1;
+		u64 iobp0_fifo_ram_sbe : 1;
+		u64 iobp1_fifo_ram_sbe : 1;
+		u64 pdm_resp_buf_ram_sbe : 1;
+		u64 pdm_pse_buf_ram_sbe : 1;
+		u64 reserved_58_58 : 1;
+		u64 peb_st_inf_ram_sbe : 1;
+		u64 pd_bank3_ram_sbe : 1;
+		u64 reserved_54_55 : 2;
+		u64 pd_bank0_ram_sbe : 1;
+		u64 pd_var_bank_ram_sbe : 1;
+		u64 tx_fifo_crc_ram_sbe : 1;
+		u64 tx_fifo_hdr_ram_sbe : 1;
+		u64 tx_fifo_pkt_ram_sbe : 1;
+		u64 add_work_fifo_sbe : 1;
+		u64 send_mem_fifo_sbe : 1;
+		u64 send_mem_stdn_fifo_sbe : 1;
+		u64 send_mem_ts_fifo_sbe : 1;
+		u64 nxt_link_ptr_ram_sbe : 1;
+		u64 pkt_mrk_ram_sbe : 1;
+		u64 ts_addwork_ram_sbe : 1;
+		u64 reserved_0_41 : 42;
+	} cn78xx;
+	struct cvmx_pko_peb_ecc_sbe_sts0_cn78xxp1 {
+		u64 iobp1_uid_fifo_ram_sbe : 1;
+		u64 iobp0_fifo_ram_sbe : 1;
+		u64 iobp1_fifo_ram_sbe : 1;
+		u64 pdm_resp_buf_ram_sbe : 1;
+		u64 pdm_pse_buf_ram_sbe : 1;
+		u64 peb_sm_jmp_ram_sbe : 1;
+		u64 peb_st_inf_ram_sbe : 1;
+		u64 pd_bank3_ram_sbe : 1;
+		u64 pd_bank2_ram_sbe : 1;
+		u64 pd_bank1_ram_sbe : 1;
+		u64 pd_bank0_ram_sbe : 1;
+		u64 pd_var_bank_ram_sbe : 1;
+		u64 tx_fifo_crc_ram_sbe : 1;
+		u64 tx_fifo_hdr_ram_sbe : 1;
+		u64 tx_fifo_pkt_ram_sbe : 1;
+		u64 add_work_fifo_sbe : 1;
+		u64 send_mem_fifo_sbe : 1;
+		u64 send_mem_stdn_fifo_sbe : 1;
+		u64 send_mem_ts_fifo_sbe : 1;
+		u64 nxt_link_ptr_ram_sbe : 1;
+		u64 pkt_mrk_ram_sbe : 1;
+		u64 ts_addwork_ram_sbe : 1;
+		u64 reserved_0_41 : 42;
+	} cn78xxp1;
+	struct cvmx_pko_peb_ecc_sbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_peb_ecc_sbe_sts0 cvmx_pko_peb_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_peb_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_peb_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_peb_ecc_sbe_sts_cmb0_s {
+		u64 peb_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_peb_ecc_sbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_peb_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_peb_ecc_sbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_peb_ecc_sbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_ecc_sbe_sts_cmb0 cvmx_pko_peb_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_peb_eco
+ */
+union cvmx_pko_peb_eco {
+	u64 u64;
+	struct cvmx_pko_peb_eco_s {
+		u64 reserved_32_63 : 32;
+		u64 eco_rw : 32;
+	} s;
+	struct cvmx_pko_peb_eco_s cn73xx;
+	struct cvmx_pko_peb_eco_s cn78xx;
+	struct cvmx_pko_peb_eco_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_eco cvmx_pko_peb_eco_t;
+
+/**
+ * cvmx_pko_peb_err_int
+ */
+union cvmx_pko_peb_err_int {
+	u64 u64;
+	struct cvmx_pko_peb_err_int_s {
+		u64 reserved_10_63 : 54;
+		u64 peb_macx_cfg_wr_err : 1;
+		u64 peb_max_link_err : 1;
+		u64 peb_subd_size_err : 1;
+		u64 peb_subd_addr_err : 1;
+		u64 peb_trunc_err : 1;
+		u64 peb_pad_err : 1;
+		u64 peb_pse_fifo_err : 1;
+		u64 peb_fcs_sop_err : 1;
+		u64 peb_jump_def_err : 1;
+		u64 peb_ext_hdr_def_err : 1;
+	} s;
+	struct cvmx_pko_peb_err_int_s cn73xx;
+	struct cvmx_pko_peb_err_int_s cn78xx;
+	struct cvmx_pko_peb_err_int_s cn78xxp1;
+	struct cvmx_pko_peb_err_int_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_err_int cvmx_pko_peb_err_int_t;
+
+/**
+ * cvmx_pko_peb_ext_hdr_def_err_info
+ */
+union cvmx_pko_peb_ext_hdr_def_err_info {
+	u64 u64;
+	struct cvmx_pko_peb_ext_hdr_def_err_info_s {
+		u64 reserved_20_63 : 44;
+		u64 val : 1;
+		u64 fifo : 7;
+		u64 chan : 12;
+	} s;
+	struct cvmx_pko_peb_ext_hdr_def_err_info_s cn73xx;
+	struct cvmx_pko_peb_ext_hdr_def_err_info_s cn78xx;
+	struct cvmx_pko_peb_ext_hdr_def_err_info_s cn78xxp1;
+	struct cvmx_pko_peb_ext_hdr_def_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_ext_hdr_def_err_info cvmx_pko_peb_ext_hdr_def_err_info_t;
+
+/**
+ * cvmx_pko_peb_fcs_sop_err_info
+ */
+union cvmx_pko_peb_fcs_sop_err_info {
+	u64 u64;
+	struct cvmx_pko_peb_fcs_sop_err_info_s {
+		u64 reserved_20_63 : 44;
+		u64 val : 1;
+		u64 fifo : 7;
+		u64 chan : 12;
+	} s;
+	struct cvmx_pko_peb_fcs_sop_err_info_s cn73xx;
+	struct cvmx_pko_peb_fcs_sop_err_info_s cn78xx;
+	struct cvmx_pko_peb_fcs_sop_err_info_s cn78xxp1;
+	struct cvmx_pko_peb_fcs_sop_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_fcs_sop_err_info cvmx_pko_peb_fcs_sop_err_info_t;
+
+/**
+ * cvmx_pko_peb_jump_def_err_info
+ */
+union cvmx_pko_peb_jump_def_err_info {
+	u64 u64;
+	struct cvmx_pko_peb_jump_def_err_info_s {
+		u64 reserved_20_63 : 44;
+		u64 val : 1;
+		u64 fifo : 7;
+		u64 chan : 12;
+	} s;
+	struct cvmx_pko_peb_jump_def_err_info_s cn73xx;
+	struct cvmx_pko_peb_jump_def_err_info_s cn78xx;
+	struct cvmx_pko_peb_jump_def_err_info_s cn78xxp1;
+	struct cvmx_pko_peb_jump_def_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_jump_def_err_info cvmx_pko_peb_jump_def_err_info_t;
+
+/**
+ * cvmx_pko_peb_macx_cfg_wr_err_info
+ */
+union cvmx_pko_peb_macx_cfg_wr_err_info {
+	u64 u64;
+	struct cvmx_pko_peb_macx_cfg_wr_err_info_s {
+		u64 reserved_8_63 : 56;
+		u64 val : 1;
+		u64 mac : 7;
+	} s;
+	struct cvmx_pko_peb_macx_cfg_wr_err_info_s cn73xx;
+	struct cvmx_pko_peb_macx_cfg_wr_err_info_s cn78xx;
+	struct cvmx_pko_peb_macx_cfg_wr_err_info_s cn78xxp1;
+	struct cvmx_pko_peb_macx_cfg_wr_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_macx_cfg_wr_err_info cvmx_pko_peb_macx_cfg_wr_err_info_t;
+
+/**
+ * cvmx_pko_peb_max_link_err_info
+ */
+union cvmx_pko_peb_max_link_err_info {
+	u64 u64;
+	struct cvmx_pko_peb_max_link_err_info_s {
+		u64 reserved_20_63 : 44;
+		u64 val : 1;
+		u64 fifo : 7;
+		u64 chan : 12;
+	} s;
+	struct cvmx_pko_peb_max_link_err_info_s cn73xx;
+	struct cvmx_pko_peb_max_link_err_info_s cn78xx;
+	struct cvmx_pko_peb_max_link_err_info_s cn78xxp1;
+	struct cvmx_pko_peb_max_link_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_max_link_err_info cvmx_pko_peb_max_link_err_info_t;
+
+/**
+ * cvmx_pko_peb_ncb_cfg
+ */
+union cvmx_pko_peb_ncb_cfg {
+	u64 u64;
+	struct cvmx_pko_peb_ncb_cfg_s {
+		u64 reserved_1_63 : 63;
+		u64 rstp : 1;
+	} s;
+	struct cvmx_pko_peb_ncb_cfg_s cn73xx;
+	struct cvmx_pko_peb_ncb_cfg_s cn78xx;
+	struct cvmx_pko_peb_ncb_cfg_s cn78xxp1;
+	struct cvmx_pko_peb_ncb_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_ncb_cfg cvmx_pko_peb_ncb_cfg_t;
+
+/**
+ * cvmx_pko_peb_pad_err_info
+ */
+union cvmx_pko_peb_pad_err_info {
+	u64 u64;
+	struct cvmx_pko_peb_pad_err_info_s {
+		u64 reserved_20_63 : 44;
+		u64 val : 1;
+		u64 fifo : 7;
+		u64 chan : 12;
+	} s;
+	struct cvmx_pko_peb_pad_err_info_s cn73xx;
+	struct cvmx_pko_peb_pad_err_info_s cn78xx;
+	struct cvmx_pko_peb_pad_err_info_s cn78xxp1;
+	struct cvmx_pko_peb_pad_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_pad_err_info cvmx_pko_peb_pad_err_info_t;
+
+/**
+ * cvmx_pko_peb_pse_fifo_err_info
+ */
+union cvmx_pko_peb_pse_fifo_err_info {
+	u64 u64;
+	struct cvmx_pko_peb_pse_fifo_err_info_s {
+		u64 reserved_25_63 : 39;
+		u64 link : 5;
+		u64 val : 1;
+		u64 fifo : 7;
+		u64 chan : 12;
+	} s;
+	struct cvmx_pko_peb_pse_fifo_err_info_cn73xx {
+		u64 reserved_20_63 : 44;
+		u64 val : 1;
+		u64 fifo : 7;
+		u64 chan : 12;
+	} cn73xx;
+	struct cvmx_pko_peb_pse_fifo_err_info_s cn78xx;
+	struct cvmx_pko_peb_pse_fifo_err_info_cn73xx cn78xxp1;
+	struct cvmx_pko_peb_pse_fifo_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_pse_fifo_err_info cvmx_pko_peb_pse_fifo_err_info_t;
+
+/**
+ * cvmx_pko_peb_subd_addr_err_info
+ */
+union cvmx_pko_peb_subd_addr_err_info {
+	u64 u64;
+	struct cvmx_pko_peb_subd_addr_err_info_s {
+		u64 reserved_20_63 : 44;
+		u64 val : 1;
+		u64 fifo : 7;
+		u64 chan : 12;
+	} s;
+	struct cvmx_pko_peb_subd_addr_err_info_s cn73xx;
+	struct cvmx_pko_peb_subd_addr_err_info_s cn78xx;
+	struct cvmx_pko_peb_subd_addr_err_info_s cn78xxp1;
+	struct cvmx_pko_peb_subd_addr_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_subd_addr_err_info cvmx_pko_peb_subd_addr_err_info_t;
+
+/**
+ * cvmx_pko_peb_subd_size_err_info
+ */
+union cvmx_pko_peb_subd_size_err_info {
+	u64 u64;
+	struct cvmx_pko_peb_subd_size_err_info_s {
+		u64 reserved_20_63 : 44;
+		u64 val : 1;
+		u64 fifo : 7;
+		u64 chan : 12;
+	} s;
+	struct cvmx_pko_peb_subd_size_err_info_s cn73xx;
+	struct cvmx_pko_peb_subd_size_err_info_s cn78xx;
+	struct cvmx_pko_peb_subd_size_err_info_s cn78xxp1;
+	struct cvmx_pko_peb_subd_size_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_subd_size_err_info cvmx_pko_peb_subd_size_err_info_t;
+
+/**
+ * cvmx_pko_peb_trunc_err_info
+ */
+union cvmx_pko_peb_trunc_err_info {
+	u64 u64;
+	struct cvmx_pko_peb_trunc_err_info_s {
+		u64 reserved_20_63 : 44;
+		u64 val : 1;
+		u64 fifo : 7;
+		u64 chan : 12;
+	} s;
+	struct cvmx_pko_peb_trunc_err_info_s cn73xx;
+	struct cvmx_pko_peb_trunc_err_info_s cn78xx;
+	struct cvmx_pko_peb_trunc_err_info_s cn78xxp1;
+	struct cvmx_pko_peb_trunc_err_info_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_trunc_err_info cvmx_pko_peb_trunc_err_info_t;
+
+/**
+ * cvmx_pko_peb_tso_cfg
+ */
+union cvmx_pko_peb_tso_cfg {
+	u64 u64;
+	struct cvmx_pko_peb_tso_cfg_s {
+		u64 reserved_44_63 : 20;
+		u64 fsf : 12;
+		u64 reserved_28_31 : 4;
+		u64 msf : 12;
+		u64 reserved_12_15 : 4;
+		u64 lsf : 12;
+	} s;
+	struct cvmx_pko_peb_tso_cfg_s cn73xx;
+	struct cvmx_pko_peb_tso_cfg_s cn78xx;
+	struct cvmx_pko_peb_tso_cfg_s cn78xxp1;
+	struct cvmx_pko_peb_tso_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pko_peb_tso_cfg cvmx_pko_peb_tso_cfg_t;
+
+/**
+ * cvmx_pko_pq_csr_bus_debug
+ */
+union cvmx_pko_pq_csr_bus_debug {
+	u64 u64;
+	struct cvmx_pko_pq_csr_bus_debug_s {
+		u64 csr_bus_debug : 64;
+	} s;
+	struct cvmx_pko_pq_csr_bus_debug_s cn73xx;
+	struct cvmx_pko_pq_csr_bus_debug_s cn78xx;
+	struct cvmx_pko_pq_csr_bus_debug_s cn78xxp1;
+	struct cvmx_pko_pq_csr_bus_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_pq_csr_bus_debug cvmx_pko_pq_csr_bus_debug_t;
+
+/**
+ * cvmx_pko_pq_debug_green
+ */
+union cvmx_pko_pq_debug_green {
+	u64 u64;
+	struct cvmx_pko_pq_debug_green_s {
+		u64 g_valid : 32;
+		u64 cred_ok_n : 32;
+	} s;
+	struct cvmx_pko_pq_debug_green_s cn73xx;
+	struct cvmx_pko_pq_debug_green_s cn78xx;
+	struct cvmx_pko_pq_debug_green_s cn78xxp1;
+	struct cvmx_pko_pq_debug_green_s cnf75xx;
+};
+
+typedef union cvmx_pko_pq_debug_green cvmx_pko_pq_debug_green_t;
+
+/**
+ * cvmx_pko_pq_debug_links
+ */
+union cvmx_pko_pq_debug_links {
+	u64 u64;
+	struct cvmx_pko_pq_debug_links_s {
+		u64 links_ready : 32;
+		u64 peb_lnk_rdy_ir : 32;
+	} s;
+	struct cvmx_pko_pq_debug_links_s cn73xx;
+	struct cvmx_pko_pq_debug_links_s cn78xx;
+	struct cvmx_pko_pq_debug_links_s cn78xxp1;
+	struct cvmx_pko_pq_debug_links_s cnf75xx;
+};
+
+typedef union cvmx_pko_pq_debug_links cvmx_pko_pq_debug_links_t;
+
+/**
+ * cvmx_pko_pq_debug_yellow
+ */
+union cvmx_pko_pq_debug_yellow {
+	u64 u64;
+	struct cvmx_pko_pq_debug_yellow_s {
+		u64 y_valid : 32;
+		u64 reserved_28_31 : 4;
+		u64 link_vv : 28;
+	} s;
+	struct cvmx_pko_pq_debug_yellow_s cn73xx;
+	struct cvmx_pko_pq_debug_yellow_s cn78xx;
+	struct cvmx_pko_pq_debug_yellow_s cn78xxp1;
+	struct cvmx_pko_pq_debug_yellow_s cnf75xx;
+};
+
+typedef union cvmx_pko_pq_debug_yellow cvmx_pko_pq_debug_yellow_t;
+
+/**
+ * cvmx_pko_pqa_debug
+ */
+union cvmx_pko_pqa_debug {
+	u64 u64;
+	struct cvmx_pko_pqa_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_pqa_debug_s cn73xx;
+	struct cvmx_pko_pqa_debug_s cn78xx;
+	struct cvmx_pko_pqa_debug_s cn78xxp1;
+	struct cvmx_pko_pqa_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_pqa_debug cvmx_pko_pqa_debug_t;
+
+/**
+ * cvmx_pko_pqb_debug
+ *
+ * This register has the same bit fields as PKO_PQA_DEBUG.
+ *
+ */
+union cvmx_pko_pqb_debug {
+	u64 u64;
+	struct cvmx_pko_pqb_debug_s {
+		u64 dbg_vec : 64;
+	} s;
+	struct cvmx_pko_pqb_debug_s cn73xx;
+	struct cvmx_pko_pqb_debug_s cn78xx;
+	struct cvmx_pko_pqb_debug_s cn78xxp1;
+	struct cvmx_pko_pqb_debug_s cnf75xx;
+};
+
+typedef union cvmx_pko_pqb_debug cvmx_pko_pqb_debug_t;
+
+/**
+ * cvmx_pko_pse_dq_bist_status
+ *
+ * Each bit is the BIST result of an individual memory (per bit, 0 = pass and 1 = fail).
+ *
+ */
+union cvmx_pko_pse_dq_bist_status {
+	u64 u64;
+	struct cvmx_pko_pse_dq_bist_status_s {
+		u64 reserved_8_63 : 56;
+		u64 rt7_sram : 1;
+		u64 rt6_sram : 1;
+		u64 rt5_sram : 1;
+		u64 reserved_4_4 : 1;
+		u64 rt3_sram : 1;
+		u64 rt2_sram : 1;
+		u64 rt1_sram : 1;
+		u64 rt0_sram : 1;
+	} s;
+	struct cvmx_pko_pse_dq_bist_status_cn73xx {
+		u64 reserved_5_63 : 59;
+		u64 wt_sram : 1;
+		u64 reserved_2_3 : 2;
+		u64 rt1_sram : 1;
+		u64 rt0_sram : 1;
+	} cn73xx;
+	struct cvmx_pko_pse_dq_bist_status_cn78xx {
+		u64 reserved_9_63 : 55;
+		u64 wt_sram : 1;
+		u64 rt7_sram : 1;
+		u64 rt6_sram : 1;
+		u64 rt5_sram : 1;
+		u64 rt4_sram : 1;
+		u64 rt3_sram : 1;
+		u64 rt2_sram : 1;
+		u64 rt1_sram : 1;
+		u64 rt0_sram : 1;
+	} cn78xx;
+	struct cvmx_pko_pse_dq_bist_status_cn78xx cn78xxp1;
+	struct cvmx_pko_pse_dq_bist_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_dq_bist_status cvmx_pko_pse_dq_bist_status_t;
+
+/**
+ * cvmx_pko_pse_dq_ecc_ctl0
+ */
+union cvmx_pko_pse_dq_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_pse_dq_ecc_ctl0_s {
+		u64 dq_wt_ram_flip : 2;
+		u64 dq_wt_ram_cdis : 1;
+		u64 dq_rt7_flip : 2;
+		u64 dq_rt7_cdis : 1;
+		u64 dq_rt6_flip : 2;
+		u64 dq_rt6_cdis : 1;
+		u64 dq_rt5_flip : 2;
+		u64 dq_rt5_cdis : 1;
+		u64 dq_rt4_flip : 2;
+		u64 dq_rt4_cdis : 1;
+		u64 dq_rt3_flip : 2;
+		u64 dq_rt3_cdis : 1;
+		u64 dq_rt2_flip : 2;
+		u64 dq_rt2_cdis : 1;
+		u64 dq_rt1_flip : 2;
+		u64 dq_rt1_cdis : 1;
+		u64 dq_rt0_flip : 2;
+		u64 dq_rt0_cdis : 1;
+		u64 reserved_0_36 : 37;
+	} s;
+	struct cvmx_pko_pse_dq_ecc_ctl0_cn73xx {
+		u64 dq_wt_ram_flip : 2;
+		u64 dq_wt_ram_cdis : 1;
+		u64 reserved_43_60 : 18;
+		u64 dq_rt1_flip : 2;
+		u64 dq_rt1_cdis : 1;
+		u64 dq_rt0_flip : 2;
+		u64 dq_rt0_cdis : 1;
+		u64 reserved_0_36 : 37;
+	} cn73xx;
+	struct cvmx_pko_pse_dq_ecc_ctl0_s cn78xx;
+	struct cvmx_pko_pse_dq_ecc_ctl0_s cn78xxp1;
+	struct cvmx_pko_pse_dq_ecc_ctl0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_dq_ecc_ctl0 cvmx_pko_pse_dq_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_pse_dq_ecc_dbe_sts0
+ */
+union cvmx_pko_pse_dq_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_dq_ecc_dbe_sts0_s {
+		u64 dq_wt_ram_dbe : 1;
+		u64 dq_rt7_dbe : 1;
+		u64 dq_rt6_dbe : 1;
+		u64 dq_rt5_dbe : 1;
+		u64 dq_rt4_dbe : 1;
+		u64 dq_rt3_dbe : 1;
+		u64 dq_rt2_dbe : 1;
+		u64 dq_rt1_dbe : 1;
+		u64 dq_rt0_dbe : 1;
+		u64 reserved_0_54 : 55;
+	} s;
+	struct cvmx_pko_pse_dq_ecc_dbe_sts0_cn73xx {
+		u64 dq_wt_ram_dbe : 1;
+		u64 reserved_57_62 : 6;
+		u64 dq_rt1_dbe : 1;
+		u64 dq_rt0_dbe : 1;
+		u64 reserved_0_54 : 55;
+	} cn73xx;
+	struct cvmx_pko_pse_dq_ecc_dbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_dq_ecc_dbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pse_dq_ecc_dbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_dq_ecc_dbe_sts0 cvmx_pko_pse_dq_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_dq_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_pse_dq_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_dq_ecc_dbe_sts_cmb0_s {
+		u64 pse_dq_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_dq_ecc_dbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pse_dq_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_dq_ecc_dbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pse_dq_ecc_dbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pse_dq_ecc_dbe_sts_cmb0 cvmx_pko_pse_dq_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_dq_ecc_sbe_sts0
+ */
+union cvmx_pko_pse_dq_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_dq_ecc_sbe_sts0_s {
+		u64 dq_wt_ram_sbe : 1;
+		u64 dq_rt7_sbe : 1;
+		u64 dq_rt6_sbe : 1;
+		u64 dq_rt5_sbe : 1;
+		u64 dq_rt4_sbe : 1;
+		u64 dq_rt3_sbe : 1;
+		u64 dq_rt2_sbe : 1;
+		u64 dq_rt1_sbe : 1;
+		u64 dq_rt0_sbe : 1;
+		u64 reserved_0_54 : 55;
+	} s;
+	struct cvmx_pko_pse_dq_ecc_sbe_sts0_cn73xx {
+		u64 dq_wt_ram_sbe : 1;
+		u64 reserved_57_62 : 6;
+		u64 dq_rt1_sbe : 1;
+		u64 dq_rt0_sbe : 1;
+		u64 reserved_0_54 : 55;
+	} cn73xx;
+	struct cvmx_pko_pse_dq_ecc_sbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_dq_ecc_sbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pse_dq_ecc_sbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_dq_ecc_sbe_sts0 cvmx_pko_pse_dq_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_dq_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_pse_dq_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_dq_ecc_sbe_sts_cmb0_s {
+		u64 pse_dq_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_dq_ecc_sbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pse_dq_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_dq_ecc_sbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pse_dq_ecc_sbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pse_dq_ecc_sbe_sts_cmb0 cvmx_pko_pse_dq_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_pq_bist_status
+ *
+ * Each bit is the BIST result of an individual memory (per bit, 0 = pass and 1 = fail).
+ *
+ */
+union cvmx_pko_pse_pq_bist_status {
+	u64 u64;
+	struct cvmx_pko_pse_pq_bist_status_s {
+		u64 reserved_15_63 : 49;
+		u64 tp_sram : 1;
+		u64 irq_fifo_sram : 1;
+		u64 wmd_sram : 1;
+		u64 wms_sram : 1;
+		u64 cxd_sram : 1;
+		u64 dqd_sram : 1;
+		u64 dqs_sram : 1;
+		u64 pqd_sram : 1;
+		u64 pqr_sram : 1;
+		u64 pqy_sram : 1;
+		u64 pqg_sram : 1;
+		u64 std_sram : 1;
+		u64 st_sram : 1;
+		u64 reserved_1_1 : 1;
+		u64 cxs_sram : 1;
+	} s;
+	struct cvmx_pko_pse_pq_bist_status_cn73xx {
+		u64 reserved_15_63 : 49;
+		u64 tp_sram : 1;
+		u64 reserved_13_13 : 1;
+		u64 wmd_sram : 1;
+		u64 reserved_11_11 : 1;
+		u64 cxd_sram : 1;
+		u64 dqd_sram : 1;
+		u64 dqs_sram : 1;
+		u64 pqd_sram : 1;
+		u64 pqr_sram : 1;
+		u64 pqy_sram : 1;
+		u64 pqg_sram : 1;
+		u64 std_sram : 1;
+		u64 st_sram : 1;
+		u64 reserved_1_1 : 1;
+		u64 cxs_sram : 1;
+	} cn73xx;
+	struct cvmx_pko_pse_pq_bist_status_s cn78xx;
+	struct cvmx_pko_pse_pq_bist_status_s cn78xxp1;
+	struct cvmx_pko_pse_pq_bist_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_pq_bist_status cvmx_pko_pse_pq_bist_status_t;
+
+/**
+ * cvmx_pko_pse_pq_ecc_ctl0
+ */
+union cvmx_pko_pse_pq_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_pse_pq_ecc_ctl0_s {
+		u64 pq_cxs_ram_flip : 2;
+		u64 pq_cxs_ram_cdis : 1;
+		u64 pq_cxd_ram_flip : 2;
+		u64 pq_cxd_ram_cdis : 1;
+		u64 irq_fifo_sram_flip : 2;
+		u64 irq_fifo_sram_cdis : 1;
+		u64 tp_sram_flip : 2;
+		u64 tp_sram_cdis : 1;
+		u64 pq_std_ram_flip : 2;
+		u64 pq_std_ram_cdis : 1;
+		u64 pq_st_ram_flip : 2;
+		u64 pq_st_ram_cdis : 1;
+		u64 pq_wmd_ram_flip : 2;
+		u64 pq_wmd_ram_cdis : 1;
+		u64 pq_wms_ram_flip : 2;
+		u64 pq_wms_ram_cdis : 1;
+		u64 reserved_0_39 : 40;
+	} s;
+	struct cvmx_pko_pse_pq_ecc_ctl0_cn73xx {
+		u64 pq_cxs_ram_flip : 2;
+		u64 pq_cxs_ram_cdis : 1;
+		u64 pq_cxd_ram_flip : 2;
+		u64 pq_cxd_ram_cdis : 1;
+		u64 reserved_55_57 : 3;
+		u64 tp_sram_flip : 2;
+		u64 tp_sram_cdis : 1;
+		u64 pq_std_ram_flip : 2;
+		u64 pq_std_ram_cdis : 1;
+		u64 pq_st_ram_flip : 2;
+		u64 pq_st_ram_cdis : 1;
+		u64 pq_wmd_ram_flip : 2;
+		u64 pq_wmd_ram_cdis : 1;
+		u64 reserved_0_42 : 43;
+	} cn73xx;
+	struct cvmx_pko_pse_pq_ecc_ctl0_s cn78xx;
+	struct cvmx_pko_pse_pq_ecc_ctl0_s cn78xxp1;
+	struct cvmx_pko_pse_pq_ecc_ctl0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_pq_ecc_ctl0 cvmx_pko_pse_pq_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_pse_pq_ecc_dbe_sts0
+ */
+union cvmx_pko_pse_pq_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_pq_ecc_dbe_sts0_s {
+		u64 pq_cxs_ram_dbe : 1;
+		u64 pq_cxd_ram_dbe : 1;
+		u64 irq_fifo_sram_dbe : 1;
+		u64 tp_sram_dbe : 1;
+		u64 pq_std_ram_dbe : 1;
+		u64 pq_st_ram_dbe : 1;
+		u64 pq_wmd_ram_dbe : 1;
+		u64 pq_wms_ram_dbe : 1;
+		u64 reserved_0_55 : 56;
+	} s;
+	struct cvmx_pko_pse_pq_ecc_dbe_sts0_cn73xx {
+		u64 pq_cxs_ram_dbe : 1;
+		u64 pq_cxd_ram_dbe : 1;
+		u64 reserved_61_61 : 1;
+		u64 tp_sram_dbe : 1;
+		u64 pq_std_ram_dbe : 1;
+		u64 pq_st_ram_dbe : 1;
+		u64 pq_wmd_ram_dbe : 1;
+		u64 reserved_0_56 : 57;
+	} cn73xx;
+	struct cvmx_pko_pse_pq_ecc_dbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_pq_ecc_dbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pse_pq_ecc_dbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_pq_ecc_dbe_sts0 cvmx_pko_pse_pq_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_pq_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_pse_pq_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_pq_ecc_dbe_sts_cmb0_s {
+		u64 pse_pq_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_pq_ecc_dbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pse_pq_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_pq_ecc_dbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pse_pq_ecc_dbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pse_pq_ecc_dbe_sts_cmb0 cvmx_pko_pse_pq_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_pq_ecc_sbe_sts0
+ */
+union cvmx_pko_pse_pq_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_pq_ecc_sbe_sts0_s {
+		u64 pq_cxs_ram_sbe : 1;
+		u64 pq_cxd_ram_sbe : 1;
+		u64 irq_fifo_sram_sbe : 1;
+		u64 tp_sram_sbe : 1;
+		u64 pq_std_ram_sbe : 1;
+		u64 pq_st_ram_sbe : 1;
+		u64 pq_wmd_ram_sbe : 1;
+		u64 pq_wms_ram_sbe : 1;
+		u64 reserved_0_55 : 56;
+	} s;
+	struct cvmx_pko_pse_pq_ecc_sbe_sts0_cn73xx {
+		u64 pq_cxs_ram_sbe : 1;
+		u64 pq_cxd_ram_sbe : 1;
+		u64 reserved_61_61 : 1;
+		u64 tp_sram_sbe : 1;
+		u64 pq_std_ram_sbe : 1;
+		u64 pq_st_ram_sbe : 1;
+		u64 pq_wmd_ram_sbe : 1;
+		u64 reserved_0_56 : 57;
+	} cn73xx;
+	struct cvmx_pko_pse_pq_ecc_sbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_pq_ecc_sbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pse_pq_ecc_sbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_pq_ecc_sbe_sts0 cvmx_pko_pse_pq_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_pq_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_pse_pq_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_pq_ecc_sbe_sts_cmb0_s {
+		u64 pse_pq_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_pq_ecc_sbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pse_pq_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_pq_ecc_sbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pse_pq_ecc_sbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pse_pq_ecc_sbe_sts_cmb0 cvmx_pko_pse_pq_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_sq1_bist_status
+ *
+ * Each bit is the BIST result of an individual memory (per bit, 0 = pass and 1 = fail).
+ *
+ */
+union cvmx_pko_pse_sq1_bist_status {
+	u64 u64;
+	struct cvmx_pko_pse_sq1_bist_status_s {
+		u64 reserved_29_63 : 35;
+		u64 sc_sram : 1;
+		u64 pc_sram : 1;
+		u64 xon_sram : 1;
+		u64 cc_sram : 1;
+		u64 vc1_sram : 1;
+		u64 vc0_sram : 1;
+		u64 reserved_21_22 : 2;
+		u64 tp1_sram : 1;
+		u64 tp0_sram : 1;
+		u64 xo_sram : 1;
+		u64 rt_sram : 1;
+		u64 reserved_9_16 : 8;
+		u64 tw1_cmd_fifo : 1;
+		u64 std_sram : 1;
+		u64 sts_sram : 1;
+		u64 tw0_cmd_fifo : 1;
+		u64 cxd_sram : 1;
+		u64 cxs_sram : 1;
+		u64 nt_sram : 1;
+		u64 pt_sram : 1;
+		u64 wt_sram : 1;
+	} s;
+	struct cvmx_pko_pse_sq1_bist_status_cn73xx {
+		u64 reserved_29_63 : 35;
+		u64 sc_sram : 1;
+		u64 pc_sram : 1;
+		u64 xon_sram : 1;
+		u64 cc_sram : 1;
+		u64 vc1_sram : 1;
+		u64 vc0_sram : 1;
+		u64 reserved_20_22 : 3;
+		u64 tp0_sram : 1;
+		u64 xo_sram : 1;
+		u64 rt_sram : 1;
+		u64 reserved_9_16 : 8;
+		u64 tw1_cmd_fifo : 1;
+		u64 std_sram : 1;
+		u64 sts_sram : 1;
+		u64 tw0_cmd_fifo : 1;
+		u64 cxd_sram : 1;
+		u64 cxs_sram : 1;
+		u64 nt_sram : 1;
+		u64 pt_sram : 1;
+		u64 wt_sram : 1;
+	} cn73xx;
+	struct cvmx_pko_pse_sq1_bist_status_s cn78xx;
+	struct cvmx_pko_pse_sq1_bist_status_s cn78xxp1;
+	struct cvmx_pko_pse_sq1_bist_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq1_bist_status cvmx_pko_pse_sq1_bist_status_t;
+
+/**
+ * cvmx_pko_pse_sq1_ecc_ctl0
+ */
+union cvmx_pko_pse_sq1_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq1_ecc_ctl0_s {
+		u64 cxs_ram_flip : 2;
+		u64 cxs_ram_cdis : 1;
+		u64 cxd_ram_flip : 2;
+		u64 cxd_ram_cdis : 1;
+		u64 vc1_sram_flip : 2;
+		u64 vc1_sram_cdis : 1;
+		u64 vc0_sram_flip : 2;
+		u64 vc0_sram_cdis : 1;
+		u64 sq_pt_ram_flip : 2;
+		u64 sq_pt_ram_cdis : 1;
+		u64 sq_nt_ram_flip : 2;
+		u64 sq_nt_ram_cdis : 1;
+		u64 rt_ram_flip : 2;
+		u64 rt_ram_cdis : 1;
+		u64 pc_ram_flip : 2;
+		u64 pc_ram_cdis : 1;
+		u64 tw1_cmd_fifo_ram_flip : 2;
+		u64 tw1_cmd_fifo_ram_cdis : 1;
+		u64 tw0_cmd_fifo_ram_flip : 2;
+		u64 tw0_cmd_fifo_ram_cdis : 1;
+		u64 tp1_sram_flip : 2;
+		u64 tp1_sram_cdis : 1;
+		u64 tp0_sram_flip : 2;
+		u64 tp0_sram_cdis : 1;
+		u64 sts1_ram_flip : 2;
+		u64 sts1_ram_cdis : 1;
+		u64 sts0_ram_flip : 2;
+		u64 sts0_ram_cdis : 1;
+		u64 std1_ram_flip : 2;
+		u64 std1_ram_cdis : 1;
+		u64 std0_ram_flip : 2;
+		u64 std0_ram_cdis : 1;
+		u64 wt_ram_flip : 2;
+		u64 wt_ram_cdis : 1;
+		u64 sc_ram_flip : 2;
+		u64 sc_ram_cdis : 1;
+		u64 reserved_0_9 : 10;
+	} s;
+	struct cvmx_pko_pse_sq1_ecc_ctl0_cn73xx {
+		u64 cxs_ram_flip : 2;
+		u64 cxs_ram_cdis : 1;
+		u64 cxd_ram_flip : 2;
+		u64 cxd_ram_cdis : 1;
+		u64 reserved_55_57 : 3;
+		u64 vc0_sram_flip : 2;
+		u64 vc0_sram_cdis : 1;
+		u64 sq_pt_ram_flip : 2;
+		u64 sq_pt_ram_cdis : 1;
+		u64 sq_nt_ram_flip : 2;
+		u64 sq_nt_ram_cdis : 1;
+		u64 rt_ram_flip : 2;
+		u64 rt_ram_cdis : 1;
+		u64 pc_ram_flip : 2;
+		u64 pc_ram_cdis : 1;
+		u64 reserved_37_39 : 3;
+		u64 tw0_cmd_fifo_ram_flip : 2;
+		u64 tw0_cmd_fifo_ram_cdis : 1;
+		u64 reserved_31_33 : 3;
+		u64 tp0_sram_flip : 2;
+		u64 tp0_sram_cdis : 1;
+		u64 reserved_25_27 : 3;
+		u64 sts0_ram_flip : 2;
+		u64 sts0_ram_cdis : 1;
+		u64 reserved_19_21 : 3;
+		u64 std0_ram_flip : 2;
+		u64 std0_ram_cdis : 1;
+		u64 wt_ram_flip : 2;
+		u64 wt_ram_cdis : 1;
+		u64 sc_ram_flip : 2;
+		u64 sc_ram_cdis : 1;
+		u64 reserved_0_9 : 10;
+	} cn73xx;
+	struct cvmx_pko_pse_sq1_ecc_ctl0_s cn78xx;
+	struct cvmx_pko_pse_sq1_ecc_ctl0_s cn78xxp1;
+	struct cvmx_pko_pse_sq1_ecc_ctl0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq1_ecc_ctl0 cvmx_pko_pse_sq1_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_pse_sq1_ecc_dbe_sts0
+ */
+union cvmx_pko_pse_sq1_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq1_ecc_dbe_sts0_s {
+		u64 cxs_ram_dbe : 1;
+		u64 cxd_ram_dbe : 1;
+		u64 vc1_sram_dbe : 1;
+		u64 vc0_sram_dbe : 1;
+		u64 sq_pt_ram_dbe : 1;
+		u64 sq_nt_ram_dbe : 1;
+		u64 rt_ram_dbe : 1;
+		u64 pc_ram_dbe : 1;
+		u64 tw1_cmd_fifo_ram_dbe : 1;
+		u64 tw0_cmd_fifo_ram_dbe : 1;
+		u64 tp1_sram_dbe : 1;
+		u64 tp0_sram_dbe : 1;
+		u64 sts1_ram_dbe : 1;
+		u64 sts0_ram_dbe : 1;
+		u64 std1_ram_dbe : 1;
+		u64 std0_ram_dbe : 1;
+		u64 wt_ram_dbe : 1;
+		u64 sc_ram_dbe : 1;
+		u64 reserved_0_45 : 46;
+	} s;
+	struct cvmx_pko_pse_sq1_ecc_dbe_sts0_cn73xx {
+		u64 cxs_ram_dbe : 1;
+		u64 cxd_ram_dbe : 1;
+		u64 reserved_61_61 : 1;
+		u64 vc0_sram_dbe : 1;
+		u64 sq_pt_ram_dbe : 1;
+		u64 sq_nt_ram_dbe : 1;
+		u64 rt_ram_dbe : 1;
+		u64 pc_ram_dbe : 1;
+		u64 reserved_55_55 : 1;
+		u64 tw0_cmd_fifo_ram_dbe : 1;
+		u64 reserved_53_53 : 1;
+		u64 tp0_sram_dbe : 1;
+		u64 reserved_51_51 : 1;
+		u64 sts0_ram_dbe : 1;
+		u64 reserved_49_49 : 1;
+		u64 std0_ram_dbe : 1;
+		u64 wt_ram_dbe : 1;
+		u64 sc_ram_dbe : 1;
+		u64 reserved_0_45 : 46;
+	} cn73xx;
+	struct cvmx_pko_pse_sq1_ecc_dbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_sq1_ecc_dbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pse_sq1_ecc_dbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq1_ecc_dbe_sts0 cvmx_pko_pse_sq1_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_sq1_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_pse_sq1_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq1_ecc_dbe_sts_cmb0_s {
+		u64 pse_sq1_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_sq1_ecc_dbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pse_sq1_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_sq1_ecc_dbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pse_sq1_ecc_dbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq1_ecc_dbe_sts_cmb0 cvmx_pko_pse_sq1_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_sq1_ecc_sbe_sts0
+ */
+union cvmx_pko_pse_sq1_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq1_ecc_sbe_sts0_s {
+		u64 cxs_ram_sbe : 1;
+		u64 cxd_ram_sbe : 1;
+		u64 vc1_sram_sbe : 1;
+		u64 vc0_sram_sbe : 1;
+		u64 sq_pt_ram_sbe : 1;
+		u64 sq_nt_ram_sbe : 1;
+		u64 rt_ram_sbe : 1;
+		u64 pc_ram_sbe : 1;
+		u64 tw1_cmd_fifo_ram_sbe : 1;
+		u64 tw0_cmd_fifo_ram_sbe : 1;
+		u64 tp1_sram_sbe : 1;
+		u64 tp0_sram_sbe : 1;
+		u64 sts1_ram_sbe : 1;
+		u64 sts0_ram_sbe : 1;
+		u64 std1_ram_sbe : 1;
+		u64 std0_ram_sbe : 1;
+		u64 wt_ram_sbe : 1;
+		u64 sc_ram_sbe : 1;
+		u64 reserved_0_45 : 46;
+	} s;
+	struct cvmx_pko_pse_sq1_ecc_sbe_sts0_cn73xx {
+		u64 cxs_ram_sbe : 1;
+		u64 cxd_ram_sbe : 1;
+		u64 reserved_61_61 : 1;
+		u64 vc0_sram_sbe : 1;
+		u64 sq_pt_ram_sbe : 1;
+		u64 sq_nt_ram_sbe : 1;
+		u64 rt_ram_sbe : 1;
+		u64 pc_ram_sbe : 1;
+		u64 reserved_55_55 : 1;
+		u64 tw0_cmd_fifo_ram_sbe : 1;
+		u64 reserved_53_53 : 1;
+		u64 tp0_sram_sbe : 1;
+		u64 reserved_51_51 : 1;
+		u64 sts0_ram_sbe : 1;
+		u64 reserved_49_49 : 1;
+		u64 std0_ram_sbe : 1;
+		u64 wt_ram_sbe : 1;
+		u64 sc_ram_sbe : 1;
+		u64 reserved_0_45 : 46;
+	} cn73xx;
+	struct cvmx_pko_pse_sq1_ecc_sbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_sq1_ecc_sbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pse_sq1_ecc_sbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq1_ecc_sbe_sts0 cvmx_pko_pse_sq1_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_sq1_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_pse_sq1_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq1_ecc_sbe_sts_cmb0_s {
+		u64 pse_sq1_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_sq1_ecc_sbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pse_sq1_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_sq1_ecc_sbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pse_sq1_ecc_sbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq1_ecc_sbe_sts_cmb0 cvmx_pko_pse_sq1_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_sq2_bist_status
+ *
+ * Each bit is the BIST result of an individual memory (per bit, 0 = pass and 1 = fail).
+ *
+ */
+union cvmx_pko_pse_sq2_bist_status {
+	u64 u64;
+	struct cvmx_pko_pse_sq2_bist_status_s {
+		u64 reserved_29_63 : 35;
+		u64 sc_sram : 1;
+		u64 reserved_21_27 : 7;
+		u64 tp1_sram : 1;
+		u64 tp0_sram : 1;
+		u64 reserved_18_18 : 1;
+		u64 rt_sram : 1;
+		u64 reserved_9_16 : 8;
+		u64 tw1_cmd_fifo : 1;
+		u64 std_sram : 1;
+		u64 sts_sram : 1;
+		u64 tw0_cmd_fifo : 1;
+		u64 reserved_3_4 : 2;
+		u64 nt_sram : 1;
+		u64 pt_sram : 1;
+		u64 wt_sram : 1;
+	} s;
+	struct cvmx_pko_pse_sq2_bist_status_cn73xx {
+		u64 reserved_29_63 : 35;
+		u64 sc_sram : 1;
+		u64 reserved_20_27 : 8;
+		u64 tp0_sram : 1;
+		u64 reserved_18_18 : 1;
+		u64 rt_sram : 1;
+		u64 reserved_8_16 : 9;
+		u64 std_sram : 1;
+		u64 sts_sram : 1;
+		u64 tw0_cmd_fifo : 1;
+		u64 reserved_3_4 : 2;
+		u64 nt_sram : 1;
+		u64 pt_sram : 1;
+		u64 wt_sram : 1;
+	} cn73xx;
+	struct cvmx_pko_pse_sq2_bist_status_s cn78xx;
+	struct cvmx_pko_pse_sq2_bist_status_s cn78xxp1;
+	struct cvmx_pko_pse_sq2_bist_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq2_bist_status cvmx_pko_pse_sq2_bist_status_t;
+
+/**
+ * cvmx_pko_pse_sq2_ecc_ctl0
+ */
+union cvmx_pko_pse_sq2_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq2_ecc_ctl0_s {
+		u64 sq_pt_ram_flip : 2;
+		u64 sq_pt_ram_cdis : 1;
+		u64 sq_nt_ram_flip : 2;
+		u64 sq_nt_ram_cdis : 1;
+		u64 rt_ram_flip : 2;
+		u64 rt_ram_cdis : 1;
+		u64 tw1_cmd_fifo_ram_flip : 2;
+		u64 tw1_cmd_fifo_ram_cdis : 1;
+		u64 tw0_cmd_fifo_ram_flip : 2;
+		u64 tw0_cmd_fifo_ram_cdis : 1;
+		u64 tp1_sram_flip : 2;
+		u64 tp1_sram_cdis : 1;
+		u64 tp0_sram_flip : 2;
+		u64 tp0_sram_cdis : 1;
+		u64 sts1_ram_flip : 2;
+		u64 sts1_ram_cdis : 1;
+		u64 sts0_ram_flip : 2;
+		u64 sts0_ram_cdis : 1;
+		u64 std1_ram_flip : 2;
+		u64 std1_ram_cdis : 1;
+		u64 std0_ram_flip : 2;
+		u64 std0_ram_cdis : 1;
+		u64 wt_ram_flip : 2;
+		u64 wt_ram_cdis : 1;
+		u64 sc_ram_flip : 2;
+		u64 sc_ram_cdis : 1;
+		u64 reserved_0_24 : 25;
+	} s;
+	struct cvmx_pko_pse_sq2_ecc_ctl0_cn73xx {
+		u64 sq_pt_ram_flip : 2;
+		u64 sq_pt_ram_cdis : 1;
+		u64 sq_nt_ram_flip : 2;
+		u64 sq_nt_ram_cdis : 1;
+		u64 rt_ram_flip : 2;
+		u64 rt_ram_cdis : 1;
+		u64 reserved_52_54 : 3;
+		u64 tw0_cmd_fifo_ram_flip : 2;
+		u64 tw0_cmd_fifo_ram_cdis : 1;
+		u64 reserved_46_48 : 3;
+		u64 tp0_sram_flip : 2;
+		u64 tp0_sram_cdis : 1;
+		u64 reserved_40_42 : 3;
+		u64 sts0_ram_flip : 2;
+		u64 sts0_ram_cdis : 1;
+		u64 reserved_34_36 : 3;
+		u64 std0_ram_flip : 2;
+		u64 std0_ram_cdis : 1;
+		u64 wt_ram_flip : 2;
+		u64 wt_ram_cdis : 1;
+		u64 sc_ram_flip : 2;
+		u64 sc_ram_cdis : 1;
+		u64 reserved_0_24 : 25;
+	} cn73xx;
+	struct cvmx_pko_pse_sq2_ecc_ctl0_s cn78xx;
+	struct cvmx_pko_pse_sq2_ecc_ctl0_s cn78xxp1;
+	struct cvmx_pko_pse_sq2_ecc_ctl0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq2_ecc_ctl0 cvmx_pko_pse_sq2_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_pse_sq2_ecc_dbe_sts0
+ */
+union cvmx_pko_pse_sq2_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq2_ecc_dbe_sts0_s {
+		u64 sq_pt_ram_dbe : 1;
+		u64 sq_nt_ram_dbe : 1;
+		u64 rt_ram_dbe : 1;
+		u64 tw1_cmd_fifo_ram_dbe : 1;
+		u64 tw0_cmd_fifo_ram_dbe : 1;
+		u64 tp1_sram_dbe : 1;
+		u64 tp0_sram_dbe : 1;
+		u64 sts1_ram_dbe : 1;
+		u64 sts0_ram_dbe : 1;
+		u64 std1_ram_dbe : 1;
+		u64 std0_ram_dbe : 1;
+		u64 wt_ram_dbe : 1;
+		u64 sc_ram_dbe : 1;
+		u64 reserved_0_50 : 51;
+	} s;
+	struct cvmx_pko_pse_sq2_ecc_dbe_sts0_cn73xx {
+		u64 sq_pt_ram_dbe : 1;
+		u64 sq_nt_ram_dbe : 1;
+		u64 rt_ram_dbe : 1;
+		u64 reserved_60_60 : 1;
+		u64 tw0_cmd_fifo_ram_dbe : 1;
+		u64 reserved_58_58 : 1;
+		u64 tp0_sram_dbe : 1;
+		u64 reserved_56_56 : 1;
+		u64 sts0_ram_dbe : 1;
+		u64 reserved_54_54 : 1;
+		u64 std0_ram_dbe : 1;
+		u64 wt_ram_dbe : 1;
+		u64 sc_ram_dbe : 1;
+		u64 reserved_0_50 : 51;
+	} cn73xx;
+	struct cvmx_pko_pse_sq2_ecc_dbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_sq2_ecc_dbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pse_sq2_ecc_dbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq2_ecc_dbe_sts0 cvmx_pko_pse_sq2_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_sq2_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_pse_sq2_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq2_ecc_dbe_sts_cmb0_s {
+		u64 pse_sq2_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_sq2_ecc_dbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pse_sq2_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_sq2_ecc_dbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pse_sq2_ecc_dbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq2_ecc_dbe_sts_cmb0 cvmx_pko_pse_sq2_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_sq2_ecc_sbe_sts0
+ */
+union cvmx_pko_pse_sq2_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq2_ecc_sbe_sts0_s {
+		u64 sq_pt_ram_sbe : 1;
+		u64 sq_nt_ram_sbe : 1;
+		u64 rt_ram_sbe : 1;
+		u64 tw1_cmd_fifo_ram_sbe : 1;
+		u64 tw0_cmd_fifo_ram_sbe : 1;
+		u64 tp1_sram_sbe : 1;
+		u64 tp0_sram_sbe : 1;
+		u64 sts1_ram_sbe : 1;
+		u64 sts0_ram_sbe : 1;
+		u64 std1_ram_sbe : 1;
+		u64 std0_ram_sbe : 1;
+		u64 wt_ram_sbe : 1;
+		u64 sc_ram_sbe : 1;
+		u64 reserved_0_50 : 51;
+	} s;
+	struct cvmx_pko_pse_sq2_ecc_sbe_sts0_cn73xx {
+		u64 sq_pt_ram_sbe : 1;
+		u64 sq_nt_ram_sbe : 1;
+		u64 rt_ram_sbe : 1;
+		u64 reserved_60_60 : 1;
+		u64 tw0_cmd_fifo_ram_sbe : 1;
+		u64 reserved_58_58 : 1;
+		u64 tp0_sram_sbe : 1;
+		u64 reserved_56_56 : 1;
+		u64 sts0_ram_sbe : 1;
+		u64 reserved_54_54 : 1;
+		u64 std0_ram_sbe : 1;
+		u64 wt_ram_sbe : 1;
+		u64 sc_ram_sbe : 1;
+		u64 reserved_0_50 : 51;
+	} cn73xx;
+	struct cvmx_pko_pse_sq2_ecc_sbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_sq2_ecc_sbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pse_sq2_ecc_sbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq2_ecc_sbe_sts0 cvmx_pko_pse_sq2_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_sq2_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_pse_sq2_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq2_ecc_sbe_sts_cmb0_s {
+		u64 pse_sq2_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_sq2_ecc_sbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pse_sq2_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_sq2_ecc_sbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pse_sq2_ecc_sbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq2_ecc_sbe_sts_cmb0 cvmx_pko_pse_sq2_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_sq3_bist_status
+ *
+ * Each bit is the BIST result of an individual memory (per bit, 0 = pass and 1 = fail).
+ *
+ */
+union cvmx_pko_pse_sq3_bist_status {
+	u64 u64;
+	struct cvmx_pko_pse_sq3_bist_status_s {
+		u64 reserved_29_63 : 35;
+		u64 sc_sram : 1;
+		u64 reserved_23_27 : 5;
+		u64 tp3_sram : 1;
+		u64 tp2_sram : 1;
+		u64 tp1_sram : 1;
+		u64 tp0_sram : 1;
+		u64 reserved_18_18 : 1;
+		u64 rt_sram : 1;
+		u64 reserved_15_16 : 2;
+		u64 tw3_cmd_fifo : 1;
+		u64 reserved_12_13 : 2;
+		u64 tw2_cmd_fifo : 1;
+		u64 reserved_9_10 : 2;
+		u64 tw1_cmd_fifo : 1;
+		u64 std_sram : 1;
+		u64 sts_sram : 1;
+		u64 tw0_cmd_fifo : 1;
+		u64 reserved_3_4 : 2;
+		u64 nt_sram : 1;
+		u64 pt_sram : 1;
+		u64 wt_sram : 1;
+	} s;
+	struct cvmx_pko_pse_sq3_bist_status_cn73xx {
+		u64 reserved_29_63 : 35;
+		u64 sc_sram : 1;
+		u64 reserved_20_27 : 8;
+		u64 tp0_sram : 1;
+		u64 reserved_18_18 : 1;
+		u64 rt_sram : 1;
+		u64 reserved_8_16 : 9;
+		u64 std_sram : 1;
+		u64 sts_sram : 1;
+		u64 tw0_cmd_fifo : 1;
+		u64 reserved_3_4 : 2;
+		u64 nt_sram : 1;
+		u64 pt_sram : 1;
+		u64 wt_sram : 1;
+	} cn73xx;
+	struct cvmx_pko_pse_sq3_bist_status_s cn78xx;
+	struct cvmx_pko_pse_sq3_bist_status_s cn78xxp1;
+	struct cvmx_pko_pse_sq3_bist_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq3_bist_status cvmx_pko_pse_sq3_bist_status_t;
+
+/**
+ * cvmx_pko_pse_sq3_ecc_ctl0
+ */
+union cvmx_pko_pse_sq3_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq3_ecc_ctl0_s {
+		u64 sq_pt_ram_flip : 2;
+		u64 sq_pt_ram_cdis : 1;
+		u64 sq_nt_ram_flip : 2;
+		u64 sq_nt_ram_cdis : 1;
+		u64 rt_ram_flip : 2;
+		u64 rt_ram_cdis : 1;
+		u64 tw3_cmd_fifo_ram_flip : 2;
+		u64 tw3_cmd_fifo_ram_cdis : 1;
+		u64 tw2_cmd_fifo_ram_flip : 2;
+		u64 tw2_cmd_fifo_ram_cdis : 1;
+		u64 tw1_cmd_fifo_ram_flip : 2;
+		u64 tw1_cmd_fifo_ram_cdis : 1;
+		u64 tw0_cmd_fifo_ram_flip : 2;
+		u64 tw0_cmd_fifo_ram_cdis : 1;
+		u64 tp3_sram_flip : 2;
+		u64 tp3_sram_cdis : 1;
+		u64 tp2_sram_flip : 2;
+		u64 tp2_sram_cdis : 1;
+		u64 tp1_sram_flip : 2;
+		u64 tp1_sram_cdis : 1;
+		u64 tp0_sram_flip : 2;
+		u64 tp0_sram_cdis : 1;
+		u64 sts3_ram_flip : 2;
+		u64 sts3_ram_cdis : 1;
+		u64 sts2_ram_flip : 2;
+		u64 sts2_ram_cdis : 1;
+		u64 sts1_ram_flip : 2;
+		u64 sts1_ram_cdis : 1;
+		u64 sts0_ram_flip : 2;
+		u64 sts0_ram_cdis : 1;
+		u64 std3_ram_flip : 2;
+		u64 std3_ram_cdis : 1;
+		u64 std2_ram_flip : 2;
+		u64 std2_ram_cdis : 1;
+		u64 std1_ram_flip : 2;
+		u64 std1_ram_cdis : 1;
+		u64 std0_ram_flip : 2;
+		u64 std0_ram_cdis : 1;
+		u64 wt_ram_flip : 2;
+		u64 wt_ram_cdis : 1;
+		u64 sc_ram_flip : 2;
+		u64 sc_ram_cdis : 1;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_pse_sq3_ecc_ctl0_cn73xx {
+		u64 sq_pt_ram_flip : 2;
+		u64 sq_pt_ram_cdis : 1;
+		u64 sq_nt_ram_flip : 2;
+		u64 sq_nt_ram_cdis : 1;
+		u64 rt_ram_flip : 2;
+		u64 rt_ram_cdis : 1;
+		u64 reserved_46_54 : 9;
+		u64 tw0_cmd_fifo_ram_flip : 2;
+		u64 tw0_cmd_fifo_ram_cdis : 1;
+		u64 reserved_34_42 : 9;
+		u64 tp0_sram_flip : 2;
+		u64 tp0_sram_cdis : 1;
+		u64 reserved_22_30 : 9;
+		u64 sts0_ram_flip : 2;
+		u64 sts0_ram_cdis : 1;
+		u64 reserved_10_18 : 9;
+		u64 std0_ram_flip : 2;
+		u64 std0_ram_cdis : 1;
+		u64 wt_ram_flip : 2;
+		u64 wt_ram_cdis : 1;
+		u64 sc_ram_flip : 2;
+		u64 sc_ram_cdis : 1;
+		u64 reserved_0_0 : 1;
+	} cn73xx;
+	struct cvmx_pko_pse_sq3_ecc_ctl0_s cn78xx;
+	struct cvmx_pko_pse_sq3_ecc_ctl0_s cn78xxp1;
+	struct cvmx_pko_pse_sq3_ecc_ctl0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq3_ecc_ctl0 cvmx_pko_pse_sq3_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_pse_sq3_ecc_dbe_sts0
+ */
+union cvmx_pko_pse_sq3_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq3_ecc_dbe_sts0_s {
+		u64 sq_pt_ram_dbe : 1;
+		u64 sq_nt_ram_dbe : 1;
+		u64 rt_ram_dbe : 1;
+		u64 tw3_cmd_fifo_ram_dbe : 1;
+		u64 tw2_cmd_fifo_ram_dbe : 1;
+		u64 tw1_cmd_fifo_ram_dbe : 1;
+		u64 tw0_cmd_fifo_ram_dbe : 1;
+		u64 tp3_sram_dbe : 1;
+		u64 tp2_sram_dbe : 1;
+		u64 tp1_sram_dbe : 1;
+		u64 tp0_sram_dbe : 1;
+		u64 sts3_ram_dbe : 1;
+		u64 sts2_ram_dbe : 1;
+		u64 sts1_ram_dbe : 1;
+		u64 sts0_ram_dbe : 1;
+		u64 std3_ram_dbe : 1;
+		u64 std2_ram_dbe : 1;
+		u64 std1_ram_dbe : 1;
+		u64 std0_ram_dbe : 1;
+		u64 wt_ram_dbe : 1;
+		u64 sc_ram_dbe : 1;
+		u64 reserved_0_42 : 43;
+	} s;
+	struct cvmx_pko_pse_sq3_ecc_dbe_sts0_cn73xx {
+		u64 sq_pt_ram_dbe : 1;
+		u64 sq_nt_ram_dbe : 1;
+		u64 rt_ram_dbe : 1;
+		u64 reserved_58_60 : 3;
+		u64 tw0_cmd_fifo_ram_dbe : 1;
+		u64 reserved_54_56 : 3;
+		u64 tp0_sram_dbe : 1;
+		u64 reserved_50_52 : 3;
+		u64 sts0_ram_dbe : 1;
+		u64 reserved_46_48 : 3;
+		u64 std0_ram_dbe : 1;
+		u64 wt_ram_dbe : 1;
+		u64 sc_ram_dbe : 1;
+		u64 reserved_0_42 : 43;
+	} cn73xx;
+	struct cvmx_pko_pse_sq3_ecc_dbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_sq3_ecc_dbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pse_sq3_ecc_dbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq3_ecc_dbe_sts0 cvmx_pko_pse_sq3_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_sq3_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_pse_sq3_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq3_ecc_dbe_sts_cmb0_s {
+		u64 pse_sq3_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_sq3_ecc_dbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pse_sq3_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_sq3_ecc_dbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pse_sq3_ecc_dbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq3_ecc_dbe_sts_cmb0 cvmx_pko_pse_sq3_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_sq3_ecc_sbe_sts0
+ */
+union cvmx_pko_pse_sq3_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq3_ecc_sbe_sts0_s {
+		u64 sq_pt_ram_sbe : 1;
+		u64 sq_nt_ram_sbe : 1;
+		u64 rt_ram_sbe : 1;
+		u64 tw3_cmd_fifo_ram_sbe : 1;
+		u64 tw2_cmd_fifo_ram_sbe : 1;
+		u64 tw1_cmd_fifo_ram_sbe : 1;
+		u64 tw0_cmd_fifo_ram_sbe : 1;
+		u64 tp3_sram_sbe : 1;
+		u64 tp2_sram_sbe : 1;
+		u64 tp1_sram_sbe : 1;
+		u64 tp0_sram_sbe : 1;
+		u64 sts3_ram_sbe : 1;
+		u64 sts2_ram_sbe : 1;
+		u64 sts1_ram_sbe : 1;
+		u64 sts0_ram_sbe : 1;
+		u64 std3_ram_sbe : 1;
+		u64 std2_ram_sbe : 1;
+		u64 std1_ram_sbe : 1;
+		u64 std0_ram_sbe : 1;
+		u64 wt_ram_sbe : 1;
+		u64 sc_ram_sbe : 1;
+		u64 reserved_0_42 : 43;
+	} s;
+	struct cvmx_pko_pse_sq3_ecc_sbe_sts0_cn73xx {
+		u64 sq_pt_ram_sbe : 1;
+		u64 sq_nt_ram_sbe : 1;
+		u64 rt_ram_sbe : 1;
+		u64 reserved_58_60 : 3;
+		u64 tw0_cmd_fifo_ram_sbe : 1;
+		u64 reserved_54_56 : 3;
+		u64 tp0_sram_sbe : 1;
+		u64 reserved_50_52 : 3;
+		u64 sts0_ram_sbe : 1;
+		u64 reserved_46_48 : 3;
+		u64 std0_ram_sbe : 1;
+		u64 wt_ram_sbe : 1;
+		u64 sc_ram_sbe : 1;
+		u64 reserved_0_42 : 43;
+	} cn73xx;
+	struct cvmx_pko_pse_sq3_ecc_sbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_sq3_ecc_sbe_sts0_s cn78xxp1;
+	struct cvmx_pko_pse_sq3_ecc_sbe_sts0_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq3_ecc_sbe_sts0 cvmx_pko_pse_sq3_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_sq3_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_pse_sq3_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq3_ecc_sbe_sts_cmb0_s {
+		u64 pse_sq3_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_sq3_ecc_sbe_sts_cmb0_s cn73xx;
+	struct cvmx_pko_pse_sq3_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_sq3_ecc_sbe_sts_cmb0_s cn78xxp1;
+	struct cvmx_pko_pse_sq3_ecc_sbe_sts_cmb0_s cnf75xx;
+};
+
+typedef union cvmx_pko_pse_sq3_ecc_sbe_sts_cmb0 cvmx_pko_pse_sq3_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_sq4_bist_status
+ *
+ * Each bit is the BIST result of an individual memory (per bit, 0 = pass and 1 = fail).
+ *
+ */
+union cvmx_pko_pse_sq4_bist_status {
+	u64 u64;
+	struct cvmx_pko_pse_sq4_bist_status_s {
+		u64 reserved_29_63 : 35;
+		u64 sc_sram : 1;
+		u64 reserved_23_27 : 5;
+		u64 tp3_sram : 1;
+		u64 tp2_sram : 1;
+		u64 tp1_sram : 1;
+		u64 tp0_sram : 1;
+		u64 reserved_18_18 : 1;
+		u64 rt_sram : 1;
+		u64 reserved_15_16 : 2;
+		u64 tw3_cmd_fifo : 1;
+		u64 reserved_12_13 : 2;
+		u64 tw2_cmd_fifo : 1;
+		u64 reserved_9_10 : 2;
+		u64 tw1_cmd_fifo : 1;
+		u64 std_sram : 1;
+		u64 sts_sram : 1;
+		u64 tw0_cmd_fifo : 1;
+		u64 reserved_3_4 : 2;
+		u64 nt_sram : 1;
+		u64 pt_sram : 1;
+		u64 wt_sram : 1;
+	} s;
+	struct cvmx_pko_pse_sq4_bist_status_s cn78xx;
+	struct cvmx_pko_pse_sq4_bist_status_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq4_bist_status cvmx_pko_pse_sq4_bist_status_t;
+
+/**
+ * cvmx_pko_pse_sq4_ecc_ctl0
+ */
+union cvmx_pko_pse_sq4_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq4_ecc_ctl0_s {
+		u64 sq_pt_ram_flip : 2;
+		u64 sq_pt_ram_cdis : 1;
+		u64 sq_nt_ram_flip : 2;
+		u64 sq_nt_ram_cdis : 1;
+		u64 rt_ram_flip : 2;
+		u64 rt_ram_cdis : 1;
+		u64 tw3_cmd_fifo_ram_flip : 2;
+		u64 tw3_cmd_fifo_ram_cdis : 1;
+		u64 tw2_cmd_fifo_ram_flip : 2;
+		u64 tw2_cmd_fifo_ram_cdis : 1;
+		u64 tw1_cmd_fifo_ram_flip : 2;
+		u64 tw1_cmd_fifo_ram_cdis : 1;
+		u64 tw0_cmd_fifo_ram_flip : 2;
+		u64 tw0_cmd_fifo_ram_cdis : 1;
+		u64 tp3_sram_flip : 2;
+		u64 tp3_sram_cdis : 1;
+		u64 tp2_sram_flip : 2;
+		u64 tp2_sram_cdis : 1;
+		u64 tp1_sram_flip : 2;
+		u64 tp1_sram_cdis : 1;
+		u64 tp0_sram_flip : 2;
+		u64 tp0_sram_cdis : 1;
+		u64 sts3_ram_flip : 2;
+		u64 sts3_ram_cdis : 1;
+		u64 sts2_ram_flip : 2;
+		u64 sts2_ram_cdis : 1;
+		u64 sts1_ram_flip : 2;
+		u64 sts1_ram_cdis : 1;
+		u64 sts0_ram_flip : 2;
+		u64 sts0_ram_cdis : 1;
+		u64 std3_ram_flip : 2;
+		u64 std3_ram_cdis : 1;
+		u64 std2_ram_flip : 2;
+		u64 std2_ram_cdis : 1;
+		u64 std1_ram_flip : 2;
+		u64 std1_ram_cdis : 1;
+		u64 std0_ram_flip : 2;
+		u64 std0_ram_cdis : 1;
+		u64 wt_ram_flip : 2;
+		u64 wt_ram_cdis : 1;
+		u64 sc_ram_flip : 2;
+		u64 sc_ram_cdis : 1;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_pse_sq4_ecc_ctl0_s cn78xx;
+	struct cvmx_pko_pse_sq4_ecc_ctl0_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq4_ecc_ctl0 cvmx_pko_pse_sq4_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_pse_sq4_ecc_dbe_sts0
+ */
+union cvmx_pko_pse_sq4_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq4_ecc_dbe_sts0_s {
+		u64 sq_pt_ram_dbe : 1;
+		u64 sq_nt_ram_dbe : 1;
+		u64 rt_ram_dbe : 1;
+		u64 tw3_cmd_fifo_ram_dbe : 1;
+		u64 tw2_cmd_fifo_ram_dbe : 1;
+		u64 tw1_cmd_fifo_ram_dbe : 1;
+		u64 tw0_cmd_fifo_ram_dbe : 1;
+		u64 tp3_sram_dbe : 1;
+		u64 tp2_sram_dbe : 1;
+		u64 tp1_sram_dbe : 1;
+		u64 tp0_sram_dbe : 1;
+		u64 sts3_ram_dbe : 1;
+		u64 sts2_ram_dbe : 1;
+		u64 sts1_ram_dbe : 1;
+		u64 sts0_ram_dbe : 1;
+		u64 std3_ram_dbe : 1;
+		u64 std2_ram_dbe : 1;
+		u64 std1_ram_dbe : 1;
+		u64 std0_ram_dbe : 1;
+		u64 wt_ram_dbe : 1;
+		u64 sc_ram_dbe : 1;
+		u64 reserved_0_42 : 43;
+	} s;
+	struct cvmx_pko_pse_sq4_ecc_dbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_sq4_ecc_dbe_sts0_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq4_ecc_dbe_sts0 cvmx_pko_pse_sq4_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_sq4_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_pse_sq4_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq4_ecc_dbe_sts_cmb0_s {
+		u64 pse_sq4_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_sq4_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_sq4_ecc_dbe_sts_cmb0_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq4_ecc_dbe_sts_cmb0 cvmx_pko_pse_sq4_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_sq4_ecc_sbe_sts0
+ */
+union cvmx_pko_pse_sq4_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq4_ecc_sbe_sts0_s {
+		u64 sq_pt_ram_sbe : 1;
+		u64 sq_nt_ram_sbe : 1;
+		u64 rt_ram_sbe : 1;
+		u64 tw3_cmd_fifo_ram_sbe : 1;
+		u64 tw2_cmd_fifo_ram_sbe : 1;
+		u64 tw1_cmd_fifo_ram_sbe : 1;
+		u64 tw0_cmd_fifo_ram_sbe : 1;
+		u64 tp3_sram_sbe : 1;
+		u64 tp2_sram_sbe : 1;
+		u64 tp1_sram_sbe : 1;
+		u64 tp0_sram_sbe : 1;
+		u64 sts3_ram_sbe : 1;
+		u64 sts2_ram_sbe : 1;
+		u64 sts1_ram_sbe : 1;
+		u64 sts0_ram_sbe : 1;
+		u64 std3_ram_sbe : 1;
+		u64 std2_ram_sbe : 1;
+		u64 std1_ram_sbe : 1;
+		u64 std0_ram_sbe : 1;
+		u64 wt_ram_sbe : 1;
+		u64 sc_ram_sbe : 1;
+		u64 reserved_0_42 : 43;
+	} s;
+	struct cvmx_pko_pse_sq4_ecc_sbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_sq4_ecc_sbe_sts0_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq4_ecc_sbe_sts0 cvmx_pko_pse_sq4_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_sq4_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_pse_sq4_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq4_ecc_sbe_sts_cmb0_s {
+		u64 pse_sq4_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_sq4_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_sq4_ecc_sbe_sts_cmb0_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq4_ecc_sbe_sts_cmb0 cvmx_pko_pse_sq4_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_sq5_bist_status
+ *
+ * Each bit is the BIST result of an individual memory (per bit, 0 = pass and 1 = fail).
+ *
+ */
+union cvmx_pko_pse_sq5_bist_status {
+	u64 u64;
+	struct cvmx_pko_pse_sq5_bist_status_s {
+		u64 reserved_29_63 : 35;
+		u64 sc_sram : 1;
+		u64 reserved_23_27 : 5;
+		u64 tp3_sram : 1;
+		u64 tp2_sram : 1;
+		u64 tp1_sram : 1;
+		u64 tp0_sram : 1;
+		u64 reserved_18_18 : 1;
+		u64 rt_sram : 1;
+		u64 reserved_15_16 : 2;
+		u64 tw3_cmd_fifo : 1;
+		u64 reserved_12_13 : 2;
+		u64 tw2_cmd_fifo : 1;
+		u64 reserved_9_10 : 2;
+		u64 tw1_cmd_fifo : 1;
+		u64 std_sram : 1;
+		u64 sts_sram : 1;
+		u64 tw0_cmd_fifo : 1;
+		u64 reserved_3_4 : 2;
+		u64 nt_sram : 1;
+		u64 pt_sram : 1;
+		u64 wt_sram : 1;
+	} s;
+	struct cvmx_pko_pse_sq5_bist_status_s cn78xx;
+	struct cvmx_pko_pse_sq5_bist_status_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq5_bist_status cvmx_pko_pse_sq5_bist_status_t;
+
+/**
+ * cvmx_pko_pse_sq5_ecc_ctl0
+ */
+union cvmx_pko_pse_sq5_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq5_ecc_ctl0_s {
+		u64 sq_pt_ram_flip : 2;
+		u64 sq_pt_ram_cdis : 1;
+		u64 sq_nt_ram_flip : 2;
+		u64 sq_nt_ram_cdis : 1;
+		u64 rt_ram_flip : 2;
+		u64 rt_ram_cdis : 1;
+		u64 tw3_cmd_fifo_ram_flip : 2;
+		u64 tw3_cmd_fifo_ram_cdis : 1;
+		u64 tw2_cmd_fifo_ram_flip : 2;
+		u64 tw2_cmd_fifo_ram_cdis : 1;
+		u64 tw1_cmd_fifo_ram_flip : 2;
+		u64 tw1_cmd_fifo_ram_cdis : 1;
+		u64 tw0_cmd_fifo_ram_flip : 2;
+		u64 tw0_cmd_fifo_ram_cdis : 1;
+		u64 tp3_sram_flip : 2;
+		u64 tp3_sram_cdis : 1;
+		u64 tp2_sram_flip : 2;
+		u64 tp2_sram_cdis : 1;
+		u64 tp1_sram_flip : 2;
+		u64 tp1_sram_cdis : 1;
+		u64 tp0_sram_flip : 2;
+		u64 tp0_sram_cdis : 1;
+		u64 sts3_ram_flip : 2;
+		u64 sts3_ram_cdis : 1;
+		u64 sts2_ram_flip : 2;
+		u64 sts2_ram_cdis : 1;
+		u64 sts1_ram_flip : 2;
+		u64 sts1_ram_cdis : 1;
+		u64 sts0_ram_flip : 2;
+		u64 sts0_ram_cdis : 1;
+		u64 std3_ram_flip : 2;
+		u64 std3_ram_cdis : 1;
+		u64 std2_ram_flip : 2;
+		u64 std2_ram_cdis : 1;
+		u64 std1_ram_flip : 2;
+		u64 std1_ram_cdis : 1;
+		u64 std0_ram_flip : 2;
+		u64 std0_ram_cdis : 1;
+		u64 wt_ram_flip : 2;
+		u64 wt_ram_cdis : 1;
+		u64 sc_ram_flip : 2;
+		u64 sc_ram_cdis : 1;
+		u64 reserved_0_0 : 1;
+	} s;
+	struct cvmx_pko_pse_sq5_ecc_ctl0_s cn78xx;
+	struct cvmx_pko_pse_sq5_ecc_ctl0_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq5_ecc_ctl0 cvmx_pko_pse_sq5_ecc_ctl0_t;
+
+/**
+ * cvmx_pko_pse_sq5_ecc_dbe_sts0
+ */
+union cvmx_pko_pse_sq5_ecc_dbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq5_ecc_dbe_sts0_s {
+		u64 sq_pt_ram_dbe : 1;
+		u64 sq_nt_ram_dbe : 1;
+		u64 rt_ram_dbe : 1;
+		u64 tw3_cmd_fifo_ram_dbe : 1;
+		u64 tw2_cmd_fifo_ram_dbe : 1;
+		u64 tw1_cmd_fifo_ram_dbe : 1;
+		u64 tw0_cmd_fifo_ram_dbe : 1;
+		u64 tp3_sram_dbe : 1;
+		u64 tp2_sram_dbe : 1;
+		u64 tp1_sram_dbe : 1;
+		u64 tp0_sram_dbe : 1;
+		u64 sts3_ram_dbe : 1;
+		u64 sts2_ram_dbe : 1;
+		u64 sts1_ram_dbe : 1;
+		u64 sts0_ram_dbe : 1;
+		u64 std3_ram_dbe : 1;
+		u64 std2_ram_dbe : 1;
+		u64 std1_ram_dbe : 1;
+		u64 std0_ram_dbe : 1;
+		u64 wt_ram_dbe : 1;
+		u64 sc_ram_dbe : 1;
+		u64 reserved_0_42 : 43;
+	} s;
+	struct cvmx_pko_pse_sq5_ecc_dbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_sq5_ecc_dbe_sts0_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq5_ecc_dbe_sts0 cvmx_pko_pse_sq5_ecc_dbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_sq5_ecc_dbe_sts_cmb0
+ */
+union cvmx_pko_pse_sq5_ecc_dbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq5_ecc_dbe_sts_cmb0_s {
+		u64 pse_sq5_dbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_sq5_ecc_dbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_sq5_ecc_dbe_sts_cmb0_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq5_ecc_dbe_sts_cmb0 cvmx_pko_pse_sq5_ecc_dbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_pse_sq5_ecc_sbe_sts0
+ */
+union cvmx_pko_pse_sq5_ecc_sbe_sts0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq5_ecc_sbe_sts0_s {
+		u64 sq_pt_ram_sbe : 1;
+		u64 sq_nt_ram_sbe : 1;
+		u64 rt_ram_sbe : 1;
+		u64 tw3_cmd_fifo_ram_sbe : 1;
+		u64 tw2_cmd_fifo_ram_sbe : 1;
+		u64 tw1_cmd_fifo_ram_sbe : 1;
+		u64 tw0_cmd_fifo_ram_sbe : 1;
+		u64 tp3_sram_sbe : 1;
+		u64 tp2_sram_sbe : 1;
+		u64 tp1_sram_sbe : 1;
+		u64 tp0_sram_sbe : 1;
+		u64 sts3_ram_sbe : 1;
+		u64 sts2_ram_sbe : 1;
+		u64 sts1_ram_sbe : 1;
+		u64 sts0_ram_sbe : 1;
+		u64 std3_ram_sbe : 1;
+		u64 std2_ram_sbe : 1;
+		u64 std1_ram_sbe : 1;
+		u64 std0_ram_sbe : 1;
+		u64 wt_ram_sbe : 1;
+		u64 sc_ram_sbe : 1;
+		u64 reserved_0_42 : 43;
+	} s;
+	struct cvmx_pko_pse_sq5_ecc_sbe_sts0_s cn78xx;
+	struct cvmx_pko_pse_sq5_ecc_sbe_sts0_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq5_ecc_sbe_sts0 cvmx_pko_pse_sq5_ecc_sbe_sts0_t;
+
+/**
+ * cvmx_pko_pse_sq5_ecc_sbe_sts_cmb0
+ */
+union cvmx_pko_pse_sq5_ecc_sbe_sts_cmb0 {
+	u64 u64;
+	struct cvmx_pko_pse_sq5_ecc_sbe_sts_cmb0_s {
+		u64 pse_sq5_sbe_cmb0 : 1;
+		u64 reserved_0_62 : 63;
+	} s;
+	struct cvmx_pko_pse_sq5_ecc_sbe_sts_cmb0_s cn78xx;
+	struct cvmx_pko_pse_sq5_ecc_sbe_sts_cmb0_s cn78xxp1;
+};
+
+typedef union cvmx_pko_pse_sq5_ecc_sbe_sts_cmb0 cvmx_pko_pse_sq5_ecc_sbe_sts_cmb0_t;
+
+/**
+ * cvmx_pko_ptf#_status
+ */
+union cvmx_pko_ptfx_status {
+	u64 u64;
+	struct cvmx_pko_ptfx_status_s {
+		u64 reserved_30_63 : 34;
+		u64 tx_fifo_pkt_credit_cnt : 10;
+		u64 total_in_flight_cnt : 8;
+		u64 in_flight_cnt : 7;
+		u64 mac_num : 5;
+	} s;
+	struct cvmx_pko_ptfx_status_s cn73xx;
+	struct cvmx_pko_ptfx_status_s cn78xx;
+	struct cvmx_pko_ptfx_status_s cn78xxp1;
+	struct cvmx_pko_ptfx_status_s cnf75xx;
+};
+
+typedef union cvmx_pko_ptfx_status cvmx_pko_ptfx_status_t;
+
+/**
+ * cvmx_pko_ptf_iobp_cfg
+ */
+union cvmx_pko_ptf_iobp_cfg {
+	u64 u64;
+	struct cvmx_pko_ptf_iobp_cfg_s {
+		u64 reserved_44_63 : 20;
+		u64 iobp1_ds_opt : 1;
+		u64 iobp0_l2_allocate : 1;
+		u64 iobp1_magic_addr : 35;
+		u64 max_read_size : 7;
+	} s;
+	struct cvmx_pko_ptf_iobp_cfg_s cn73xx;
+	struct cvmx_pko_ptf_iobp_cfg_s cn78xx;
+	struct cvmx_pko_ptf_iobp_cfg_s cn78xxp1;
+	struct cvmx_pko_ptf_iobp_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pko_ptf_iobp_cfg cvmx_pko_ptf_iobp_cfg_t;
+
+/**
+ * cvmx_pko_ptgf#_cfg
+ *
+ * This register configures a PKO TX FIFO group. PKO supports up to 17 independent
+ * TX FIFOs, where 0-15 are physical and 16 is Virtual/NULL. (PKO drops packets
+ * targeting the NULL FIFO, returning their buffers to the FPA.) PKO puts each
+ * FIFO into one of five groups:
+ *
+ * <pre>
+ *    CSR Name       FIFO's in FIFO Group
+ *   ------------------------------------
+ *   PKO_PTGF0_CFG      0,  1,  2,  3
+ *   PKO_PTGF1_CFG      4,  5,  6,  7
+ *   PKO_PTGF2_CFG      8,  9, 10, 11
+ *   PKO_PTGF3_CFG     12, 13, 14, 15
+ *   PKO_PTGF4_CFG      Virtual/NULL
+ * </pre>
+ */
+union cvmx_pko_ptgfx_cfg {
+	u64 u64;
+	struct cvmx_pko_ptgfx_cfg_s {
+		u64 reserved_7_63 : 57;
+		u64 reset : 1;
+		u64 rate : 3;
+		u64 size : 3;
+	} s;
+	struct cvmx_pko_ptgfx_cfg_cn73xx {
+		u64 reserved_7_63 : 57;
+		u64 reset : 1;
+		u64 reserved_5_5 : 1;
+		u64 rate : 2;
+		u64 size : 3;
+	} cn73xx;
+	struct cvmx_pko_ptgfx_cfg_s cn78xx;
+	struct cvmx_pko_ptgfx_cfg_s cn78xxp1;
+	struct cvmx_pko_ptgfx_cfg_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_ptgfx_cfg cvmx_pko_ptgfx_cfg_t;
+
+/**
+ * cvmx_pko_reg_bist_result
+ *
+ * Notes:
+ * Access to the internal BiST results
+ * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail).
+ */
+union cvmx_pko_reg_bist_result {
+	u64 u64;
+	struct cvmx_pko_reg_bist_result_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_pko_reg_bist_result_cn30xx {
+		u64 reserved_27_63 : 37;
+		u64 psb2 : 5;
+		u64 count : 1;
+		u64 rif : 1;
+		u64 wif : 1;
+		u64 ncb : 1;
+		u64 out : 1;
+		u64 crc : 1;
+		u64 chk : 1;
+		u64 qsb : 2;
+		u64 qcb : 2;
+		u64 pdb : 4;
+		u64 psb : 7;
+	} cn30xx;
+	struct cvmx_pko_reg_bist_result_cn30xx cn31xx;
+	struct cvmx_pko_reg_bist_result_cn30xx cn38xx;
+	struct cvmx_pko_reg_bist_result_cn30xx cn38xxp2;
+	struct cvmx_pko_reg_bist_result_cn50xx {
+		u64 reserved_33_63 : 31;
+		u64 csr : 1;
+		u64 iob : 1;
+		u64 out_crc : 1;
+		u64 out_ctl : 3;
+		u64 out_sta : 1;
+		u64 out_wif : 1;
+		u64 prt_chk : 3;
+		u64 prt_nxt : 1;
+		u64 prt_psb : 6;
+		u64 ncb_inb : 2;
+		u64 prt_qcb : 2;
+		u64 prt_qsb : 3;
+		u64 dat_dat : 4;
+		u64 dat_ptr : 4;
+	} cn50xx;
+	struct cvmx_pko_reg_bist_result_cn52xx {
+		u64 reserved_35_63 : 29;
+		u64 csr : 1;
+		u64 iob : 1;
+		u64 out_dat : 1;
+		u64 out_ctl : 3;
+		u64 out_sta : 1;
+		u64 out_wif : 1;
+		u64 prt_chk : 3;
+		u64 prt_nxt : 1;
+		u64 prt_psb : 8;
+		u64 ncb_inb : 2;
+		u64 prt_qcb : 2;
+		u64 prt_qsb : 3;
+		u64 prt_ctl : 2;
+		u64 dat_dat : 2;
+		u64 dat_ptr : 4;
+	} cn52xx;
+	struct cvmx_pko_reg_bist_result_cn52xx cn52xxp1;
+	struct cvmx_pko_reg_bist_result_cn52xx cn56xx;
+	struct cvmx_pko_reg_bist_result_cn52xx cn56xxp1;
+	struct cvmx_pko_reg_bist_result_cn50xx cn58xx;
+	struct cvmx_pko_reg_bist_result_cn50xx cn58xxp1;
+	struct cvmx_pko_reg_bist_result_cn52xx cn61xx;
+	struct cvmx_pko_reg_bist_result_cn52xx cn63xx;
+	struct cvmx_pko_reg_bist_result_cn52xx cn63xxp1;
+	struct cvmx_pko_reg_bist_result_cn52xx cn66xx;
+	struct cvmx_pko_reg_bist_result_cn68xx {
+		u64 reserved_36_63 : 28;
+		u64 crc : 1;
+		u64 csr : 1;
+		u64 iob : 1;
+		u64 out_dat : 1;
+		u64 reserved_31_31 : 1;
+		u64 out_ctl : 2;
+		u64 out_sta : 1;
+		u64 out_wif : 1;
+		u64 prt_chk : 3;
+		u64 prt_nxt : 1;
+		u64 prt_psb7 : 1;
+		u64 reserved_21_21 : 1;
+		u64 prt_psb : 6;
+		u64 ncb_inb : 2;
+		u64 prt_qcb : 2;
+		u64 prt_qsb : 3;
+		u64 prt_ctl : 2;
+		u64 dat_dat : 2;
+		u64 dat_ptr : 4;
+	} cn68xx;
+	struct cvmx_pko_reg_bist_result_cn68xxp1 {
+		u64 reserved_35_63 : 29;
+		u64 csr : 1;
+		u64 iob : 1;
+		u64 out_dat : 1;
+		u64 reserved_31_31 : 1;
+		u64 out_ctl : 2;
+		u64 out_sta : 1;
+		u64 out_wif : 1;
+		u64 prt_chk : 3;
+		u64 prt_nxt : 1;
+		u64 prt_psb7 : 1;
+		u64 reserved_21_21 : 1;
+		u64 prt_psb : 6;
+		u64 ncb_inb : 2;
+		u64 prt_qcb : 2;
+		u64 prt_qsb : 3;
+		u64 prt_ctl : 2;
+		u64 dat_dat : 2;
+		u64 dat_ptr : 4;
+	} cn68xxp1;
+	struct cvmx_pko_reg_bist_result_cn70xx {
+		u64 reserved_30_63 : 34;
+		u64 csr : 1;
+		u64 iob : 1;
+		u64 out_dat : 1;
+		u64 out_ctl : 1;
+		u64 out_sta : 1;
+		u64 out_wif : 1;
+		u64 prt_chk : 3;
+		u64 prt_nxt : 1;
+		u64 prt_psb : 8;
+		u64 ncb_inb : 1;
+		u64 prt_qcb : 1;
+		u64 prt_qsb : 2;
+		u64 prt_ctl : 2;
+		u64 dat_dat : 2;
+		u64 dat_ptr : 4;
+	} cn70xx;
+	struct cvmx_pko_reg_bist_result_cn70xx cn70xxp1;
+	struct cvmx_pko_reg_bist_result_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pko_reg_bist_result cvmx_pko_reg_bist_result_t;
+
+/**
+ * cvmx_pko_reg_cmd_buf
+ *
+ * Notes:
+ * Sets the command buffer parameters
+ * The size of the command buffer segments is measured in uint64s.  The pool specifies (1 of 8 free
+ * lists to be used when freeing command buffer segments.
+ */
+union cvmx_pko_reg_cmd_buf {
+	u64 u64;
+	struct cvmx_pko_reg_cmd_buf_s {
+		u64 reserved_23_63 : 41;
+		u64 pool : 3;
+		u64 reserved_13_19 : 7;
+		u64 size : 13;
+	} s;
+	struct cvmx_pko_reg_cmd_buf_s cn30xx;
+	struct cvmx_pko_reg_cmd_buf_s cn31xx;
+	struct cvmx_pko_reg_cmd_buf_s cn38xx;
+	struct cvmx_pko_reg_cmd_buf_s cn38xxp2;
+	struct cvmx_pko_reg_cmd_buf_s cn50xx;
+	struct cvmx_pko_reg_cmd_buf_s cn52xx;
+	struct cvmx_pko_reg_cmd_buf_s cn52xxp1;
+	struct cvmx_pko_reg_cmd_buf_s cn56xx;
+	struct cvmx_pko_reg_cmd_buf_s cn56xxp1;
+	struct cvmx_pko_reg_cmd_buf_s cn58xx;
+	struct cvmx_pko_reg_cmd_buf_s cn58xxp1;
+	struct cvmx_pko_reg_cmd_buf_s cn61xx;
+	struct cvmx_pko_reg_cmd_buf_s cn63xx;
+	struct cvmx_pko_reg_cmd_buf_s cn63xxp1;
+	struct cvmx_pko_reg_cmd_buf_s cn66xx;
+	struct cvmx_pko_reg_cmd_buf_s cn68xx;
+	struct cvmx_pko_reg_cmd_buf_s cn68xxp1;
+	struct cvmx_pko_reg_cmd_buf_cn70xx {
+		u64 reserved_23_63 : 41;
+		u64 pool : 3;
+		u64 reserved_19_13 : 7;
+		u64 size : 13;
+	} cn70xx;
+	struct cvmx_pko_reg_cmd_buf_cn70xx cn70xxp1;
+	struct cvmx_pko_reg_cmd_buf_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_cmd_buf cvmx_pko_reg_cmd_buf_t;
+
+/**
+ * cvmx_pko_reg_crc_ctl#
+ *
+ * Notes:
+ * Controls datapath reflection when calculating CRC
+ *
+ */
+union cvmx_pko_reg_crc_ctlx {
+	u64 u64;
+	struct cvmx_pko_reg_crc_ctlx_s {
+		u64 reserved_2_63 : 62;
+		u64 invres : 1;
+		u64 refin : 1;
+	} s;
+	struct cvmx_pko_reg_crc_ctlx_s cn38xx;
+	struct cvmx_pko_reg_crc_ctlx_s cn38xxp2;
+	struct cvmx_pko_reg_crc_ctlx_s cn58xx;
+	struct cvmx_pko_reg_crc_ctlx_s cn58xxp1;
+};
+
+typedef union cvmx_pko_reg_crc_ctlx cvmx_pko_reg_crc_ctlx_t;
+
+/**
+ * cvmx_pko_reg_crc_enable
+ *
+ * Notes:
+ * Enables CRC for the GMX ports.
+ *
+ */
+union cvmx_pko_reg_crc_enable {
+	u64 u64;
+	struct cvmx_pko_reg_crc_enable_s {
+		u64 reserved_32_63 : 32;
+		u64 enable : 32;
+	} s;
+	struct cvmx_pko_reg_crc_enable_s cn38xx;
+	struct cvmx_pko_reg_crc_enable_s cn38xxp2;
+	struct cvmx_pko_reg_crc_enable_s cn58xx;
+	struct cvmx_pko_reg_crc_enable_s cn58xxp1;
+};
+
+typedef union cvmx_pko_reg_crc_enable cvmx_pko_reg_crc_enable_t;
+
+/**
+ * cvmx_pko_reg_crc_iv#
+ *
+ * Notes:
+ * Determines the IV used by the CRC algorithm
+ * * PKO_CRC_IV
+ *  PKO_CRC_IV controls the initial state of the CRC algorithm.  Octane can
+ *  support a wide range of CRC algorithms and as such, the IV must be
+ *  carefully constructed to meet the specific algorithm.  The code below
+ *  determines the value to program into Octane based on the algorthim's IV
+ *  and width.  In the case of Octane, the width should always be 32.
+ *
+ *  PKO_CRC_IV0 sets the IV for ports 0-15 while PKO_CRC_IV1 sets the IV for
+ *  ports 16-31.
+ *
+ *   @verbatim
+ *   unsigned octane_crc_iv(unsigned algorithm_iv, unsigned poly, unsigned w)
+ *   [
+ *     int i;
+ *     int doit;
+ *     unsigned int current_val = algorithm_iv;
+ *
+ *     for(i = 0; i < w; i++) [
+ *       doit = current_val & 0x1;
+ *
+ *       if(doit) current_val ^= poly;
+ *       assert(!(current_val & 0x1));
+ *
+ *       current_val = (current_val >> 1) | (doit << (w-1));
+ *     ]
+ *
+ *     return current_val;
+ *   ]
+ *   @endverbatim
+ */
+union cvmx_pko_reg_crc_ivx {
+	u64 u64;
+	struct cvmx_pko_reg_crc_ivx_s {
+		u64 reserved_32_63 : 32;
+		u64 iv : 32;
+	} s;
+	struct cvmx_pko_reg_crc_ivx_s cn38xx;
+	struct cvmx_pko_reg_crc_ivx_s cn38xxp2;
+	struct cvmx_pko_reg_crc_ivx_s cn58xx;
+	struct cvmx_pko_reg_crc_ivx_s cn58xxp1;
+};
+
+typedef union cvmx_pko_reg_crc_ivx cvmx_pko_reg_crc_ivx_t;
+
+/**
+ * cvmx_pko_reg_debug0
+ *
+ * Notes:
+ * Note that this CSR is present only in chip revisions beginning with pass2.
+ *
+ */
+union cvmx_pko_reg_debug0 {
+	u64 u64;
+	struct cvmx_pko_reg_debug0_s {
+		u64 asserts : 64;
+	} s;
+	struct cvmx_pko_reg_debug0_cn30xx {
+		u64 reserved_17_63 : 47;
+		u64 asserts : 17;
+	} cn30xx;
+	struct cvmx_pko_reg_debug0_cn30xx cn31xx;
+	struct cvmx_pko_reg_debug0_cn30xx cn38xx;
+	struct cvmx_pko_reg_debug0_cn30xx cn38xxp2;
+	struct cvmx_pko_reg_debug0_s cn50xx;
+	struct cvmx_pko_reg_debug0_s cn52xx;
+	struct cvmx_pko_reg_debug0_s cn52xxp1;
+	struct cvmx_pko_reg_debug0_s cn56xx;
+	struct cvmx_pko_reg_debug0_s cn56xxp1;
+	struct cvmx_pko_reg_debug0_s cn58xx;
+	struct cvmx_pko_reg_debug0_s cn58xxp1;
+	struct cvmx_pko_reg_debug0_s cn61xx;
+	struct cvmx_pko_reg_debug0_s cn63xx;
+	struct cvmx_pko_reg_debug0_s cn63xxp1;
+	struct cvmx_pko_reg_debug0_s cn66xx;
+	struct cvmx_pko_reg_debug0_s cn68xx;
+	struct cvmx_pko_reg_debug0_s cn68xxp1;
+	struct cvmx_pko_reg_debug0_s cn70xx;
+	struct cvmx_pko_reg_debug0_s cn70xxp1;
+	struct cvmx_pko_reg_debug0_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_debug0 cvmx_pko_reg_debug0_t;
+
+/**
+ * cvmx_pko_reg_debug1
+ */
+union cvmx_pko_reg_debug1 {
+	u64 u64;
+	struct cvmx_pko_reg_debug1_s {
+		u64 asserts : 64;
+	} s;
+	struct cvmx_pko_reg_debug1_s cn50xx;
+	struct cvmx_pko_reg_debug1_s cn52xx;
+	struct cvmx_pko_reg_debug1_s cn52xxp1;
+	struct cvmx_pko_reg_debug1_s cn56xx;
+	struct cvmx_pko_reg_debug1_s cn56xxp1;
+	struct cvmx_pko_reg_debug1_s cn58xx;
+	struct cvmx_pko_reg_debug1_s cn58xxp1;
+	struct cvmx_pko_reg_debug1_s cn61xx;
+	struct cvmx_pko_reg_debug1_s cn63xx;
+	struct cvmx_pko_reg_debug1_s cn63xxp1;
+	struct cvmx_pko_reg_debug1_s cn66xx;
+	struct cvmx_pko_reg_debug1_s cn68xx;
+	struct cvmx_pko_reg_debug1_s cn68xxp1;
+	struct cvmx_pko_reg_debug1_s cn70xx;
+	struct cvmx_pko_reg_debug1_s cn70xxp1;
+	struct cvmx_pko_reg_debug1_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_debug1 cvmx_pko_reg_debug1_t;
+
+/**
+ * cvmx_pko_reg_debug2
+ */
+union cvmx_pko_reg_debug2 {
+	u64 u64;
+	struct cvmx_pko_reg_debug2_s {
+		u64 asserts : 64;
+	} s;
+	struct cvmx_pko_reg_debug2_s cn50xx;
+	struct cvmx_pko_reg_debug2_s cn52xx;
+	struct cvmx_pko_reg_debug2_s cn52xxp1;
+	struct cvmx_pko_reg_debug2_s cn56xx;
+	struct cvmx_pko_reg_debug2_s cn56xxp1;
+	struct cvmx_pko_reg_debug2_s cn58xx;
+	struct cvmx_pko_reg_debug2_s cn58xxp1;
+	struct cvmx_pko_reg_debug2_s cn61xx;
+	struct cvmx_pko_reg_debug2_s cn63xx;
+	struct cvmx_pko_reg_debug2_s cn63xxp1;
+	struct cvmx_pko_reg_debug2_s cn66xx;
+	struct cvmx_pko_reg_debug2_s cn68xx;
+	struct cvmx_pko_reg_debug2_s cn68xxp1;
+	struct cvmx_pko_reg_debug2_s cn70xx;
+	struct cvmx_pko_reg_debug2_s cn70xxp1;
+	struct cvmx_pko_reg_debug2_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_debug2 cvmx_pko_reg_debug2_t;
+
+/**
+ * cvmx_pko_reg_debug3
+ */
+union cvmx_pko_reg_debug3 {
+	u64 u64;
+	struct cvmx_pko_reg_debug3_s {
+		u64 asserts : 64;
+	} s;
+	struct cvmx_pko_reg_debug3_s cn50xx;
+	struct cvmx_pko_reg_debug3_s cn52xx;
+	struct cvmx_pko_reg_debug3_s cn52xxp1;
+	struct cvmx_pko_reg_debug3_s cn56xx;
+	struct cvmx_pko_reg_debug3_s cn56xxp1;
+	struct cvmx_pko_reg_debug3_s cn58xx;
+	struct cvmx_pko_reg_debug3_s cn58xxp1;
+	struct cvmx_pko_reg_debug3_s cn61xx;
+	struct cvmx_pko_reg_debug3_s cn63xx;
+	struct cvmx_pko_reg_debug3_s cn63xxp1;
+	struct cvmx_pko_reg_debug3_s cn66xx;
+	struct cvmx_pko_reg_debug3_s cn68xx;
+	struct cvmx_pko_reg_debug3_s cn68xxp1;
+	struct cvmx_pko_reg_debug3_s cn70xx;
+	struct cvmx_pko_reg_debug3_s cn70xxp1;
+	struct cvmx_pko_reg_debug3_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_debug3 cvmx_pko_reg_debug3_t;
+
+/**
+ * cvmx_pko_reg_debug4
+ */
+union cvmx_pko_reg_debug4 {
+	u64 u64;
+	struct cvmx_pko_reg_debug4_s {
+		u64 asserts : 64;
+	} s;
+	struct cvmx_pko_reg_debug4_s cn68xx;
+	struct cvmx_pko_reg_debug4_s cn68xxp1;
+};
+
+typedef union cvmx_pko_reg_debug4 cvmx_pko_reg_debug4_t;
+
+/**
+ * cvmx_pko_reg_engine_inflight
+ *
+ * Notes:
+ * Sets the maximum number of inflight packets, per engine.  Values greater than 4 are illegal.
+ * Setting an engine's value to 0 effectively stops the engine.
+ */
+union cvmx_pko_reg_engine_inflight {
+	u64 u64;
+	struct cvmx_pko_reg_engine_inflight_s {
+		u64 engine15 : 4;
+		u64 engine14 : 4;
+		u64 engine13 : 4;
+		u64 engine12 : 4;
+		u64 engine11 : 4;
+		u64 engine10 : 4;
+		u64 engine9 : 4;
+		u64 engine8 : 4;
+		u64 engine7 : 4;
+		u64 engine6 : 4;
+		u64 engine5 : 4;
+		u64 engine4 : 4;
+		u64 engine3 : 4;
+		u64 engine2 : 4;
+		u64 engine1 : 4;
+		u64 engine0 : 4;
+	} s;
+	struct cvmx_pko_reg_engine_inflight_cn52xx {
+		u64 reserved_40_63 : 24;
+		u64 engine9 : 4;
+		u64 engine8 : 4;
+		u64 engine7 : 4;
+		u64 engine6 : 4;
+		u64 engine5 : 4;
+		u64 engine4 : 4;
+		u64 engine3 : 4;
+		u64 engine2 : 4;
+		u64 engine1 : 4;
+		u64 engine0 : 4;
+	} cn52xx;
+	struct cvmx_pko_reg_engine_inflight_cn52xx cn52xxp1;
+	struct cvmx_pko_reg_engine_inflight_cn52xx cn56xx;
+	struct cvmx_pko_reg_engine_inflight_cn52xx cn56xxp1;
+	struct cvmx_pko_reg_engine_inflight_cn61xx {
+		u64 reserved_56_63 : 8;
+		u64 engine13 : 4;
+		u64 engine12 : 4;
+		u64 engine11 : 4;
+		u64 engine10 : 4;
+		u64 engine9 : 4;
+		u64 engine8 : 4;
+		u64 engine7 : 4;
+		u64 engine6 : 4;
+		u64 engine5 : 4;
+		u64 engine4 : 4;
+		u64 engine3 : 4;
+		u64 engine2 : 4;
+		u64 engine1 : 4;
+		u64 engine0 : 4;
+	} cn61xx;
+	struct cvmx_pko_reg_engine_inflight_cn63xx {
+		u64 reserved_48_63 : 16;
+		u64 engine11 : 4;
+		u64 engine10 : 4;
+		u64 engine9 : 4;
+		u64 engine8 : 4;
+		u64 engine7 : 4;
+		u64 engine6 : 4;
+		u64 engine5 : 4;
+		u64 engine4 : 4;
+		u64 engine3 : 4;
+		u64 engine2 : 4;
+		u64 engine1 : 4;
+		u64 engine0 : 4;
+	} cn63xx;
+	struct cvmx_pko_reg_engine_inflight_cn63xx cn63xxp1;
+	struct cvmx_pko_reg_engine_inflight_cn61xx cn66xx;
+	struct cvmx_pko_reg_engine_inflight_s cn68xx;
+	struct cvmx_pko_reg_engine_inflight_s cn68xxp1;
+	struct cvmx_pko_reg_engine_inflight_cn61xx cn70xx;
+	struct cvmx_pko_reg_engine_inflight_cn61xx cn70xxp1;
+	struct cvmx_pko_reg_engine_inflight_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pko_reg_engine_inflight cvmx_pko_reg_engine_inflight_t;
+
+/**
+ * cvmx_pko_reg_engine_inflight1
+ *
+ * Notes:
+ * Sets the maximum number of inflight packets, per engine.  Values greater than 8 are illegal.
+ * Setting an engine's value to 0 effectively stops the engine.
+ */
+union cvmx_pko_reg_engine_inflight1 {
+	u64 u64;
+	struct cvmx_pko_reg_engine_inflight1_s {
+		u64 reserved_16_63 : 48;
+		u64 engine19 : 4;
+		u64 engine18 : 4;
+		u64 engine17 : 4;
+		u64 engine16 : 4;
+	} s;
+	struct cvmx_pko_reg_engine_inflight1_s cn68xx;
+	struct cvmx_pko_reg_engine_inflight1_s cn68xxp1;
+};
+
+typedef union cvmx_pko_reg_engine_inflight1 cvmx_pko_reg_engine_inflight1_t;
+
+/**
+ * cvmx_pko_reg_engine_storage#
+ *
+ * Notes:
+ * The PKO has 40KB of local storage, consisting of 20, 2KB chunks.  Up to 15 contiguous chunks may be mapped per engine.
+ * The total of all mapped storage must not exceed 40KB.
+ */
+union cvmx_pko_reg_engine_storagex {
+	u64 u64;
+	struct cvmx_pko_reg_engine_storagex_s {
+		u64 engine15 : 4;
+		u64 engine14 : 4;
+		u64 engine13 : 4;
+		u64 engine12 : 4;
+		u64 engine11 : 4;
+		u64 engine10 : 4;
+		u64 engine9 : 4;
+		u64 engine8 : 4;
+		u64 engine7 : 4;
+		u64 engine6 : 4;
+		u64 engine5 : 4;
+		u64 engine4 : 4;
+		u64 engine3 : 4;
+		u64 engine2 : 4;
+		u64 engine1 : 4;
+		u64 engine0 : 4;
+	} s;
+	struct cvmx_pko_reg_engine_storagex_s cn68xx;
+	struct cvmx_pko_reg_engine_storagex_s cn68xxp1;
+};
+
+typedef union cvmx_pko_reg_engine_storagex cvmx_pko_reg_engine_storagex_t;
+
+/**
+ * cvmx_pko_reg_engine_thresh
+ *
+ * Notes:
+ * When not enabled, packet data may be sent as soon as it is written into PKO's internal buffers.
+ * When enabled and the packet fits entirely in the PKO's internal buffer, none of the packet data will
+ * be sent until all of it has been written into the PKO's internal buffer.  Note that a packet is
+ * considered to fit entirely only if the packet's size is <= BUFFER_SIZE-8.  When enabled and the
+ * packet does not fit entirely in the PKO's internal buffer, none of the packet data will be sent until
+ * at least BUFFER_SIZE-256 bytes of the packet have been written into the PKO's internal buffer
+ * (note that BUFFER_SIZE is a function of PKO_REG_GMX_PORT_MODE above)
+ */
+union cvmx_pko_reg_engine_thresh {
+	u64 u64;
+	struct cvmx_pko_reg_engine_thresh_s {
+		u64 reserved_20_63 : 44;
+		u64 mask : 20;
+	} s;
+	struct cvmx_pko_reg_engine_thresh_cn52xx {
+		u64 reserved_10_63 : 54;
+		u64 mask : 10;
+	} cn52xx;
+	struct cvmx_pko_reg_engine_thresh_cn52xx cn52xxp1;
+	struct cvmx_pko_reg_engine_thresh_cn52xx cn56xx;
+	struct cvmx_pko_reg_engine_thresh_cn52xx cn56xxp1;
+	struct cvmx_pko_reg_engine_thresh_cn61xx {
+		u64 reserved_14_63 : 50;
+		u64 mask : 14;
+	} cn61xx;
+	struct cvmx_pko_reg_engine_thresh_cn63xx {
+		u64 reserved_12_63 : 52;
+		u64 mask : 12;
+	} cn63xx;
+	struct cvmx_pko_reg_engine_thresh_cn63xx cn63xxp1;
+	struct cvmx_pko_reg_engine_thresh_cn61xx cn66xx;
+	struct cvmx_pko_reg_engine_thresh_s cn68xx;
+	struct cvmx_pko_reg_engine_thresh_s cn68xxp1;
+	struct cvmx_pko_reg_engine_thresh_cn61xx cn70xx;
+	struct cvmx_pko_reg_engine_thresh_cn61xx cn70xxp1;
+	struct cvmx_pko_reg_engine_thresh_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pko_reg_engine_thresh cvmx_pko_reg_engine_thresh_t;
+
+/**
+ * cvmx_pko_reg_error
+ *
+ * Notes:
+ * Note that this CSR is present only in chip revisions beginning with pass2.
+ *
+ */
+union cvmx_pko_reg_error {
+	u64 u64;
+	struct cvmx_pko_reg_error_s {
+		u64 reserved_4_63 : 60;
+		u64 loopback : 1;
+		u64 currzero : 1;
+		u64 doorbell : 1;
+		u64 parity : 1;
+	} s;
+	struct cvmx_pko_reg_error_cn30xx {
+		u64 reserved_2_63 : 62;
+		u64 doorbell : 1;
+		u64 parity : 1;
+	} cn30xx;
+	struct cvmx_pko_reg_error_cn30xx cn31xx;
+	struct cvmx_pko_reg_error_cn30xx cn38xx;
+	struct cvmx_pko_reg_error_cn30xx cn38xxp2;
+	struct cvmx_pko_reg_error_cn50xx {
+		u64 reserved_3_63 : 61;
+		u64 currzero : 1;
+		u64 doorbell : 1;
+		u64 parity : 1;
+	} cn50xx;
+	struct cvmx_pko_reg_error_cn50xx cn52xx;
+	struct cvmx_pko_reg_error_cn50xx cn52xxp1;
+	struct cvmx_pko_reg_error_cn50xx cn56xx;
+	struct cvmx_pko_reg_error_cn50xx cn56xxp1;
+	struct cvmx_pko_reg_error_cn50xx cn58xx;
+	struct cvmx_pko_reg_error_cn50xx cn58xxp1;
+	struct cvmx_pko_reg_error_cn50xx cn61xx;
+	struct cvmx_pko_reg_error_cn50xx cn63xx;
+	struct cvmx_pko_reg_error_cn50xx cn63xxp1;
+	struct cvmx_pko_reg_error_cn50xx cn66xx;
+	struct cvmx_pko_reg_error_s cn68xx;
+	struct cvmx_pko_reg_error_s cn68xxp1;
+	struct cvmx_pko_reg_error_cn50xx cn70xx;
+	struct cvmx_pko_reg_error_cn50xx cn70xxp1;
+	struct cvmx_pko_reg_error_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pko_reg_error cvmx_pko_reg_error_t;
+
+/**
+ * cvmx_pko_reg_flags
+ *
+ * Notes:
+ * When set, ENA_PKO enables the PKO picker and places the PKO in normal operation.  When set, ENA_DWB
+ * enables the use of DontWriteBacks during the buffer freeing operations.  When not set, STORE_BE inverts
+ * bits[2:0] of the STORE0 byte write address.  When set, RESET causes a 4-cycle reset pulse to the
+ * entire box.
+ */
+union cvmx_pko_reg_flags {
+	u64 u64;
+	struct cvmx_pko_reg_flags_s {
+		u64 reserved_9_63 : 55;
+		u64 dis_perf3 : 1;
+		u64 dis_perf2 : 1;
+		u64 dis_perf1 : 1;
+		u64 dis_perf0 : 1;
+		u64 ena_throttle : 1;
+		u64 reset : 1;
+		u64 store_be : 1;
+		u64 ena_dwb : 1;
+		u64 ena_pko : 1;
+	} s;
+	struct cvmx_pko_reg_flags_cn30xx {
+		u64 reserved_4_63 : 60;
+		u64 reset : 1;
+		u64 store_be : 1;
+		u64 ena_dwb : 1;
+		u64 ena_pko : 1;
+	} cn30xx;
+	struct cvmx_pko_reg_flags_cn30xx cn31xx;
+	struct cvmx_pko_reg_flags_cn30xx cn38xx;
+	struct cvmx_pko_reg_flags_cn30xx cn38xxp2;
+	struct cvmx_pko_reg_flags_cn30xx cn50xx;
+	struct cvmx_pko_reg_flags_cn30xx cn52xx;
+	struct cvmx_pko_reg_flags_cn30xx cn52xxp1;
+	struct cvmx_pko_reg_flags_cn30xx cn56xx;
+	struct cvmx_pko_reg_flags_cn30xx cn56xxp1;
+	struct cvmx_pko_reg_flags_cn30xx cn58xx;
+	struct cvmx_pko_reg_flags_cn30xx cn58xxp1;
+	struct cvmx_pko_reg_flags_cn61xx {
+		u64 reserved_9_63 : 55;
+		u64 dis_perf3 : 1;
+		u64 dis_perf2 : 1;
+		u64 reserved_4_6 : 3;
+		u64 reset : 1;
+		u64 store_be : 1;
+		u64 ena_dwb : 1;
+		u64 ena_pko : 1;
+	} cn61xx;
+	struct cvmx_pko_reg_flags_cn30xx cn63xx;
+	struct cvmx_pko_reg_flags_cn30xx cn63xxp1;
+	struct cvmx_pko_reg_flags_cn61xx cn66xx;
+	struct cvmx_pko_reg_flags_s cn68xx;
+	struct cvmx_pko_reg_flags_cn68xxp1 {
+		u64 reserved_7_63 : 57;
+		u64 dis_perf1 : 1;
+		u64 dis_perf0 : 1;
+		u64 ena_throttle : 1;
+		u64 reset : 1;
+		u64 store_be : 1;
+		u64 ena_dwb : 1;
+		u64 ena_pko : 1;
+	} cn68xxp1;
+	struct cvmx_pko_reg_flags_cn61xx cn70xx;
+	struct cvmx_pko_reg_flags_cn61xx cn70xxp1;
+	struct cvmx_pko_reg_flags_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pko_reg_flags cvmx_pko_reg_flags_t;
+
+/**
+ * cvmx_pko_reg_gmx_port_mode
+ *
+ * Notes:
+ * The system has a total of 2 + 4 + 4 ports and 2 + 1 + 1 engines (GM0 + PCI + LOOP).
+ * This CSR sets the number of GMX0 ports and amount of local storage per engine.
+ * It has no effect on the number of ports or amount of local storage per engine for PCI and LOOP.
+ * When both GMX ports are used (MODE0=3), each GMX engine has 10kB of local
+ * storage.  Increasing MODE0 to 4 decreases the number of GMX ports to 1 and
+ * increases the local storage for the one remaining PKO GMX engine to 20kB.
+ * MODE0 value 0, 1, and 2, or greater than 4 are illegal.
+ *
+ * MODE0   GMX0  PCI   LOOP  GMX0                       PCI            LOOP
+ *         ports ports ports storage/engine             storage/engine storage/engine
+ * 3       2     4     4      10.0kB                    2.5kB          2.5kB
+ * 4       1     4     4      20.0kB                    2.5kB          2.5kB
+ */
+union cvmx_pko_reg_gmx_port_mode {
+	u64 u64;
+	struct cvmx_pko_reg_gmx_port_mode_s {
+		u64 reserved_6_63 : 58;
+		u64 mode1 : 3;
+		u64 mode0 : 3;
+	} s;
+	struct cvmx_pko_reg_gmx_port_mode_s cn30xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn31xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn38xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn38xxp2;
+	struct cvmx_pko_reg_gmx_port_mode_s cn50xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn52xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn52xxp1;
+	struct cvmx_pko_reg_gmx_port_mode_s cn56xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn56xxp1;
+	struct cvmx_pko_reg_gmx_port_mode_s cn58xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn58xxp1;
+	struct cvmx_pko_reg_gmx_port_mode_s cn61xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn63xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn63xxp1;
+	struct cvmx_pko_reg_gmx_port_mode_s cn66xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn70xx;
+	struct cvmx_pko_reg_gmx_port_mode_s cn70xxp1;
+	struct cvmx_pko_reg_gmx_port_mode_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_gmx_port_mode cvmx_pko_reg_gmx_port_mode_t;
+
+/**
+ * cvmx_pko_reg_int_mask
+ *
+ * Notes:
+ * When a mask bit is set, the corresponding interrupt is enabled.
+ *
+ */
+union cvmx_pko_reg_int_mask {
+	u64 u64;
+	struct cvmx_pko_reg_int_mask_s {
+		u64 reserved_4_63 : 60;
+		u64 loopback : 1;
+		u64 currzero : 1;
+		u64 doorbell : 1;
+		u64 parity : 1;
+	} s;
+	struct cvmx_pko_reg_int_mask_cn30xx {
+		u64 reserved_2_63 : 62;
+		u64 doorbell : 1;
+		u64 parity : 1;
+	} cn30xx;
+	struct cvmx_pko_reg_int_mask_cn30xx cn31xx;
+	struct cvmx_pko_reg_int_mask_cn30xx cn38xx;
+	struct cvmx_pko_reg_int_mask_cn30xx cn38xxp2;
+	struct cvmx_pko_reg_int_mask_cn50xx {
+		u64 reserved_3_63 : 61;
+		u64 currzero : 1;
+		u64 doorbell : 1;
+		u64 parity : 1;
+	} cn50xx;
+	struct cvmx_pko_reg_int_mask_cn50xx cn52xx;
+	struct cvmx_pko_reg_int_mask_cn50xx cn52xxp1;
+	struct cvmx_pko_reg_int_mask_cn50xx cn56xx;
+	struct cvmx_pko_reg_int_mask_cn50xx cn56xxp1;
+	struct cvmx_pko_reg_int_mask_cn50xx cn58xx;
+	struct cvmx_pko_reg_int_mask_cn50xx cn58xxp1;
+	struct cvmx_pko_reg_int_mask_cn50xx cn61xx;
+	struct cvmx_pko_reg_int_mask_cn50xx cn63xx;
+	struct cvmx_pko_reg_int_mask_cn50xx cn63xxp1;
+	struct cvmx_pko_reg_int_mask_cn50xx cn66xx;
+	struct cvmx_pko_reg_int_mask_s cn68xx;
+	struct cvmx_pko_reg_int_mask_s cn68xxp1;
+	struct cvmx_pko_reg_int_mask_cn50xx cn70xx;
+	struct cvmx_pko_reg_int_mask_cn50xx cn70xxp1;
+	struct cvmx_pko_reg_int_mask_cn50xx cnf71xx;
+};
+
+typedef union cvmx_pko_reg_int_mask cvmx_pko_reg_int_mask_t;
+
+/**
+ * cvmx_pko_reg_loopback_bpid
+ *
+ * Notes:
+ * None.
+ *
+ */
+union cvmx_pko_reg_loopback_bpid {
+	u64 u64;
+	struct cvmx_pko_reg_loopback_bpid_s {
+		u64 reserved_59_63 : 5;
+		u64 bpid7 : 6;
+		u64 reserved_52_52 : 1;
+		u64 bpid6 : 6;
+		u64 reserved_45_45 : 1;
+		u64 bpid5 : 6;
+		u64 reserved_38_38 : 1;
+		u64 bpid4 : 6;
+		u64 reserved_31_31 : 1;
+		u64 bpid3 : 6;
+		u64 reserved_24_24 : 1;
+		u64 bpid2 : 6;
+		u64 reserved_17_17 : 1;
+		u64 bpid1 : 6;
+		u64 reserved_10_10 : 1;
+		u64 bpid0 : 6;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_pko_reg_loopback_bpid_s cn68xx;
+	struct cvmx_pko_reg_loopback_bpid_s cn68xxp1;
+};
+
+typedef union cvmx_pko_reg_loopback_bpid cvmx_pko_reg_loopback_bpid_t;
+
+/**
+ * cvmx_pko_reg_loopback_pkind
+ *
+ * Notes:
+ * None.
+ *
+ */
+union cvmx_pko_reg_loopback_pkind {
+	u64 u64;
+	struct cvmx_pko_reg_loopback_pkind_s {
+		u64 reserved_59_63 : 5;
+		u64 pkind7 : 6;
+		u64 reserved_52_52 : 1;
+		u64 pkind6 : 6;
+		u64 reserved_45_45 : 1;
+		u64 pkind5 : 6;
+		u64 reserved_38_38 : 1;
+		u64 pkind4 : 6;
+		u64 reserved_31_31 : 1;
+		u64 pkind3 : 6;
+		u64 reserved_24_24 : 1;
+		u64 pkind2 : 6;
+		u64 reserved_17_17 : 1;
+		u64 pkind1 : 6;
+		u64 reserved_10_10 : 1;
+		u64 pkind0 : 6;
+		u64 num_ports : 4;
+	} s;
+	struct cvmx_pko_reg_loopback_pkind_s cn68xx;
+	struct cvmx_pko_reg_loopback_pkind_s cn68xxp1;
+};
+
+typedef union cvmx_pko_reg_loopback_pkind cvmx_pko_reg_loopback_pkind_t;
+
+/**
+ * cvmx_pko_reg_min_pkt
+ *
+ * Notes:
+ * This CSR is used with PKO_MEM_IPORT_PTRS[MIN_PKT] to select the minimum packet size.  Packets whose
+ * size in bytes < (SIZEn+1) are zero-padded to (SIZEn+1) bytes.  Note that this does not include CRC bytes.
+ * SIZE0=0 is read-only and is used when no padding is desired.
+ */
+union cvmx_pko_reg_min_pkt {
+	u64 u64;
+	struct cvmx_pko_reg_min_pkt_s {
+		u64 size7 : 8;
+		u64 size6 : 8;
+		u64 size5 : 8;
+		u64 size4 : 8;
+		u64 size3 : 8;
+		u64 size2 : 8;
+		u64 size1 : 8;
+		u64 size0 : 8;
+	} s;
+	struct cvmx_pko_reg_min_pkt_s cn68xx;
+	struct cvmx_pko_reg_min_pkt_s cn68xxp1;
+};
+
+typedef union cvmx_pko_reg_min_pkt cvmx_pko_reg_min_pkt_t;
+
+/**
+ * cvmx_pko_reg_preempt
+ */
+union cvmx_pko_reg_preempt {
+	u64 u64;
+	struct cvmx_pko_reg_preempt_s {
+		u64 reserved_16_63 : 48;
+		u64 min_size : 16;
+	} s;
+	struct cvmx_pko_reg_preempt_s cn52xx;
+	struct cvmx_pko_reg_preempt_s cn52xxp1;
+	struct cvmx_pko_reg_preempt_s cn56xx;
+	struct cvmx_pko_reg_preempt_s cn56xxp1;
+	struct cvmx_pko_reg_preempt_s cn61xx;
+	struct cvmx_pko_reg_preempt_s cn63xx;
+	struct cvmx_pko_reg_preempt_s cn63xxp1;
+	struct cvmx_pko_reg_preempt_s cn66xx;
+	struct cvmx_pko_reg_preempt_s cn68xx;
+	struct cvmx_pko_reg_preempt_s cn68xxp1;
+	struct cvmx_pko_reg_preempt_s cn70xx;
+	struct cvmx_pko_reg_preempt_s cn70xxp1;
+	struct cvmx_pko_reg_preempt_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_preempt cvmx_pko_reg_preempt_t;
+
+/**
+ * cvmx_pko_reg_queue_mode
+ *
+ * Notes:
+ * Sets the number of queues and amount of local storage per queue
+ * The system has a total of 256 queues and (256*8) words of local command storage.  This CSR sets the
+ * number of queues that are used.  Increasing the value of MODE by 1 decreases the number of queues
+ * by a power of 2 and increases the local storage per queue by a power of 2.
+ * MODEn queues storage/queue
+ * 0     256     64B ( 8 words)
+ * 1     128    128B (16 words)
+ * 2      64    256B (32 words)
+ */
+union cvmx_pko_reg_queue_mode {
+	u64 u64;
+	struct cvmx_pko_reg_queue_mode_s {
+		u64 reserved_2_63 : 62;
+		u64 mode : 2;
+	} s;
+	struct cvmx_pko_reg_queue_mode_s cn30xx;
+	struct cvmx_pko_reg_queue_mode_s cn31xx;
+	struct cvmx_pko_reg_queue_mode_s cn38xx;
+	struct cvmx_pko_reg_queue_mode_s cn38xxp2;
+	struct cvmx_pko_reg_queue_mode_s cn50xx;
+	struct cvmx_pko_reg_queue_mode_s cn52xx;
+	struct cvmx_pko_reg_queue_mode_s cn52xxp1;
+	struct cvmx_pko_reg_queue_mode_s cn56xx;
+	struct cvmx_pko_reg_queue_mode_s cn56xxp1;
+	struct cvmx_pko_reg_queue_mode_s cn58xx;
+	struct cvmx_pko_reg_queue_mode_s cn58xxp1;
+	struct cvmx_pko_reg_queue_mode_s cn61xx;
+	struct cvmx_pko_reg_queue_mode_s cn63xx;
+	struct cvmx_pko_reg_queue_mode_s cn63xxp1;
+	struct cvmx_pko_reg_queue_mode_s cn66xx;
+	struct cvmx_pko_reg_queue_mode_s cn68xx;
+	struct cvmx_pko_reg_queue_mode_s cn68xxp1;
+	struct cvmx_pko_reg_queue_mode_s cn70xx;
+	struct cvmx_pko_reg_queue_mode_s cn70xxp1;
+	struct cvmx_pko_reg_queue_mode_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_queue_mode cvmx_pko_reg_queue_mode_t;
+
+/**
+ * cvmx_pko_reg_queue_preempt
+ *
+ * Notes:
+ * Per QID, setting both PREEMPTER=1 and PREEMPTEE=1 is illegal and sets only PREEMPTER=1.
+ * This CSR is used with PKO_MEM_QUEUE_PTRS and PKO_REG_QUEUE_PTRS1.  When programming queues, the
+ * programming sequence must first write PKO_REG_QUEUE_PREEMPT, then PKO_REG_QUEUE_PTRS1 and then
+ * PKO_MEM_QUEUE_PTRS for each queue.  Preemption is supported only on queues that are ultimately
+ * mapped to engines 0-7.  It is illegal to set preemptee or preempter for a queue that is ultimately
+ * mapped to engines 8-11.
+ *
+ * Also, PKO_REG_ENGINE_INFLIGHT must be at least 2 for any engine on which preemption is enabled.
+ *
+ * See the descriptions of PKO_MEM_QUEUE_PTRS for further explanation of queue programming.
+ */
+union cvmx_pko_reg_queue_preempt {
+	u64 u64;
+	struct cvmx_pko_reg_queue_preempt_s {
+		u64 reserved_2_63 : 62;
+		u64 preemptee : 1;
+		u64 preempter : 1;
+	} s;
+	struct cvmx_pko_reg_queue_preempt_s cn52xx;
+	struct cvmx_pko_reg_queue_preempt_s cn52xxp1;
+	struct cvmx_pko_reg_queue_preempt_s cn56xx;
+	struct cvmx_pko_reg_queue_preempt_s cn56xxp1;
+	struct cvmx_pko_reg_queue_preempt_s cn61xx;
+	struct cvmx_pko_reg_queue_preempt_s cn63xx;
+	struct cvmx_pko_reg_queue_preempt_s cn63xxp1;
+	struct cvmx_pko_reg_queue_preempt_s cn66xx;
+	struct cvmx_pko_reg_queue_preempt_s cn68xx;
+	struct cvmx_pko_reg_queue_preempt_s cn68xxp1;
+	struct cvmx_pko_reg_queue_preempt_s cn70xx;
+	struct cvmx_pko_reg_queue_preempt_s cn70xxp1;
+	struct cvmx_pko_reg_queue_preempt_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_queue_preempt cvmx_pko_reg_queue_preempt_t;
+
+/**
+ * cvmx_pko_reg_queue_ptrs1
+ *
+ * Notes:
+ * This CSR is used with PKO_MEM_QUEUE_PTRS and PKO_MEM_QUEUE_QOS to allow access to queues 128-255
+ * and to allow up mapping of up to 16 queues per port.  When programming queues 128-255, the
+ * programming sequence must first write PKO_REG_QUEUE_PTRS1 and then write PKO_MEM_QUEUE_PTRS or
+ * PKO_MEM_QUEUE_QOS for each queue.
+ * See the descriptions of PKO_MEM_QUEUE_PTRS and PKO_MEM_QUEUE_QOS for further explanation of queue
+ * programming.
+ */
+union cvmx_pko_reg_queue_ptrs1 {
+	u64 u64;
+	struct cvmx_pko_reg_queue_ptrs1_s {
+		u64 reserved_2_63 : 62;
+		u64 idx3 : 1;
+		u64 qid7 : 1;
+	} s;
+	struct cvmx_pko_reg_queue_ptrs1_s cn50xx;
+	struct cvmx_pko_reg_queue_ptrs1_s cn52xx;
+	struct cvmx_pko_reg_queue_ptrs1_s cn52xxp1;
+	struct cvmx_pko_reg_queue_ptrs1_s cn56xx;
+	struct cvmx_pko_reg_queue_ptrs1_s cn56xxp1;
+	struct cvmx_pko_reg_queue_ptrs1_s cn58xx;
+	struct cvmx_pko_reg_queue_ptrs1_s cn58xxp1;
+	struct cvmx_pko_reg_queue_ptrs1_s cn61xx;
+	struct cvmx_pko_reg_queue_ptrs1_s cn63xx;
+	struct cvmx_pko_reg_queue_ptrs1_s cn63xxp1;
+	struct cvmx_pko_reg_queue_ptrs1_s cn66xx;
+	struct cvmx_pko_reg_queue_ptrs1_s cn70xx;
+	struct cvmx_pko_reg_queue_ptrs1_s cn70xxp1;
+	struct cvmx_pko_reg_queue_ptrs1_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_queue_ptrs1 cvmx_pko_reg_queue_ptrs1_t;
+
+/**
+ * cvmx_pko_reg_read_idx
+ *
+ * Notes:
+ * Provides the read index during a CSR read operation to any of the CSRs that are physically stored
+ * as memories.  The names of these CSRs begin with the prefix "PKO_MEM_".
+ * IDX[7:0] is the read index.  INC[7:0] is an increment that is added to IDX[7:0] after any CSR read.
+ * The intended use is to initially write this CSR such that IDX=0 and INC=1.  Then, the entire
+ * contents of a CSR memory can be read with consecutive CSR read commands.
+ */
+union cvmx_pko_reg_read_idx {
+	u64 u64;
+	struct cvmx_pko_reg_read_idx_s {
+		u64 reserved_16_63 : 48;
+		u64 inc : 8;
+		u64 index : 8;
+	} s;
+	struct cvmx_pko_reg_read_idx_s cn30xx;
+	struct cvmx_pko_reg_read_idx_s cn31xx;
+	struct cvmx_pko_reg_read_idx_s cn38xx;
+	struct cvmx_pko_reg_read_idx_s cn38xxp2;
+	struct cvmx_pko_reg_read_idx_s cn50xx;
+	struct cvmx_pko_reg_read_idx_s cn52xx;
+	struct cvmx_pko_reg_read_idx_s cn52xxp1;
+	struct cvmx_pko_reg_read_idx_s cn56xx;
+	struct cvmx_pko_reg_read_idx_s cn56xxp1;
+	struct cvmx_pko_reg_read_idx_s cn58xx;
+	struct cvmx_pko_reg_read_idx_s cn58xxp1;
+	struct cvmx_pko_reg_read_idx_s cn61xx;
+	struct cvmx_pko_reg_read_idx_s cn63xx;
+	struct cvmx_pko_reg_read_idx_s cn63xxp1;
+	struct cvmx_pko_reg_read_idx_s cn66xx;
+	struct cvmx_pko_reg_read_idx_s cn68xx;
+	struct cvmx_pko_reg_read_idx_s cn68xxp1;
+	struct cvmx_pko_reg_read_idx_s cn70xx;
+	struct cvmx_pko_reg_read_idx_s cn70xxp1;
+	struct cvmx_pko_reg_read_idx_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_read_idx cvmx_pko_reg_read_idx_t;
+
+/**
+ * cvmx_pko_reg_throttle
+ *
+ * Notes:
+ * This CSR is used with PKO_MEM_THROTTLE_PIPE and PKO_MEM_THROTTLE_INT.  INT_MASK corresponds to the
+ * interfaces listed in the description for PKO_MEM_IPORT_PTRS[INT].  Set INT_MASK[N] to enable the
+ * updating of PKO_MEM_THROTTLE_PIPE and PKO_MEM_THROTTLE_INT counts for packets destined for
+ * interface N.  INT_MASK has no effect on the updates caused by CSR writes to PKO_MEM_THROTTLE_PIPE
+ * and PKO_MEM_THROTTLE_INT.  Note that this does not disable the throttle logic, just the updating of
+ * the interface counts.
+ */
+union cvmx_pko_reg_throttle {
+	u64 u64;
+	struct cvmx_pko_reg_throttle_s {
+		u64 reserved_32_63 : 32;
+		u64 int_mask : 32;
+	} s;
+	struct cvmx_pko_reg_throttle_s cn68xx;
+	struct cvmx_pko_reg_throttle_s cn68xxp1;
+};
+
+typedef union cvmx_pko_reg_throttle cvmx_pko_reg_throttle_t;
+
+/**
+ * cvmx_pko_reg_timestamp
+ *
+ * Notes:
+ * None.
+ *
+ */
+union cvmx_pko_reg_timestamp {
+	u64 u64;
+	struct cvmx_pko_reg_timestamp_s {
+		u64 reserved_4_63 : 60;
+		u64 wqe_word : 4;
+	} s;
+	struct cvmx_pko_reg_timestamp_s cn61xx;
+	struct cvmx_pko_reg_timestamp_s cn63xx;
+	struct cvmx_pko_reg_timestamp_s cn63xxp1;
+	struct cvmx_pko_reg_timestamp_s cn66xx;
+	struct cvmx_pko_reg_timestamp_s cn68xx;
+	struct cvmx_pko_reg_timestamp_s cn68xxp1;
+	struct cvmx_pko_reg_timestamp_s cn70xx;
+	struct cvmx_pko_reg_timestamp_s cn70xxp1;
+	struct cvmx_pko_reg_timestamp_s cnf71xx;
+};
+
+typedef union cvmx_pko_reg_timestamp cvmx_pko_reg_timestamp_t;
+
+/**
+ * cvmx_pko_shaper_cfg
+ */
+union cvmx_pko_shaper_cfg {
+	u64 u64;
+	struct cvmx_pko_shaper_cfg_s {
+		u64 reserved_2_63 : 62;
+		u64 color_aware : 1;
+		u64 red_send_as_yellow : 1;
+	} s;
+	struct cvmx_pko_shaper_cfg_s cn73xx;
+	struct cvmx_pko_shaper_cfg_s cn78xx;
+	struct cvmx_pko_shaper_cfg_s cn78xxp1;
+	struct cvmx_pko_shaper_cfg_s cnf75xx;
+};
+
+typedef union cvmx_pko_shaper_cfg cvmx_pko_shaper_cfg_t;
+
+/**
+ * cvmx_pko_state_uid_in_use#_rd
+ *
+ * For diagnostic use only.
+ *
+ */
+union cvmx_pko_state_uid_in_usex_rd {
+	u64 u64;
+	struct cvmx_pko_state_uid_in_usex_rd_s {
+		u64 in_use : 64;
+	} s;
+	struct cvmx_pko_state_uid_in_usex_rd_s cn73xx;
+	struct cvmx_pko_state_uid_in_usex_rd_s cn78xx;
+	struct cvmx_pko_state_uid_in_usex_rd_s cn78xxp1;
+	struct cvmx_pko_state_uid_in_usex_rd_s cnf75xx;
+};
+
+typedef union cvmx_pko_state_uid_in_usex_rd cvmx_pko_state_uid_in_usex_rd_t;
+
+/**
+ * cvmx_pko_status
+ */
+union cvmx_pko_status {
+	u64 u64;
+	struct cvmx_pko_status_s {
+		u64 pko_rdy : 1;
+		u64 reserved_24_62 : 39;
+		u64 c2qlut_rdy : 1;
+		u64 ppfi_rdy : 1;
+		u64 iobp1_rdy : 1;
+		u64 ncb_rdy : 1;
+		u64 pse_rdy : 1;
+		u64 pdm_rdy : 1;
+		u64 peb_rdy : 1;
+		u64 csi_rdy : 1;
+		u64 reserved_5_15 : 11;
+		u64 ncb_bist_status : 1;
+		u64 c2qlut_bist_status : 1;
+		u64 pdm_bist_status : 1;
+		u64 peb_bist_status : 1;
+		u64 pse_bist_status : 1;
+	} s;
+	struct cvmx_pko_status_cn73xx {
+		u64 pko_rdy : 1;
+		u64 reserved_62_24 : 39;
+		u64 c2qlut_rdy : 1;
+		u64 ppfi_rdy : 1;
+		u64 iobp1_rdy : 1;
+		u64 ncb_rdy : 1;
+		u64 pse_rdy : 1;
+		u64 pdm_rdy : 1;
+		u64 peb_rdy : 1;
+		u64 csi_rdy : 1;
+		u64 reserved_15_5 : 11;
+		u64 ncb_bist_status : 1;
+		u64 c2qlut_bist_status : 1;
+		u64 pdm_bist_status : 1;
+		u64 peb_bist_status : 1;
+		u64 pse_bist_status : 1;
+	} cn73xx;
+	struct cvmx_pko_status_cn73xx cn78xx;
+	struct cvmx_pko_status_cn73xx cn78xxp1;
+	struct cvmx_pko_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_pko_status cvmx_pko_status_t;
+
+/**
+ * cvmx_pko_txf#_pkt_cnt_rd
+ */
+union cvmx_pko_txfx_pkt_cnt_rd {
+	u64 u64;
+	struct cvmx_pko_txfx_pkt_cnt_rd_s {
+		u64 reserved_8_63 : 56;
+		u64 cnt : 8;
+	} s;
+	struct cvmx_pko_txfx_pkt_cnt_rd_s cn73xx;
+	struct cvmx_pko_txfx_pkt_cnt_rd_s cn78xx;
+	struct cvmx_pko_txfx_pkt_cnt_rd_s cn78xxp1;
+	struct cvmx_pko_txfx_pkt_cnt_rd_s cnf75xx;
+};
+
+typedef union cvmx_pko_txfx_pkt_cnt_rd cvmx_pko_txfx_pkt_cnt_rd_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pko-internal-ports-range.h b/arch/mips/mach-octeon/include/mach/cvmx-pko-internal-ports-range.h
new file mode 100644
index 0000000..1fb49b3
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pko-internal-ports-range.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_INTERNAL_PORTS_RANGE__
+#define __CVMX_INTERNAL_PORTS_RANGE__
+
+/*
+ * Allocated a block of internal ports for the specified interface/port
+ *
+ * @param  interface  the interface for which the internal ports are requested
+ * @param  port       the index of the port within in the interface for which the internal ports
+ *                    are requested.
+ * @param  count      the number of internal ports requested
+ *
+ * @return  0 on success
+ *         -1 on failure
+ */
+int cvmx_pko_internal_ports_alloc(int interface, int port, u64 count);
+
+/*
+ * Free the internal ports associated with the specified interface/port
+ *
+ * @param  interface  the interface for which the internal ports are requested
+ * @param  port       the index of the port within in the interface for which the internal ports
+ *                    are requested.
+ *
+ * @return  0 on success
+ *         -1 on failure
+ */
+int cvmx_pko_internal_ports_free(int interface, int port);
+
+/*
+ * Frees up all the allocated internal ports.
+ */
+void cvmx_pko_internal_ports_range_free_all(void);
+
+void cvmx_pko_internal_ports_range_show(void);
+
+int __cvmx_pko_internal_ports_range_init(void);
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pko3-queue.h b/arch/mips/mach-octeon/include/mach/cvmx-pko3-queue.h
new file mode 100644
index 0000000..5f83989
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pko3-queue.h
@@ -0,0 +1,175 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_PKO3_QUEUE_H__
+#define __CVMX_PKO3_QUEUE_H__
+
+/**
+ * @INTERNAL
+ *
+ * Find or allocate global port/dq map table
+ * which is a named table, contains entries for
+ * all possible OCI nodes.
+ *
+ * The table global pointer is stored in core-local variable
+ * so that every core will call this function once, on first use.
+ */
+int __cvmx_pko3_dq_table_setup(void);
+
+/*
+ * Get the base Descriptor Queue number for an IPD port on the local node
+ */
+int cvmx_pko3_get_queue_base(int ipd_port);
+
+/*
+ * Get the number of Descriptor Queues assigned for an IPD port
+ */
+int cvmx_pko3_get_queue_num(int ipd_port);
+
+/**
+ * Get L1/Port Queue number assigned to interface port.
+ *
+ * @param xiface is interface number.
+ * @param index is port index.
+ */
+int cvmx_pko3_get_port_queue(int xiface, int index);
+
+/*
+ * Configure L3 through L5 Scheduler Queues and Descriptor Queues
+ *
+ * The Scheduler Queues in Levels 3 to 5 and Descriptor Queues are
+ * configured one-to-one or many-to-one to a single parent Scheduler
+ * Queues. The level of the parent SQ is specified in an argument,
+ * as well as the number of children to attach to the specific parent.
+ * The children can have fair round-robin or priority-based scheduling
+ * when multiple children are assigned a single parent.
+ *
+ * @param node is the OCI node location for the queues to be configured
+ * @param parent_level is the level of the parent queue, 2 to 5.
+ * @param parent_queue is the number of the parent Scheduler Queue
+ * @param child_base is the number of the first child SQ or DQ to assign to
+ * @param parent
+ * @param child_count is the number of consecutive children to assign
+ * @param stat_prio_count is the priority setting for the children L2 SQs
+ *
+ * If <stat_prio_count> is -1, the Ln children will have equal Round-Robin
+ * relationship with eachother. If <stat_prio_count> is 0, all Ln children
+ * will be arranged in Weighted-Round-Robin, with the first having the most
+ * precedence. If <stat_prio_count> is between 1 and 8, it indicates how
+ * many children will have static priority settings (with the first having
+ * the most precedence), with the remaining Ln children having WRR scheduling.
+ *
+ * @returns 0 on success, -1 on failure.
+ *
+ * Note: this function supports the configuration of node-local unit.
+ */
+int cvmx_pko3_sq_config_children(unsigned int node, unsigned int parent_level,
+				 unsigned int parent_queue, unsigned int child_base,
+				 unsigned int child_count, int stat_prio_count);
+
+/*
+ * @INTERNAL
+ * Register a range of Descriptor Queues wth an interface port
+ *
+ * This function poulates the DQ-to-IPD translation table
+ * used by the application to retrieve the DQ range (typically ordered
+ * by priority) for a given IPD-port, which is either a physical port,
+ * or a channel on a channelized interface (i.e. ILK).
+ *
+ * @param xiface is the physical interface number
+ * @param index is either a physical port on an interface
+ * @param or a channel of an ILK interface
+ * @param dq_base is the first Descriptor Queue number in a consecutive range
+ * @param dq_count is the number of consecutive Descriptor Queues leading
+ * @param the same channel or port.
+ *
+ * Only a consecurive range of Descriptor Queues can be associated with any
+ * given channel/port, and usually they are ordered from most to least
+ * in terms of scheduling priority.
+ *
+ * Note: thus function only populates the node-local translation table.
+ *
+ * @returns 0 on success, -1 on failure.
+ */
+int __cvmx_pko3_ipd_dq_register(int xiface, int index, unsigned int dq_base, unsigned int dq_count);
+
+/**
+ * @INTERNAL
+ *
+ * Unregister DQs associated with CHAN_E (IPD port)
+ */
+int __cvmx_pko3_ipd_dq_unregister(int xiface, int index);
+
+/*
+ * Map channel number in PKO
+ *
+ * @param node is to specify the node to which this configuration is applied.
+ * @param pq_num specifies the Port Queue (i.e. L1) queue number.
+ * @param l2_l3_q_num  specifies L2/L3 queue number.
+ * @param channel specifies the channel number to map to the queue.
+ *
+ * The channel assignment applies to L2 or L3 Shaper Queues depending
+ * on the setting of channel credit level.
+ *
+ * @return returns none.
+ */
+void cvmx_pko3_map_channel(unsigned int node, unsigned int pq_num, unsigned int l2_l3_q_num,
+			   u16 channel);
+
+int cvmx_pko3_pq_config(unsigned int node, unsigned int mac_num, unsigned int pq_num);
+
+int cvmx_pko3_port_cir_set(unsigned int node, unsigned int pq_num, unsigned long rate_kbips,
+			   unsigned int burst_bytes, int adj_bytes);
+int cvmx_pko3_dq_cir_set(unsigned int node, unsigned int pq_num, unsigned long rate_kbips,
+			 unsigned int burst_bytes);
+int cvmx_pko3_dq_pir_set(unsigned int node, unsigned int pq_num, unsigned long rate_kbips,
+			 unsigned int burst_bytes);
+typedef enum {
+	CVMX_PKO3_SHAPE_RED_STALL,
+	CVMX_PKO3_SHAPE_RED_DISCARD,
+	CVMX_PKO3_SHAPE_RED_PASS
+} red_action_t;
+
+void cvmx_pko3_dq_red(unsigned int node, unsigned int dq_num, red_action_t red_act,
+		      int8_t len_adjust);
+
+/**
+ * Macros to deal with short floating point numbers,
+ * where unsigned exponent, and an unsigned normalized
+ * mantissa are represented each with a defined field width.
+ *
+ */
+#define CVMX_SHOFT_MANT_BITS 8
+#define CVMX_SHOFT_EXP_BITS  4
+
+/**
+ * Convert short-float to an unsigned integer
+ * Note that it will lose precision.
+ */
+#define CVMX_SHOFT_TO_U64(m, e)                                                                    \
+	((((1ull << CVMX_SHOFT_MANT_BITS) | (m)) << (e)) >> CVMX_SHOFT_MANT_BITS)
+
+/**
+ * Convert to short-float from an unsigned integer
+ */
+#define CVMX_SHOFT_FROM_U64(ui, m, e)                                                              \
+	do {                                                                                       \
+		unsigned long long u;                                                              \
+		unsigned int k;                                                                    \
+		k = (1ull << (CVMX_SHOFT_MANT_BITS + 1)) - 1;                                      \
+		(e) = 0;                                                                           \
+		u = (ui) << CVMX_SHOFT_MANT_BITS;                                                  \
+		while ((u) > k) {                                                                  \
+			u >>= 1;                                                                   \
+			(e)++;                                                                     \
+		}                                                                                  \
+		(m) = u & (k >> 1);                                                                \
+	} while (0);
+
+#define CVMX_SHOFT_MAX()                                                                           \
+	CVMX_SHOFT_TO_U64((1 << CVMX_SHOFT_MANT_BITS) - 1, (1 << CVMX_SHOFT_EXP_BITS) - 1)
+#define CVMX_SHOFT_MIN() CVMX_SHOFT_TO_U64(0, 0)
+
+#endif /* __CVMX_PKO3_QUEUE_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pow-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-pow-defs.h
new file mode 100644
index 0000000..92e3723
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pow-defs.h
@@ -0,0 +1,1135 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon pow.
+ */
+
+#ifndef __CVMX_POW_DEFS_H__
+#define __CVMX_POW_DEFS_H__
+
+#define CVMX_POW_BIST_STAT	     (0x00016700000003F8ull)
+#define CVMX_POW_DS_PC		     (0x0001670000000398ull)
+#define CVMX_POW_ECC_ERR	     (0x0001670000000218ull)
+#define CVMX_POW_IQ_CNTX(offset)     (0x0001670000000340ull + ((offset) & 7) * 8)
+#define CVMX_POW_IQ_COM_CNT	     (0x0001670000000388ull)
+#define CVMX_POW_IQ_INT		     (0x0001670000000238ull)
+#define CVMX_POW_IQ_INT_EN	     (0x0001670000000240ull)
+#define CVMX_POW_IQ_THRX(offset)     (0x00016700000003A0ull + ((offset) & 7) * 8)
+#define CVMX_POW_NOS_CNT	     (0x0001670000000228ull)
+#define CVMX_POW_NW_TIM		     (0x0001670000000210ull)
+#define CVMX_POW_PF_RST_MSK	     (0x0001670000000230ull)
+#define CVMX_POW_PP_GRP_MSKX(offset) (0x0001670000000000ull + ((offset) & 15) * 8)
+#define CVMX_POW_QOS_RNDX(offset)    (0x00016700000001C0ull + ((offset) & 7) * 8)
+#define CVMX_POW_QOS_THRX(offset)    (0x0001670000000180ull + ((offset) & 7) * 8)
+#define CVMX_POW_TS_PC		     (0x0001670000000390ull)
+#define CVMX_POW_WA_COM_PC	     (0x0001670000000380ull)
+#define CVMX_POW_WA_PCX(offset)	     (0x0001670000000300ull + ((offset) & 7) * 8)
+#define CVMX_POW_WQ_INT		     (0x0001670000000200ull)
+#define CVMX_POW_WQ_INT_CNTX(offset) (0x0001670000000100ull + ((offset) & 15) * 8)
+#define CVMX_POW_WQ_INT_PC	     (0x0001670000000208ull)
+#define CVMX_POW_WQ_INT_THRX(offset) (0x0001670000000080ull + ((offset) & 15) * 8)
+#define CVMX_POW_WS_PCX(offset)	     (0x0001670000000280ull + ((offset) & 15) * 8)
+
+/**
+ * cvmx_pow_bist_stat
+ *
+ * Contains the BIST status for the POW memories ('0' = pass, '1' = fail).
+ *
+ */
+union cvmx_pow_bist_stat {
+	u64 u64;
+	struct cvmx_pow_bist_stat_s {
+		u64 reserved_32_63 : 32;
+		u64 pp : 16;
+		u64 reserved_0_15 : 16;
+	} s;
+	struct cvmx_pow_bist_stat_cn30xx {
+		u64 reserved_17_63 : 47;
+		u64 pp : 1;
+		u64 reserved_9_15 : 7;
+		u64 cam : 1;
+		u64 nbt1 : 1;
+		u64 nbt0 : 1;
+		u64 index : 1;
+		u64 fidx : 1;
+		u64 nbr1 : 1;
+		u64 nbr0 : 1;
+		u64 pend : 1;
+		u64 adr : 1;
+	} cn30xx;
+	struct cvmx_pow_bist_stat_cn31xx {
+		u64 reserved_18_63 : 46;
+		u64 pp : 2;
+		u64 reserved_9_15 : 7;
+		u64 cam : 1;
+		u64 nbt1 : 1;
+		u64 nbt0 : 1;
+		u64 index : 1;
+		u64 fidx : 1;
+		u64 nbr1 : 1;
+		u64 nbr0 : 1;
+		u64 pend : 1;
+		u64 adr : 1;
+	} cn31xx;
+	struct cvmx_pow_bist_stat_cn38xx {
+		u64 reserved_32_63 : 32;
+		u64 pp : 16;
+		u64 reserved_10_15 : 6;
+		u64 cam : 1;
+		u64 nbt : 1;
+		u64 index : 1;
+		u64 fidx : 1;
+		u64 nbr1 : 1;
+		u64 nbr0 : 1;
+		u64 pend1 : 1;
+		u64 pend0 : 1;
+		u64 adr1 : 1;
+		u64 adr0 : 1;
+	} cn38xx;
+	struct cvmx_pow_bist_stat_cn38xx cn38xxp2;
+	struct cvmx_pow_bist_stat_cn31xx cn50xx;
+	struct cvmx_pow_bist_stat_cn52xx {
+		u64 reserved_20_63 : 44;
+		u64 pp : 4;
+		u64 reserved_9_15 : 7;
+		u64 cam : 1;
+		u64 nbt1 : 1;
+		u64 nbt0 : 1;
+		u64 index : 1;
+		u64 fidx : 1;
+		u64 nbr1 : 1;
+		u64 nbr0 : 1;
+		u64 pend : 1;
+		u64 adr : 1;
+	} cn52xx;
+	struct cvmx_pow_bist_stat_cn52xx cn52xxp1;
+	struct cvmx_pow_bist_stat_cn56xx {
+		u64 reserved_28_63 : 36;
+		u64 pp : 12;
+		u64 reserved_10_15 : 6;
+		u64 cam : 1;
+		u64 nbt : 1;
+		u64 index : 1;
+		u64 fidx : 1;
+		u64 nbr1 : 1;
+		u64 nbr0 : 1;
+		u64 pend1 : 1;
+		u64 pend0 : 1;
+		u64 adr1 : 1;
+		u64 adr0 : 1;
+	} cn56xx;
+	struct cvmx_pow_bist_stat_cn56xx cn56xxp1;
+	struct cvmx_pow_bist_stat_cn38xx cn58xx;
+	struct cvmx_pow_bist_stat_cn38xx cn58xxp1;
+	struct cvmx_pow_bist_stat_cn61xx {
+		u64 reserved_20_63 : 44;
+		u64 pp : 4;
+		u64 reserved_12_15 : 4;
+		u64 cam : 1;
+		u64 nbr : 3;
+		u64 nbt : 4;
+		u64 index : 1;
+		u64 fidx : 1;
+		u64 pend : 1;
+		u64 adr : 1;
+	} cn61xx;
+	struct cvmx_pow_bist_stat_cn63xx {
+		u64 reserved_22_63 : 42;
+		u64 pp : 6;
+		u64 reserved_12_15 : 4;
+		u64 cam : 1;
+		u64 nbr : 3;
+		u64 nbt : 4;
+		u64 index : 1;
+		u64 fidx : 1;
+		u64 pend : 1;
+		u64 adr : 1;
+	} cn63xx;
+	struct cvmx_pow_bist_stat_cn63xx cn63xxp1;
+	struct cvmx_pow_bist_stat_cn66xx {
+		u64 reserved_26_63 : 38;
+		u64 pp : 10;
+		u64 reserved_12_15 : 4;
+		u64 cam : 1;
+		u64 nbr : 3;
+		u64 nbt : 4;
+		u64 index : 1;
+		u64 fidx : 1;
+		u64 pend : 1;
+		u64 adr : 1;
+	} cn66xx;
+	struct cvmx_pow_bist_stat_cn70xx {
+		u64 reserved_12_63 : 52;
+		u64 cam : 1;
+		u64 reserved_10_10 : 1;
+		u64 nbr : 2;
+		u64 reserved_6_7 : 2;
+		u64 nbt : 2;
+		u64 index : 1;
+		u64 fidx : 1;
+		u64 pend : 1;
+		u64 adr : 1;
+	} cn70xx;
+	struct cvmx_pow_bist_stat_cn70xx cn70xxp1;
+	struct cvmx_pow_bist_stat_cn61xx cnf71xx;
+};
+
+typedef union cvmx_pow_bist_stat cvmx_pow_bist_stat_t;
+
+/**
+ * cvmx_pow_ds_pc
+ *
+ * Counts the number of de-schedule requests.  Write to clear.
+ *
+ */
+union cvmx_pow_ds_pc {
+	u64 u64;
+	struct cvmx_pow_ds_pc_s {
+		u64 reserved_32_63 : 32;
+		u64 ds_pc : 32;
+	} s;
+	struct cvmx_pow_ds_pc_s cn30xx;
+	struct cvmx_pow_ds_pc_s cn31xx;
+	struct cvmx_pow_ds_pc_s cn38xx;
+	struct cvmx_pow_ds_pc_s cn38xxp2;
+	struct cvmx_pow_ds_pc_s cn50xx;
+	struct cvmx_pow_ds_pc_s cn52xx;
+	struct cvmx_pow_ds_pc_s cn52xxp1;
+	struct cvmx_pow_ds_pc_s cn56xx;
+	struct cvmx_pow_ds_pc_s cn56xxp1;
+	struct cvmx_pow_ds_pc_s cn58xx;
+	struct cvmx_pow_ds_pc_s cn58xxp1;
+	struct cvmx_pow_ds_pc_s cn61xx;
+	struct cvmx_pow_ds_pc_s cn63xx;
+	struct cvmx_pow_ds_pc_s cn63xxp1;
+	struct cvmx_pow_ds_pc_s cn66xx;
+	struct cvmx_pow_ds_pc_s cn70xx;
+	struct cvmx_pow_ds_pc_s cn70xxp1;
+	struct cvmx_pow_ds_pc_s cnf71xx;
+};
+
+typedef union cvmx_pow_ds_pc cvmx_pow_ds_pc_t;
+
+/**
+ * cvmx_pow_ecc_err
+ *
+ * Contains the single and double error bits and the corresponding interrupt enables for the ECC-
+ * protected POW index memory.  Also contains the syndrome value in the event of an ECC error.
+ * Also contains the remote pointer error bit and interrupt enable.  RPE is set when the POW
+ * detected
+ * corruption on one or more of the input queue lists in L2/DRAM (POW's local copy of the tail
+ * pointer
+ * for the L2/DRAM input queue did not match the last entry on the the list).   This is caused by
+ * L2/DRAM corruption, and is generally a fatal error because it likely caused POW to load bad
+ * work
+ * queue entries.
+ * This register also contains the illegal operation error bits and the corresponding interrupt
+ * enables as follows:
+ *  <0> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP from PP in NULL_NULL state
+ *  <1> Received SWTAG/SWTAG_DESCH/DESCH/UPD_WQP from PP in NULL state
+ *  <2> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/GET_WORK from PP with pending tag switch to ORDERED
+ * or ATOMIC
+ *  <3> Received SWTAG/SWTAG_FULL/SWTAG_DESCH from PP with tag specified as NULL_NULL
+ *  <4> Received SWTAG_FULL/SWTAG_DESCH from PP with tag specified as NULL
+ *  <5> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with
+ * GET_WORK pending
+ *  <6> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with NULL_RD
+ * pending
+ *  <7> Received CLR_NSCHED from PP with SWTAG_DESCH/DESCH/CLR_NSCHED pending
+ *  <8> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with
+ * CLR_NSCHED pending
+ *  <9> Received illegal opcode
+ * <10> Received ADD_WORK with tag specified as NULL_NULL
+ * <11> Received DBG load from PP with DBG load pending
+ * <12> Received CSR load from PP with CSR load pending
+ */
+union cvmx_pow_ecc_err {
+	u64 u64;
+	struct cvmx_pow_ecc_err_s {
+		u64 reserved_45_63 : 19;
+		u64 iop_ie : 13;
+		u64 reserved_29_31 : 3;
+		u64 iop : 13;
+		u64 reserved_14_15 : 2;
+		u64 rpe_ie : 1;
+		u64 rpe : 1;
+		u64 reserved_9_11 : 3;
+		u64 syn : 5;
+		u64 dbe_ie : 1;
+		u64 sbe_ie : 1;
+		u64 dbe : 1;
+		u64 sbe : 1;
+	} s;
+	struct cvmx_pow_ecc_err_s cn30xx;
+	struct cvmx_pow_ecc_err_cn31xx {
+		u64 reserved_14_63 : 50;
+		u64 rpe_ie : 1;
+		u64 rpe : 1;
+		u64 reserved_9_11 : 3;
+		u64 syn : 5;
+		u64 dbe_ie : 1;
+		u64 sbe_ie : 1;
+		u64 dbe : 1;
+		u64 sbe : 1;
+	} cn31xx;
+	struct cvmx_pow_ecc_err_s cn38xx;
+	struct cvmx_pow_ecc_err_cn31xx cn38xxp2;
+	struct cvmx_pow_ecc_err_s cn50xx;
+	struct cvmx_pow_ecc_err_s cn52xx;
+	struct cvmx_pow_ecc_err_s cn52xxp1;
+	struct cvmx_pow_ecc_err_s cn56xx;
+	struct cvmx_pow_ecc_err_s cn56xxp1;
+	struct cvmx_pow_ecc_err_s cn58xx;
+	struct cvmx_pow_ecc_err_s cn58xxp1;
+	struct cvmx_pow_ecc_err_s cn61xx;
+	struct cvmx_pow_ecc_err_s cn63xx;
+	struct cvmx_pow_ecc_err_s cn63xxp1;
+	struct cvmx_pow_ecc_err_s cn66xx;
+	struct cvmx_pow_ecc_err_s cn70xx;
+	struct cvmx_pow_ecc_err_s cn70xxp1;
+	struct cvmx_pow_ecc_err_s cnf71xx;
+};
+
+typedef union cvmx_pow_ecc_err cvmx_pow_ecc_err_t;
+
+/**
+ * cvmx_pow_iq_cnt#
+ *
+ * Contains a read-only count of the number of work queue entries for each QOS level.
+ *
+ */
+union cvmx_pow_iq_cntx {
+	u64 u64;
+	struct cvmx_pow_iq_cntx_s {
+		u64 reserved_32_63 : 32;
+		u64 iq_cnt : 32;
+	} s;
+	struct cvmx_pow_iq_cntx_s cn30xx;
+	struct cvmx_pow_iq_cntx_s cn31xx;
+	struct cvmx_pow_iq_cntx_s cn38xx;
+	struct cvmx_pow_iq_cntx_s cn38xxp2;
+	struct cvmx_pow_iq_cntx_s cn50xx;
+	struct cvmx_pow_iq_cntx_s cn52xx;
+	struct cvmx_pow_iq_cntx_s cn52xxp1;
+	struct cvmx_pow_iq_cntx_s cn56xx;
+	struct cvmx_pow_iq_cntx_s cn56xxp1;
+	struct cvmx_pow_iq_cntx_s cn58xx;
+	struct cvmx_pow_iq_cntx_s cn58xxp1;
+	struct cvmx_pow_iq_cntx_s cn61xx;
+	struct cvmx_pow_iq_cntx_s cn63xx;
+	struct cvmx_pow_iq_cntx_s cn63xxp1;
+	struct cvmx_pow_iq_cntx_s cn66xx;
+	struct cvmx_pow_iq_cntx_s cn70xx;
+	struct cvmx_pow_iq_cntx_s cn70xxp1;
+	struct cvmx_pow_iq_cntx_s cnf71xx;
+};
+
+typedef union cvmx_pow_iq_cntx cvmx_pow_iq_cntx_t;
+
+/**
+ * cvmx_pow_iq_com_cnt
+ *
+ * Contains a read-only count of the total number of work queue entries in all QOS levels.
+ *
+ */
+union cvmx_pow_iq_com_cnt {
+	u64 u64;
+	struct cvmx_pow_iq_com_cnt_s {
+		u64 reserved_32_63 : 32;
+		u64 iq_cnt : 32;
+	} s;
+	struct cvmx_pow_iq_com_cnt_s cn30xx;
+	struct cvmx_pow_iq_com_cnt_s cn31xx;
+	struct cvmx_pow_iq_com_cnt_s cn38xx;
+	struct cvmx_pow_iq_com_cnt_s cn38xxp2;
+	struct cvmx_pow_iq_com_cnt_s cn50xx;
+	struct cvmx_pow_iq_com_cnt_s cn52xx;
+	struct cvmx_pow_iq_com_cnt_s cn52xxp1;
+	struct cvmx_pow_iq_com_cnt_s cn56xx;
+	struct cvmx_pow_iq_com_cnt_s cn56xxp1;
+	struct cvmx_pow_iq_com_cnt_s cn58xx;
+	struct cvmx_pow_iq_com_cnt_s cn58xxp1;
+	struct cvmx_pow_iq_com_cnt_s cn61xx;
+	struct cvmx_pow_iq_com_cnt_s cn63xx;
+	struct cvmx_pow_iq_com_cnt_s cn63xxp1;
+	struct cvmx_pow_iq_com_cnt_s cn66xx;
+	struct cvmx_pow_iq_com_cnt_s cn70xx;
+	struct cvmx_pow_iq_com_cnt_s cn70xxp1;
+	struct cvmx_pow_iq_com_cnt_s cnf71xx;
+};
+
+typedef union cvmx_pow_iq_com_cnt cvmx_pow_iq_com_cnt_t;
+
+/**
+ * cvmx_pow_iq_int
+ *
+ * "Contains the bits (1 per QOS level) that can trigger the input queue interrupt.  An IQ_INT
+ * bit
+ * will be set if POW_IQ_CNT#QOS# changes and the resulting value is equal to POW_IQ_THR#QOS#."
+ */
+union cvmx_pow_iq_int {
+	u64 u64;
+	struct cvmx_pow_iq_int_s {
+		u64 reserved_8_63 : 56;
+		u64 iq_int : 8;
+	} s;
+	struct cvmx_pow_iq_int_s cn52xx;
+	struct cvmx_pow_iq_int_s cn52xxp1;
+	struct cvmx_pow_iq_int_s cn56xx;
+	struct cvmx_pow_iq_int_s cn56xxp1;
+	struct cvmx_pow_iq_int_s cn61xx;
+	struct cvmx_pow_iq_int_s cn63xx;
+	struct cvmx_pow_iq_int_s cn63xxp1;
+	struct cvmx_pow_iq_int_s cn66xx;
+	struct cvmx_pow_iq_int_s cn70xx;
+	struct cvmx_pow_iq_int_s cn70xxp1;
+	struct cvmx_pow_iq_int_s cnf71xx;
+};
+
+typedef union cvmx_pow_iq_int cvmx_pow_iq_int_t;
+
+/**
+ * cvmx_pow_iq_int_en
+ *
+ * Contains the bits (1 per QOS level) that enable the input queue interrupt.
+ *
+ */
+union cvmx_pow_iq_int_en {
+	u64 u64;
+	struct cvmx_pow_iq_int_en_s {
+		u64 reserved_8_63 : 56;
+		u64 int_en : 8;
+	} s;
+	struct cvmx_pow_iq_int_en_s cn52xx;
+	struct cvmx_pow_iq_int_en_s cn52xxp1;
+	struct cvmx_pow_iq_int_en_s cn56xx;
+	struct cvmx_pow_iq_int_en_s cn56xxp1;
+	struct cvmx_pow_iq_int_en_s cn61xx;
+	struct cvmx_pow_iq_int_en_s cn63xx;
+	struct cvmx_pow_iq_int_en_s cn63xxp1;
+	struct cvmx_pow_iq_int_en_s cn66xx;
+	struct cvmx_pow_iq_int_en_s cn70xx;
+	struct cvmx_pow_iq_int_en_s cn70xxp1;
+	struct cvmx_pow_iq_int_en_s cnf71xx;
+};
+
+typedef union cvmx_pow_iq_int_en cvmx_pow_iq_int_en_t;
+
+/**
+ * cvmx_pow_iq_thr#
+ *
+ * Threshold value for triggering input queue interrupts.
+ *
+ */
+union cvmx_pow_iq_thrx {
+	u64 u64;
+	struct cvmx_pow_iq_thrx_s {
+		u64 reserved_32_63 : 32;
+		u64 iq_thr : 32;
+	} s;
+	struct cvmx_pow_iq_thrx_s cn52xx;
+	struct cvmx_pow_iq_thrx_s cn52xxp1;
+	struct cvmx_pow_iq_thrx_s cn56xx;
+	struct cvmx_pow_iq_thrx_s cn56xxp1;
+	struct cvmx_pow_iq_thrx_s cn61xx;
+	struct cvmx_pow_iq_thrx_s cn63xx;
+	struct cvmx_pow_iq_thrx_s cn63xxp1;
+	struct cvmx_pow_iq_thrx_s cn66xx;
+	struct cvmx_pow_iq_thrx_s cn70xx;
+	struct cvmx_pow_iq_thrx_s cn70xxp1;
+	struct cvmx_pow_iq_thrx_s cnf71xx;
+};
+
+typedef union cvmx_pow_iq_thrx cvmx_pow_iq_thrx_t;
+
+/**
+ * cvmx_pow_nos_cnt
+ *
+ * Contains the number of work queue entries on the no-schedule list.
+ *
+ */
+union cvmx_pow_nos_cnt {
+	u64 u64;
+	struct cvmx_pow_nos_cnt_s {
+		u64 reserved_12_63 : 52;
+		u64 nos_cnt : 12;
+	} s;
+	struct cvmx_pow_nos_cnt_cn30xx {
+		u64 reserved_7_63 : 57;
+		u64 nos_cnt : 7;
+	} cn30xx;
+	struct cvmx_pow_nos_cnt_cn31xx {
+		u64 reserved_9_63 : 55;
+		u64 nos_cnt : 9;
+	} cn31xx;
+	struct cvmx_pow_nos_cnt_s cn38xx;
+	struct cvmx_pow_nos_cnt_s cn38xxp2;
+	struct cvmx_pow_nos_cnt_cn31xx cn50xx;
+	struct cvmx_pow_nos_cnt_cn52xx {
+		u64 reserved_10_63 : 54;
+		u64 nos_cnt : 10;
+	} cn52xx;
+	struct cvmx_pow_nos_cnt_cn52xx cn52xxp1;
+	struct cvmx_pow_nos_cnt_s cn56xx;
+	struct cvmx_pow_nos_cnt_s cn56xxp1;
+	struct cvmx_pow_nos_cnt_s cn58xx;
+	struct cvmx_pow_nos_cnt_s cn58xxp1;
+	struct cvmx_pow_nos_cnt_cn52xx cn61xx;
+	struct cvmx_pow_nos_cnt_cn63xx {
+		u64 reserved_11_63 : 53;
+		u64 nos_cnt : 11;
+	} cn63xx;
+	struct cvmx_pow_nos_cnt_cn63xx cn63xxp1;
+	struct cvmx_pow_nos_cnt_cn63xx cn66xx;
+	struct cvmx_pow_nos_cnt_cn52xx cn70xx;
+	struct cvmx_pow_nos_cnt_cn52xx cn70xxp1;
+	struct cvmx_pow_nos_cnt_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pow_nos_cnt cvmx_pow_nos_cnt_t;
+
+/**
+ * cvmx_pow_nw_tim
+ *
+ * Sets the minimum period for a new work request timeout.  Period is specified in n-1 notation
+ * where the increment value is 1024 clock cycles.  Thus, a value of 0x0 in this register
+ * translates
+ * to 1024 cycles, 0x1 translates to 2048 cycles, 0x2 translates to 3072 cycles, etc...  Note:
+ * the
+ * maximum period for a new work request timeout is 2 times the minimum period.  Note: the new
+ * work
+ * request timeout counter is reset when this register is written.
+ * There are two new work request timeout cases:
+ * - WAIT bit clear.  The new work request can timeout if the timer expires before the pre-fetch
+ *   engine has reached the end of all work queues.  This can occur if the executable work queue
+ *   entry is deep in the queue and the pre-fetch engine is subject to many resets (i.e. high
+ * switch,
+ *   de-schedule, or new work load from other PP's).  Thus, it is possible for a PP to receive a
+ * work
+ *   response with the NO_WORK bit set even though there was at least one executable entry in the
+ *   work queues.  The other (and typical) scenario for receiving a NO_WORK response with the
+ * WAIT
+ *   bit clear is that the pre-fetch engine has reached the end of all work queues without
+ * finding
+ *   executable work.
+ * - WAIT bit set.  The new work request can timeout if the timer expires before the pre-fetch
+ *   engine has found executable work.  In this case, the only scenario where the PP will receive
+ * a
+ *   work response with the NO_WORK bit set is if the timer expires.  Note: it is still possible
+ * for
+ *   a PP to receive a NO_WORK response even though there was at least one executable entry in
+ * the
+ *   work queues.
+ * In either case, it's important to note that switches and de-schedules are higher priority
+ * operations that can cause the pre-fetch engine to reset.  Thus in a system with many switches
+ * or
+ * de-schedules occurring, it's possible for the new work timer to expire (resulting in NO_WORK
+ * responses) before the pre-fetch engine is able to get very deep into the work queues.
+ */
+union cvmx_pow_nw_tim {
+	u64 u64;
+	struct cvmx_pow_nw_tim_s {
+		u64 reserved_10_63 : 54;
+		u64 nw_tim : 10;
+	} s;
+	struct cvmx_pow_nw_tim_s cn30xx;
+	struct cvmx_pow_nw_tim_s cn31xx;
+	struct cvmx_pow_nw_tim_s cn38xx;
+	struct cvmx_pow_nw_tim_s cn38xxp2;
+	struct cvmx_pow_nw_tim_s cn50xx;
+	struct cvmx_pow_nw_tim_s cn52xx;
+	struct cvmx_pow_nw_tim_s cn52xxp1;
+	struct cvmx_pow_nw_tim_s cn56xx;
+	struct cvmx_pow_nw_tim_s cn56xxp1;
+	struct cvmx_pow_nw_tim_s cn58xx;
+	struct cvmx_pow_nw_tim_s cn58xxp1;
+	struct cvmx_pow_nw_tim_s cn61xx;
+	struct cvmx_pow_nw_tim_s cn63xx;
+	struct cvmx_pow_nw_tim_s cn63xxp1;
+	struct cvmx_pow_nw_tim_s cn66xx;
+	struct cvmx_pow_nw_tim_s cn70xx;
+	struct cvmx_pow_nw_tim_s cn70xxp1;
+	struct cvmx_pow_nw_tim_s cnf71xx;
+};
+
+typedef union cvmx_pow_nw_tim cvmx_pow_nw_tim_t;
+
+/**
+ * cvmx_pow_pf_rst_msk
+ *
+ * Resets the work prefetch engine when work is stored in an internal buffer (either when the add
+ * work arrives or when the work is reloaded from an external buffer) for an enabled QOS level
+ * (1 bit per QOS level).
+ */
+union cvmx_pow_pf_rst_msk {
+	u64 u64;
+	struct cvmx_pow_pf_rst_msk_s {
+		u64 reserved_8_63 : 56;
+		u64 rst_msk : 8;
+	} s;
+	struct cvmx_pow_pf_rst_msk_s cn50xx;
+	struct cvmx_pow_pf_rst_msk_s cn52xx;
+	struct cvmx_pow_pf_rst_msk_s cn52xxp1;
+	struct cvmx_pow_pf_rst_msk_s cn56xx;
+	struct cvmx_pow_pf_rst_msk_s cn56xxp1;
+	struct cvmx_pow_pf_rst_msk_s cn58xx;
+	struct cvmx_pow_pf_rst_msk_s cn58xxp1;
+	struct cvmx_pow_pf_rst_msk_s cn61xx;
+	struct cvmx_pow_pf_rst_msk_s cn63xx;
+	struct cvmx_pow_pf_rst_msk_s cn63xxp1;
+	struct cvmx_pow_pf_rst_msk_s cn66xx;
+	struct cvmx_pow_pf_rst_msk_s cn70xx;
+	struct cvmx_pow_pf_rst_msk_s cn70xxp1;
+	struct cvmx_pow_pf_rst_msk_s cnf71xx;
+};
+
+typedef union cvmx_pow_pf_rst_msk cvmx_pow_pf_rst_msk_t;
+
+/**
+ * cvmx_pow_pp_grp_msk#
+ *
+ * Selects which group(s) a PP belongs to.  A '1' in any bit position sets the PP's membership in
+ * the corresponding group.  A value of 0x0 will prevent the PP from receiving new work.  Note:
+ * disabled or non-existent PP's should have this field set to 0xffff (the reset value) in order
+ * to
+ * maximize POW performance.
+ * Also contains the QOS level priorities for each PP.  0x0 is highest priority, and 0x7 the
+ * lowest.
+ * Setting the priority to 0xf will prevent that PP from receiving work from that QOS level.
+ * Priority values 0x8 through 0xe are reserved and should not be used.  For a given PP,
+ * priorities
+ * should begin at 0x0 and remain contiguous throughout the range.
+ */
+union cvmx_pow_pp_grp_mskx {
+	u64 u64;
+	struct cvmx_pow_pp_grp_mskx_s {
+		u64 reserved_48_63 : 16;
+		u64 qos7_pri : 4;
+		u64 qos6_pri : 4;
+		u64 qos5_pri : 4;
+		u64 qos4_pri : 4;
+		u64 qos3_pri : 4;
+		u64 qos2_pri : 4;
+		u64 qos1_pri : 4;
+		u64 qos0_pri : 4;
+		u64 grp_msk : 16;
+	} s;
+	struct cvmx_pow_pp_grp_mskx_cn30xx {
+		u64 reserved_16_63 : 48;
+		u64 grp_msk : 16;
+	} cn30xx;
+	struct cvmx_pow_pp_grp_mskx_cn30xx cn31xx;
+	struct cvmx_pow_pp_grp_mskx_cn30xx cn38xx;
+	struct cvmx_pow_pp_grp_mskx_cn30xx cn38xxp2;
+	struct cvmx_pow_pp_grp_mskx_s cn50xx;
+	struct cvmx_pow_pp_grp_mskx_s cn52xx;
+	struct cvmx_pow_pp_grp_mskx_s cn52xxp1;
+	struct cvmx_pow_pp_grp_mskx_s cn56xx;
+	struct cvmx_pow_pp_grp_mskx_s cn56xxp1;
+	struct cvmx_pow_pp_grp_mskx_s cn58xx;
+	struct cvmx_pow_pp_grp_mskx_s cn58xxp1;
+	struct cvmx_pow_pp_grp_mskx_s cn61xx;
+	struct cvmx_pow_pp_grp_mskx_s cn63xx;
+	struct cvmx_pow_pp_grp_mskx_s cn63xxp1;
+	struct cvmx_pow_pp_grp_mskx_s cn66xx;
+	struct cvmx_pow_pp_grp_mskx_s cn70xx;
+	struct cvmx_pow_pp_grp_mskx_s cn70xxp1;
+	struct cvmx_pow_pp_grp_mskx_s cnf71xx;
+};
+
+typedef union cvmx_pow_pp_grp_mskx cvmx_pow_pp_grp_mskx_t;
+
+/**
+ * cvmx_pow_qos_rnd#
+ *
+ * Contains the round definitions for issuing new work.  Each round consists of 8 bits with each
+ * bit
+ * corresponding to a QOS level.  There are 4 rounds contained in each register for a total of 32
+ * rounds.  The issue logic traverses through the rounds sequentially (lowest round to highest
+ * round)
+ * in an attempt to find new work for each PP.  Within each round, the issue logic traverses
+ * through
+ * the QOS levels sequentially (highest QOS to lowest QOS) skipping over each QOS level with a
+ * clear
+ * bit in the round mask.  Note: setting a QOS level to all zeroes in all issue round registers
+ * will
+ * prevent work from being issued from that QOS level.
+ */
+union cvmx_pow_qos_rndx {
+	u64 u64;
+	struct cvmx_pow_qos_rndx_s {
+		u64 reserved_32_63 : 32;
+		u64 rnd_p3 : 8;
+		u64 rnd_p2 : 8;
+		u64 rnd_p1 : 8;
+		u64 rnd : 8;
+	} s;
+	struct cvmx_pow_qos_rndx_s cn30xx;
+	struct cvmx_pow_qos_rndx_s cn31xx;
+	struct cvmx_pow_qos_rndx_s cn38xx;
+	struct cvmx_pow_qos_rndx_s cn38xxp2;
+	struct cvmx_pow_qos_rndx_s cn50xx;
+	struct cvmx_pow_qos_rndx_s cn52xx;
+	struct cvmx_pow_qos_rndx_s cn52xxp1;
+	struct cvmx_pow_qos_rndx_s cn56xx;
+	struct cvmx_pow_qos_rndx_s cn56xxp1;
+	struct cvmx_pow_qos_rndx_s cn58xx;
+	struct cvmx_pow_qos_rndx_s cn58xxp1;
+	struct cvmx_pow_qos_rndx_s cn61xx;
+	struct cvmx_pow_qos_rndx_s cn63xx;
+	struct cvmx_pow_qos_rndx_s cn63xxp1;
+	struct cvmx_pow_qos_rndx_s cn66xx;
+	struct cvmx_pow_qos_rndx_s cn70xx;
+	struct cvmx_pow_qos_rndx_s cn70xxp1;
+	struct cvmx_pow_qos_rndx_s cnf71xx;
+};
+
+typedef union cvmx_pow_qos_rndx cvmx_pow_qos_rndx_t;
+
+/**
+ * cvmx_pow_qos_thr#
+ *
+ * Contains the thresholds for allocating POW internal storage buffers.  If the number of
+ * remaining
+ * free buffers drops below the minimum threshold (MIN_THR) or the number of allocated buffers
+ * for
+ * this QOS level rises above the maximum threshold (MAX_THR), future incoming work queue entries
+ * will be buffered externally rather than internally.  This register also contains a read-only
+ * count
+ * of the current number of free buffers (FREE_CNT), the number of internal buffers currently
+ * allocated to this QOS level (BUF_CNT), and the total number of buffers on the de-schedule list
+ * (DES_CNT) (which is not the same as the total number of de-scheduled buffers).
+ */
+union cvmx_pow_qos_thrx {
+	u64 u64;
+	struct cvmx_pow_qos_thrx_s {
+		u64 reserved_60_63 : 4;
+		u64 des_cnt : 12;
+		u64 buf_cnt : 12;
+		u64 free_cnt : 12;
+		u64 reserved_23_23 : 1;
+		u64 max_thr : 11;
+		u64 reserved_11_11 : 1;
+		u64 min_thr : 11;
+	} s;
+	struct cvmx_pow_qos_thrx_cn30xx {
+		u64 reserved_55_63 : 9;
+		u64 des_cnt : 7;
+		u64 reserved_43_47 : 5;
+		u64 buf_cnt : 7;
+		u64 reserved_31_35 : 5;
+		u64 free_cnt : 7;
+		u64 reserved_18_23 : 6;
+		u64 max_thr : 6;
+		u64 reserved_6_11 : 6;
+		u64 min_thr : 6;
+	} cn30xx;
+	struct cvmx_pow_qos_thrx_cn31xx {
+		u64 reserved_57_63 : 7;
+		u64 des_cnt : 9;
+		u64 reserved_45_47 : 3;
+		u64 buf_cnt : 9;
+		u64 reserved_33_35 : 3;
+		u64 free_cnt : 9;
+		u64 reserved_20_23 : 4;
+		u64 max_thr : 8;
+		u64 reserved_8_11 : 4;
+		u64 min_thr : 8;
+	} cn31xx;
+	struct cvmx_pow_qos_thrx_s cn38xx;
+	struct cvmx_pow_qos_thrx_s cn38xxp2;
+	struct cvmx_pow_qos_thrx_cn31xx cn50xx;
+	struct cvmx_pow_qos_thrx_cn52xx {
+		u64 reserved_58_63 : 6;
+		u64 des_cnt : 10;
+		u64 reserved_46_47 : 2;
+		u64 buf_cnt : 10;
+		u64 reserved_34_35 : 2;
+		u64 free_cnt : 10;
+		u64 reserved_21_23 : 3;
+		u64 max_thr : 9;
+		u64 reserved_9_11 : 3;
+		u64 min_thr : 9;
+	} cn52xx;
+	struct cvmx_pow_qos_thrx_cn52xx cn52xxp1;
+	struct cvmx_pow_qos_thrx_s cn56xx;
+	struct cvmx_pow_qos_thrx_s cn56xxp1;
+	struct cvmx_pow_qos_thrx_s cn58xx;
+	struct cvmx_pow_qos_thrx_s cn58xxp1;
+	struct cvmx_pow_qos_thrx_cn52xx cn61xx;
+	struct cvmx_pow_qos_thrx_cn63xx {
+		u64 reserved_59_63 : 5;
+		u64 des_cnt : 11;
+		u64 reserved_47_47 : 1;
+		u64 buf_cnt : 11;
+		u64 reserved_35_35 : 1;
+		u64 free_cnt : 11;
+		u64 reserved_22_23 : 2;
+		u64 max_thr : 10;
+		u64 reserved_10_11 : 2;
+		u64 min_thr : 10;
+	} cn63xx;
+	struct cvmx_pow_qos_thrx_cn63xx cn63xxp1;
+	struct cvmx_pow_qos_thrx_cn63xx cn66xx;
+	struct cvmx_pow_qos_thrx_cn52xx cn70xx;
+	struct cvmx_pow_qos_thrx_cn52xx cn70xxp1;
+	struct cvmx_pow_qos_thrx_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pow_qos_thrx cvmx_pow_qos_thrx_t;
+
+/**
+ * cvmx_pow_ts_pc
+ *
+ * Counts the number of tag switch requests.  Write to clear.
+ *
+ */
+union cvmx_pow_ts_pc {
+	u64 u64;
+	struct cvmx_pow_ts_pc_s {
+		u64 reserved_32_63 : 32;
+		u64 ts_pc : 32;
+	} s;
+	struct cvmx_pow_ts_pc_s cn30xx;
+	struct cvmx_pow_ts_pc_s cn31xx;
+	struct cvmx_pow_ts_pc_s cn38xx;
+	struct cvmx_pow_ts_pc_s cn38xxp2;
+	struct cvmx_pow_ts_pc_s cn50xx;
+	struct cvmx_pow_ts_pc_s cn52xx;
+	struct cvmx_pow_ts_pc_s cn52xxp1;
+	struct cvmx_pow_ts_pc_s cn56xx;
+	struct cvmx_pow_ts_pc_s cn56xxp1;
+	struct cvmx_pow_ts_pc_s cn58xx;
+	struct cvmx_pow_ts_pc_s cn58xxp1;
+	struct cvmx_pow_ts_pc_s cn61xx;
+	struct cvmx_pow_ts_pc_s cn63xx;
+	struct cvmx_pow_ts_pc_s cn63xxp1;
+	struct cvmx_pow_ts_pc_s cn66xx;
+	struct cvmx_pow_ts_pc_s cn70xx;
+	struct cvmx_pow_ts_pc_s cn70xxp1;
+	struct cvmx_pow_ts_pc_s cnf71xx;
+};
+
+typedef union cvmx_pow_ts_pc cvmx_pow_ts_pc_t;
+
+/**
+ * cvmx_pow_wa_com_pc
+ *
+ * Counts the number of add new work requests for all QOS levels.  Write to clear.
+ *
+ */
+union cvmx_pow_wa_com_pc {
+	u64 u64;
+	struct cvmx_pow_wa_com_pc_s {
+		u64 reserved_32_63 : 32;
+		u64 wa_pc : 32;
+	} s;
+	struct cvmx_pow_wa_com_pc_s cn30xx;
+	struct cvmx_pow_wa_com_pc_s cn31xx;
+	struct cvmx_pow_wa_com_pc_s cn38xx;
+	struct cvmx_pow_wa_com_pc_s cn38xxp2;
+	struct cvmx_pow_wa_com_pc_s cn50xx;
+	struct cvmx_pow_wa_com_pc_s cn52xx;
+	struct cvmx_pow_wa_com_pc_s cn52xxp1;
+	struct cvmx_pow_wa_com_pc_s cn56xx;
+	struct cvmx_pow_wa_com_pc_s cn56xxp1;
+	struct cvmx_pow_wa_com_pc_s cn58xx;
+	struct cvmx_pow_wa_com_pc_s cn58xxp1;
+	struct cvmx_pow_wa_com_pc_s cn61xx;
+	struct cvmx_pow_wa_com_pc_s cn63xx;
+	struct cvmx_pow_wa_com_pc_s cn63xxp1;
+	struct cvmx_pow_wa_com_pc_s cn66xx;
+	struct cvmx_pow_wa_com_pc_s cn70xx;
+	struct cvmx_pow_wa_com_pc_s cn70xxp1;
+	struct cvmx_pow_wa_com_pc_s cnf71xx;
+};
+
+typedef union cvmx_pow_wa_com_pc cvmx_pow_wa_com_pc_t;
+
+/**
+ * cvmx_pow_wa_pc#
+ *
+ * Counts the number of add new work requests for each QOS level.  Write to clear.
+ *
+ */
+union cvmx_pow_wa_pcx {
+	u64 u64;
+	struct cvmx_pow_wa_pcx_s {
+		u64 reserved_32_63 : 32;
+		u64 wa_pc : 32;
+	} s;
+	struct cvmx_pow_wa_pcx_s cn30xx;
+	struct cvmx_pow_wa_pcx_s cn31xx;
+	struct cvmx_pow_wa_pcx_s cn38xx;
+	struct cvmx_pow_wa_pcx_s cn38xxp2;
+	struct cvmx_pow_wa_pcx_s cn50xx;
+	struct cvmx_pow_wa_pcx_s cn52xx;
+	struct cvmx_pow_wa_pcx_s cn52xxp1;
+	struct cvmx_pow_wa_pcx_s cn56xx;
+	struct cvmx_pow_wa_pcx_s cn56xxp1;
+	struct cvmx_pow_wa_pcx_s cn58xx;
+	struct cvmx_pow_wa_pcx_s cn58xxp1;
+	struct cvmx_pow_wa_pcx_s cn61xx;
+	struct cvmx_pow_wa_pcx_s cn63xx;
+	struct cvmx_pow_wa_pcx_s cn63xxp1;
+	struct cvmx_pow_wa_pcx_s cn66xx;
+	struct cvmx_pow_wa_pcx_s cn70xx;
+	struct cvmx_pow_wa_pcx_s cn70xxp1;
+	struct cvmx_pow_wa_pcx_s cnf71xx;
+};
+
+typedef union cvmx_pow_wa_pcx cvmx_pow_wa_pcx_t;
+
+/**
+ * cvmx_pow_wq_int
+ *
+ * Contains the bits (1 per group) that set work queue interrupts and are used to clear these
+ * interrupts.  Also contains the input queue interrupt temporary disable bits (1 per group). For
+ * more information regarding this register, see the interrupt section.
+ */
+union cvmx_pow_wq_int {
+	u64 u64;
+	struct cvmx_pow_wq_int_s {
+		u64 reserved_32_63 : 32;
+		u64 iq_dis : 16;
+		u64 wq_int : 16;
+	} s;
+	struct cvmx_pow_wq_int_s cn30xx;
+	struct cvmx_pow_wq_int_s cn31xx;
+	struct cvmx_pow_wq_int_s cn38xx;
+	struct cvmx_pow_wq_int_s cn38xxp2;
+	struct cvmx_pow_wq_int_s cn50xx;
+	struct cvmx_pow_wq_int_s cn52xx;
+	struct cvmx_pow_wq_int_s cn52xxp1;
+	struct cvmx_pow_wq_int_s cn56xx;
+	struct cvmx_pow_wq_int_s cn56xxp1;
+	struct cvmx_pow_wq_int_s cn58xx;
+	struct cvmx_pow_wq_int_s cn58xxp1;
+	struct cvmx_pow_wq_int_s cn61xx;
+	struct cvmx_pow_wq_int_s cn63xx;
+	struct cvmx_pow_wq_int_s cn63xxp1;
+	struct cvmx_pow_wq_int_s cn66xx;
+	struct cvmx_pow_wq_int_s cn70xx;
+	struct cvmx_pow_wq_int_s cn70xxp1;
+	struct cvmx_pow_wq_int_s cnf71xx;
+};
+
+typedef union cvmx_pow_wq_int cvmx_pow_wq_int_t;
+
+/**
+ * cvmx_pow_wq_int_cnt#
+ *
+ * Contains a read-only copy of the counts used to trigger work queue interrupts.  For more
+ * information regarding this register, see the interrupt section.
+ */
+union cvmx_pow_wq_int_cntx {
+	u64 u64;
+	struct cvmx_pow_wq_int_cntx_s {
+		u64 reserved_28_63 : 36;
+		u64 tc_cnt : 4;
+		u64 ds_cnt : 12;
+		u64 iq_cnt : 12;
+	} s;
+	struct cvmx_pow_wq_int_cntx_cn30xx {
+		u64 reserved_28_63 : 36;
+		u64 tc_cnt : 4;
+		u64 reserved_19_23 : 5;
+		u64 ds_cnt : 7;
+		u64 reserved_7_11 : 5;
+		u64 iq_cnt : 7;
+	} cn30xx;
+	struct cvmx_pow_wq_int_cntx_cn31xx {
+		u64 reserved_28_63 : 36;
+		u64 tc_cnt : 4;
+		u64 reserved_21_23 : 3;
+		u64 ds_cnt : 9;
+		u64 reserved_9_11 : 3;
+		u64 iq_cnt : 9;
+	} cn31xx;
+	struct cvmx_pow_wq_int_cntx_s cn38xx;
+	struct cvmx_pow_wq_int_cntx_s cn38xxp2;
+	struct cvmx_pow_wq_int_cntx_cn31xx cn50xx;
+	struct cvmx_pow_wq_int_cntx_cn52xx {
+		u64 reserved_28_63 : 36;
+		u64 tc_cnt : 4;
+		u64 reserved_22_23 : 2;
+		u64 ds_cnt : 10;
+		u64 reserved_10_11 : 2;
+		u64 iq_cnt : 10;
+	} cn52xx;
+	struct cvmx_pow_wq_int_cntx_cn52xx cn52xxp1;
+	struct cvmx_pow_wq_int_cntx_s cn56xx;
+	struct cvmx_pow_wq_int_cntx_s cn56xxp1;
+	struct cvmx_pow_wq_int_cntx_s cn58xx;
+	struct cvmx_pow_wq_int_cntx_s cn58xxp1;
+	struct cvmx_pow_wq_int_cntx_cn52xx cn61xx;
+	struct cvmx_pow_wq_int_cntx_cn63xx {
+		u64 reserved_28_63 : 36;
+		u64 tc_cnt : 4;
+		u64 reserved_23_23 : 1;
+		u64 ds_cnt : 11;
+		u64 reserved_11_11 : 1;
+		u64 iq_cnt : 11;
+	} cn63xx;
+	struct cvmx_pow_wq_int_cntx_cn63xx cn63xxp1;
+	struct cvmx_pow_wq_int_cntx_cn63xx cn66xx;
+	struct cvmx_pow_wq_int_cntx_cn52xx cn70xx;
+	struct cvmx_pow_wq_int_cntx_cn52xx cn70xxp1;
+	struct cvmx_pow_wq_int_cntx_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pow_wq_int_cntx cvmx_pow_wq_int_cntx_t;
+
+/**
+ * cvmx_pow_wq_int_pc
+ *
+ * Contains the threshold value for the work queue interrupt periodic counter and also a read-
+ * only
+ * copy of the periodic counter.  For more information regarding this register, see the interrupt
+ * section.
+ */
+union cvmx_pow_wq_int_pc {
+	u64 u64;
+	struct cvmx_pow_wq_int_pc_s {
+		u64 reserved_60_63 : 4;
+		u64 pc : 28;
+		u64 reserved_28_31 : 4;
+		u64 pc_thr : 20;
+		u64 reserved_0_7 : 8;
+	} s;
+	struct cvmx_pow_wq_int_pc_s cn30xx;
+	struct cvmx_pow_wq_int_pc_s cn31xx;
+	struct cvmx_pow_wq_int_pc_s cn38xx;
+	struct cvmx_pow_wq_int_pc_s cn38xxp2;
+	struct cvmx_pow_wq_int_pc_s cn50xx;
+	struct cvmx_pow_wq_int_pc_s cn52xx;
+	struct cvmx_pow_wq_int_pc_s cn52xxp1;
+	struct cvmx_pow_wq_int_pc_s cn56xx;
+	struct cvmx_pow_wq_int_pc_s cn56xxp1;
+	struct cvmx_pow_wq_int_pc_s cn58xx;
+	struct cvmx_pow_wq_int_pc_s cn58xxp1;
+	struct cvmx_pow_wq_int_pc_s cn61xx;
+	struct cvmx_pow_wq_int_pc_s cn63xx;
+	struct cvmx_pow_wq_int_pc_s cn63xxp1;
+	struct cvmx_pow_wq_int_pc_s cn66xx;
+	struct cvmx_pow_wq_int_pc_s cn70xx;
+	struct cvmx_pow_wq_int_pc_s cn70xxp1;
+	struct cvmx_pow_wq_int_pc_s cnf71xx;
+};
+
+typedef union cvmx_pow_wq_int_pc cvmx_pow_wq_int_pc_t;
+
+/**
+ * cvmx_pow_wq_int_thr#
+ *
+ * Contains the thresholds for enabling and setting work queue interrupts.  For more information
+ * regarding this register, see the interrupt section.
+ * Note: Up to 4 of the POW's internal storage buffers can be allocated for hardware use and are
+ * therefore not available for incoming work queue entries.  Additionally, any PP that is not in
+ * the
+ * NULL_NULL state consumes a buffer.  Thus in a 4 PP system, it is not advisable to set either
+ * IQ_THR or DS_THR to greater than 512 - 4 - 4 = 504.  Doing so may prevent the interrupt from
+ * ever triggering.
+ */
+union cvmx_pow_wq_int_thrx {
+	u64 u64;
+	struct cvmx_pow_wq_int_thrx_s {
+		u64 reserved_29_63 : 35;
+		u64 tc_en : 1;
+		u64 tc_thr : 4;
+		u64 reserved_23_23 : 1;
+		u64 ds_thr : 11;
+		u64 reserved_11_11 : 1;
+		u64 iq_thr : 11;
+	} s;
+	struct cvmx_pow_wq_int_thrx_cn30xx {
+		u64 reserved_29_63 : 35;
+		u64 tc_en : 1;
+		u64 tc_thr : 4;
+		u64 reserved_18_23 : 6;
+		u64 ds_thr : 6;
+		u64 reserved_6_11 : 6;
+		u64 iq_thr : 6;
+	} cn30xx;
+	struct cvmx_pow_wq_int_thrx_cn31xx {
+		u64 reserved_29_63 : 35;
+		u64 tc_en : 1;
+		u64 tc_thr : 4;
+		u64 reserved_20_23 : 4;
+		u64 ds_thr : 8;
+		u64 reserved_8_11 : 4;
+		u64 iq_thr : 8;
+	} cn31xx;
+	struct cvmx_pow_wq_int_thrx_s cn38xx;
+	struct cvmx_pow_wq_int_thrx_s cn38xxp2;
+	struct cvmx_pow_wq_int_thrx_cn31xx cn50xx;
+	struct cvmx_pow_wq_int_thrx_cn52xx {
+		u64 reserved_29_63 : 35;
+		u64 tc_en : 1;
+		u64 tc_thr : 4;
+		u64 reserved_21_23 : 3;
+		u64 ds_thr : 9;
+		u64 reserved_9_11 : 3;
+		u64 iq_thr : 9;
+	} cn52xx;
+	struct cvmx_pow_wq_int_thrx_cn52xx cn52xxp1;
+	struct cvmx_pow_wq_int_thrx_s cn56xx;
+	struct cvmx_pow_wq_int_thrx_s cn56xxp1;
+	struct cvmx_pow_wq_int_thrx_s cn58xx;
+	struct cvmx_pow_wq_int_thrx_s cn58xxp1;
+	struct cvmx_pow_wq_int_thrx_cn52xx cn61xx;
+	struct cvmx_pow_wq_int_thrx_cn63xx {
+		u64 reserved_29_63 : 35;
+		u64 tc_en : 1;
+		u64 tc_thr : 4;
+		u64 reserved_22_23 : 2;
+		u64 ds_thr : 10;
+		u64 reserved_10_11 : 2;
+		u64 iq_thr : 10;
+	} cn63xx;
+	struct cvmx_pow_wq_int_thrx_cn63xx cn63xxp1;
+	struct cvmx_pow_wq_int_thrx_cn63xx cn66xx;
+	struct cvmx_pow_wq_int_thrx_cn52xx cn70xx;
+	struct cvmx_pow_wq_int_thrx_cn52xx cn70xxp1;
+	struct cvmx_pow_wq_int_thrx_cn52xx cnf71xx;
+};
+
+typedef union cvmx_pow_wq_int_thrx cvmx_pow_wq_int_thrx_t;
+
+/**
+ * cvmx_pow_ws_pc#
+ *
+ * Counts the number of work schedules for each group.  Write to clear.
+ *
+ */
+union cvmx_pow_ws_pcx {
+	u64 u64;
+	struct cvmx_pow_ws_pcx_s {
+		u64 reserved_32_63 : 32;
+		u64 ws_pc : 32;
+	} s;
+	struct cvmx_pow_ws_pcx_s cn30xx;
+	struct cvmx_pow_ws_pcx_s cn31xx;
+	struct cvmx_pow_ws_pcx_s cn38xx;
+	struct cvmx_pow_ws_pcx_s cn38xxp2;
+	struct cvmx_pow_ws_pcx_s cn50xx;
+	struct cvmx_pow_ws_pcx_s cn52xx;
+	struct cvmx_pow_ws_pcx_s cn52xxp1;
+	struct cvmx_pow_ws_pcx_s cn56xx;
+	struct cvmx_pow_ws_pcx_s cn56xxp1;
+	struct cvmx_pow_ws_pcx_s cn58xx;
+	struct cvmx_pow_ws_pcx_s cn58xxp1;
+	struct cvmx_pow_ws_pcx_s cn61xx;
+	struct cvmx_pow_ws_pcx_s cn63xx;
+	struct cvmx_pow_ws_pcx_s cn63xxp1;
+	struct cvmx_pow_ws_pcx_s cn66xx;
+	struct cvmx_pow_ws_pcx_s cn70xx;
+	struct cvmx_pow_ws_pcx_s cn70xxp1;
+	struct cvmx_pow_ws_pcx_s cnf71xx;
+};
+
+typedef union cvmx_pow_ws_pcx cvmx_pow_ws_pcx_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pow.h b/arch/mips/mach-octeon/include/mach/cvmx-pow.h
new file mode 100644
index 0000000..0680ca2
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pow.h
@@ -0,0 +1,2991 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Interface to the hardware Scheduling unit.
+ *
+ * New, starting with SDK 1.7.0, cvmx-pow supports a number of
+ * extended consistency checks. The define
+ * CVMX_ENABLE_POW_CHECKS controls the runtime insertion of POW
+ * internal state checks to find common programming errors. If
+ * CVMX_ENABLE_POW_CHECKS is not defined, checks are by default
+ * enabled. For example, cvmx-pow will check for the following
+ * program errors or POW state inconsistency.
+ * - Requesting a POW operation with an active tag switch in
+ *   progress.
+ * - Waiting for a tag switch to complete for an excessively
+ *   long period. This is normally a sign of an error in locking
+ *   causing deadlock.
+ * - Illegal tag switches from NULL_NULL.
+ * - Illegal tag switches from NULL.
+ * - Illegal deschedule request.
+ * - WQE pointer not matching the one attached to the core by
+ *   the POW.
+ */
+
+#ifndef __CVMX_POW_H__
+#define __CVMX_POW_H__
+
+#include "cvmx-wqe.h"
+#include "cvmx-pow-defs.h"
+#include "cvmx-sso-defs.h"
+#include "cvmx-address.h"
+#include "cvmx-coremask.h"
+
+/* Default to having all POW constancy checks turned on */
+#ifndef CVMX_ENABLE_POW_CHECKS
+#define CVMX_ENABLE_POW_CHECKS 1
+#endif
+
+/*
+ * Special type for CN78XX style SSO groups (0..255),
+ * for distinction from legacy-style groups (0..15)
+ */
+typedef union {
+	u8 xgrp;
+	/* Fields that map XGRP for backwards compatibility */
+	struct __attribute__((__packed__)) {
+		u8 group : 5;
+		u8 qus : 3;
+	};
+} cvmx_xgrp_t;
+
+/*
+ * Softwsare-only structure to convey a return value
+ * containing multiple information fields about an work queue entry
+ */
+typedef struct {
+	u32 tag;
+	u16 index;
+	u8 grp; /* Legacy group # (0..15) */
+	u8 tag_type;
+} cvmx_pow_tag_info_t;
+
+/**
+ * Wait flag values for pow functions.
+ */
+typedef enum {
+	CVMX_POW_WAIT = 1,
+	CVMX_POW_NO_WAIT = 0,
+} cvmx_pow_wait_t;
+
+/**
+ *  POW tag operations.  These are used in the data stored to the POW.
+ */
+typedef enum {
+	CVMX_POW_TAG_OP_SWTAG = 0L,
+	CVMX_POW_TAG_OP_SWTAG_FULL = 1L,
+	CVMX_POW_TAG_OP_SWTAG_DESCH = 2L,
+	CVMX_POW_TAG_OP_DESCH = 3L,
+	CVMX_POW_TAG_OP_ADDWQ = 4L,
+	CVMX_POW_TAG_OP_UPDATE_WQP_GRP = 5L,
+	CVMX_POW_TAG_OP_SET_NSCHED = 6L,
+	CVMX_POW_TAG_OP_CLR_NSCHED = 7L,
+	CVMX_POW_TAG_OP_NOP = 15L
+} cvmx_pow_tag_op_t;
+
+/**
+ * This structure defines the store data on a store to POW
+ */
+typedef union {
+	u64 u64;
+	struct {
+		u64 no_sched : 1;
+		u64 unused : 2;
+		u64 index : 13;
+		cvmx_pow_tag_op_t op : 4;
+		u64 unused2 : 2;
+		u64 qos : 3;
+		u64 grp : 4;
+		cvmx_pow_tag_type_t type : 3;
+		u64 tag : 32;
+	} s_cn38xx;
+	struct {
+		u64 no_sched : 1;
+		cvmx_pow_tag_op_t op : 4;
+		u64 unused1 : 4;
+		u64 index : 11;
+		u64 unused2 : 1;
+		u64 grp : 6;
+		u64 unused3 : 3;
+		cvmx_pow_tag_type_t type : 2;
+		u64 tag : 32;
+	} s_cn68xx_clr;
+	struct {
+		u64 no_sched : 1;
+		cvmx_pow_tag_op_t op : 4;
+		u64 unused1 : 12;
+		u64 qos : 3;
+		u64 unused2 : 1;
+		u64 grp : 6;
+		u64 unused3 : 3;
+		cvmx_pow_tag_type_t type : 2;
+		u64 tag : 32;
+	} s_cn68xx_add;
+	struct {
+		u64 no_sched : 1;
+		cvmx_pow_tag_op_t op : 4;
+		u64 unused1 : 16;
+		u64 grp : 6;
+		u64 unused3 : 3;
+		cvmx_pow_tag_type_t type : 2;
+		u64 tag : 32;
+	} s_cn68xx_other;
+	struct {
+		u64 rsvd_62_63 : 2;
+		u64 grp : 10;
+		cvmx_pow_tag_type_t type : 2;
+		u64 no_sched : 1;
+		u64 rsvd_48 : 1;
+		cvmx_pow_tag_op_t op : 4;
+		u64 rsvd_42_43 : 2;
+		u64 wqp : 42;
+	} s_cn78xx_other;
+
+} cvmx_pow_tag_req_t;
+
+union cvmx_pow_tag_req_addr {
+	u64 u64;
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 addr : 40;
+	} s;
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 node : 4;
+		u64 tag : 32;
+		u64 reserved_0_3 : 4;
+	} s_cn78xx;
+};
+
+/**
+ * This structure describes the address to load stuff from POW
+ */
+typedef union {
+	u64 u64;
+	/**
+	 * Address for new work request loads (did<2:0> == 0)
+	 */
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 reserved_4_39 : 36;
+		u64 wait : 1;
+		u64 reserved_0_2 : 3;
+	} swork;
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 node : 4;
+		u64 reserved_32_35 : 4;
+		u64 indexed : 1;
+		u64 grouped : 1;
+		u64 rtngrp : 1;
+		u64 reserved_16_28 : 13;
+		u64 index : 12;
+		u64 wait : 1;
+		u64 reserved_0_2 : 3;
+	} swork_78xx;
+	/**
+	 * Address for loads to get POW internal status
+	 */
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 reserved_10_39 : 30;
+		u64 coreid : 4;
+		u64 get_rev : 1;
+		u64 get_cur : 1;
+		u64 get_wqp : 1;
+		u64 reserved_0_2 : 3;
+	} sstatus;
+	/**
+	 * Address for loads to get 68XX SS0 internal status
+	 */
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 reserved_14_39 : 26;
+		u64 coreid : 5;
+		u64 reserved_6_8 : 3;
+		u64 opcode : 3;
+		u64 reserved_0_2 : 3;
+	} sstatus_cn68xx;
+	/**
+	 * Address for memory loads to get POW internal state
+	 */
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 reserved_16_39 : 24;
+		u64 index : 11;
+		u64 get_des : 1;
+		u64 get_wqp : 1;
+		u64 reserved_0_2 : 3;
+	} smemload;
+	/**
+	 * Address for memory loads to get SSO internal state
+	 */
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 reserved_20_39 : 20;
+		u64 index : 11;
+		u64 reserved_6_8 : 3;
+		u64 opcode : 3;
+		u64 reserved_0_2 : 3;
+	} smemload_cn68xx;
+	/**
+	 * Address for index/pointer loads
+	 */
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 reserved_9_39 : 31;
+		u64 qosgrp : 4;
+		u64 get_des_get_tail : 1;
+		u64 get_rmt : 1;
+		u64 reserved_0_2 : 3;
+	} sindexload;
+	/**
+	 * Address for a Index/Pointer loads to get SSO internal state
+	 */
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 reserved_15_39 : 25;
+		u64 qos_grp : 6;
+		u64 reserved_6_8 : 3;
+		u64 opcode : 3;
+		u64 reserved_0_2 : 3;
+	} sindexload_cn68xx;
+	/**
+	 * Address for NULL_RD request (did<2:0> == 4)
+	 * when this is read, HW attempts to change the state to NULL if it is NULL_NULL
+	 * (the hardware cannot switch from NULL_NULL to NULL if a POW entry is not available -
+	 * software may need to recover by finishing another piece of work before a POW
+	 * entry can ever become available.)
+	 */
+	struct {
+		u64 mem_region : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 reserved_0_39 : 40;
+	} snull_rd;
+} cvmx_pow_load_addr_t;
+
+/**
+ * This structure defines the response to a load/SENDSINGLE to POW (except CSR reads)
+ */
+typedef union {
+	u64 u64;
+	/**
+	 * Response to new work request loads
+	 */
+	struct {
+		u64 no_work : 1;
+		u64 pend_switch : 1;
+		u64 tt : 2;
+		u64 reserved_58_59 : 2;
+		u64 grp : 10;
+		u64 reserved_42_47 : 6;
+		u64 addr : 42;
+	} s_work;
+
+	/**
+	 * Result for a POW Status Load (when get_cur==0 and get_wqp==0)
+	 */
+	struct {
+		u64 reserved_62_63 : 2;
+		u64 pend_switch : 1;
+		u64 pend_switch_full : 1;
+		u64 pend_switch_null : 1;
+		u64 pend_desched : 1;
+		u64 pend_desched_switch : 1;
+		u64 pend_nosched : 1;
+		u64 pend_new_work : 1;
+		u64 pend_new_work_wait : 1;
+		u64 pend_null_rd : 1;
+		u64 pend_nosched_clr : 1;
+		u64 reserved_51 : 1;
+		u64 pend_index : 11;
+		u64 pend_grp : 4;
+		u64 reserved_34_35 : 2;
+		u64 pend_type : 2;
+		u64 pend_tag : 32;
+	} s_sstatus0;
+	/**
+	 * Result for a SSO Status Load (when opcode is SL_PENDTAG)
+	 */
+	struct {
+		u64 pend_switch : 1;
+		u64 pend_get_work : 1;
+		u64 pend_get_work_wait : 1;
+		u64 pend_nosched : 1;
+		u64 pend_nosched_clr : 1;
+		u64 pend_desched : 1;
+		u64 pend_alloc_we : 1;
+		u64 reserved_48_56 : 9;
+		u64 pend_index : 11;
+		u64 reserved_34_36 : 3;
+		u64 pend_type : 2;
+		u64 pend_tag : 32;
+	} s_sstatus0_cn68xx;
+	/**
+	 * Result for a POW Status Load (when get_cur==0 and get_wqp==1)
+	 */
+	struct {
+		u64 reserved_62_63 : 2;
+		u64 pend_switch : 1;
+		u64 pend_switch_full : 1;
+		u64 pend_switch_null : 1;
+		u64 pend_desched : 1;
+		u64 pend_desched_switch : 1;
+		u64 pend_nosched : 1;
+		u64 pend_new_work : 1;
+		u64 pend_new_work_wait : 1;
+		u64 pend_null_rd : 1;
+		u64 pend_nosched_clr : 1;
+		u64 reserved_51 : 1;
+		u64 pend_index : 11;
+		u64 pend_grp : 4;
+		u64 pend_wqp : 36;
+	} s_sstatus1;
+	/**
+	 * Result for a SSO Status Load (when opcode is SL_PENDWQP)
+	 */
+	struct {
+		u64 pend_switch : 1;
+		u64 pend_get_work : 1;
+		u64 pend_get_work_wait : 1;
+		u64 pend_nosched : 1;
+		u64 pend_nosched_clr : 1;
+		u64 pend_desched : 1;
+		u64 pend_alloc_we : 1;
+		u64 reserved_51_56 : 6;
+		u64 pend_index : 11;
+		u64 reserved_38_39 : 2;
+		u64 pend_wqp : 38;
+	} s_sstatus1_cn68xx;
+
+	struct {
+		u64 pend_switch : 1;
+		u64 pend_get_work : 1;
+		u64 pend_get_work_wait : 1;
+		u64 pend_nosched : 1;
+		u64 pend_nosched_clr : 1;
+		u64 pend_desched : 1;
+		u64 pend_alloc_we : 1;
+		u64 reserved_56 : 1;
+		u64 prep_index : 12;
+		u64 reserved_42_43 : 2;
+		u64 pend_tag : 42;
+	} s_sso_ppx_pendwqp_cn78xx;
+	/**
+	 * Result for a POW Status Load (when get_cur==1, get_wqp==0, and get_rev==0)
+	 */
+	struct {
+		u64 reserved_62_63 : 2;
+		u64 link_index : 11;
+		u64 index : 11;
+		u64 grp : 4;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 tag_type : 2;
+		u64 tag : 32;
+	} s_sstatus2;
+	/**
+	 * Result for a SSO Status Load (when opcode is SL_TAG)
+	 */
+	struct {
+		u64 reserved_57_63 : 7;
+		u64 index : 11;
+		u64 reserved_45 : 1;
+		u64 grp : 6;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 reserved_34_36 : 3;
+		u64 tag_type : 2;
+		u64 tag : 32;
+	} s_sstatus2_cn68xx;
+
+	struct {
+		u64 tailc : 1;
+		u64 reserved_60_62 : 3;
+		u64 index : 12;
+		u64 reserved_46_47 : 2;
+		u64 grp : 10;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 tt : 2;
+		u64 tag : 32;
+	} s_sso_ppx_tag_cn78xx;
+	/**
+	 * Result for a POW Status Load (when get_cur==1, get_wqp==0, and get_rev==1)
+	 */
+	struct {
+		u64 reserved_62_63 : 2;
+		u64 revlink_index : 11;
+		u64 index : 11;
+		u64 grp : 4;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 tag_type : 2;
+		u64 tag : 32;
+	} s_sstatus3;
+	/**
+	 * Result for a SSO Status Load (when opcode is SL_WQP)
+	 */
+	struct {
+		u64 reserved_58_63 : 6;
+		u64 index : 11;
+		u64 reserved_46 : 1;
+		u64 grp : 6;
+		u64 reserved_38_39 : 2;
+		u64 wqp : 38;
+	} s_sstatus3_cn68xx;
+
+	struct {
+		u64 reserved_58_63 : 6;
+		u64 grp : 10;
+		u64 reserved_42_47 : 6;
+		u64 tag : 42;
+	} s_sso_ppx_wqp_cn78xx;
+	/**
+	 * Result for a POW Status Load (when get_cur==1, get_wqp==1, and get_rev==0)
+	 */
+	struct {
+		u64 reserved_62_63 : 2;
+		u64 link_index : 11;
+		u64 index : 11;
+		u64 grp : 4;
+		u64 wqp : 36;
+	} s_sstatus4;
+	/**
+	 * Result for a SSO Status Load (when opcode is SL_LINKS)
+	 */
+	struct {
+		u64 reserved_46_63 : 18;
+		u64 index : 11;
+		u64 reserved_34 : 1;
+		u64 grp : 6;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 reserved_24_25 : 2;
+		u64 revlink_index : 11;
+		u64 reserved_11_12 : 2;
+		u64 link_index : 11;
+	} s_sstatus4_cn68xx;
+
+	struct {
+		u64 tailc : 1;
+		u64 reserved_60_62 : 3;
+		u64 index : 12;
+		u64 reserved_38_47 : 10;
+		u64 grp : 10;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 reserved_25 : 1;
+		u64 revlink_index : 12;
+		u64 link_index_vld : 1;
+		u64 link_index : 12;
+	} s_sso_ppx_links_cn78xx;
+	/**
+	 * Result for a POW Status Load (when get_cur==1, get_wqp==1, and get_rev==1)
+	 */
+	struct {
+		u64 reserved_62_63 : 2;
+		u64 revlink_index : 11;
+		u64 index : 11;
+		u64 grp : 4;
+		u64 wqp : 36;
+	} s_sstatus5;
+	/**
+	 * Result For POW Memory Load (get_des == 0 and get_wqp == 0)
+	 */
+	struct {
+		u64 reserved_51_63 : 13;
+		u64 next_index : 11;
+		u64 grp : 4;
+		u64 reserved_35 : 1;
+		u64 tail : 1;
+		u64 tag_type : 2;
+		u64 tag : 32;
+	} s_smemload0;
+	/**
+	 * Result For SSO Memory Load (opcode is ML_TAG)
+	 */
+	struct {
+		u64 reserved_38_63 : 26;
+		u64 tail : 1;
+		u64 reserved_34_36 : 3;
+		u64 tag_type : 2;
+		u64 tag : 32;
+	} s_smemload0_cn68xx;
+
+	struct {
+		u64 reserved_39_63 : 25;
+		u64 tail : 1;
+		u64 reserved_34_36 : 3;
+		u64 tag_type : 2;
+		u64 tag : 32;
+	} s_sso_iaq_ppx_tag_cn78xx;
+	/**
+	 * Result For POW Memory Load (get_des == 0 and get_wqp == 1)
+	 */
+	struct {
+		u64 reserved_51_63 : 13;
+		u64 next_index : 11;
+		u64 grp : 4;
+		u64 wqp : 36;
+	} s_smemload1;
+	/**
+	 * Result For SSO Memory Load (opcode is ML_WQPGRP)
+	 */
+	struct {
+		u64 reserved_48_63 : 16;
+		u64 nosched : 1;
+		u64 reserved_46 : 1;
+		u64 grp : 6;
+		u64 reserved_38_39 : 2;
+		u64 wqp : 38;
+	} s_smemload1_cn68xx;
+
+	/**
+	 * Entry structures for the CN7XXX chips.
+	 */
+	struct {
+		u64 reserved_39_63 : 25;
+		u64 tailc : 1;
+		u64 tail : 1;
+		u64 reserved_34_36 : 3;
+		u64 tt : 2;
+		u64 tag : 32;
+	} s_sso_ientx_tag_cn78xx;
+
+	struct {
+		u64 reserved_62_63 : 2;
+		u64 head : 1;
+		u64 nosched : 1;
+		u64 reserved_56_59 : 4;
+		u64 grp : 8;
+		u64 reserved_42_47 : 6;
+		u64 wqp : 42;
+	} s_sso_ientx_wqpgrp_cn73xx;
+
+	struct {
+		u64 reserved_62_63 : 2;
+		u64 head : 1;
+		u64 nosched : 1;
+		u64 reserved_58_59 : 2;
+		u64 grp : 10;
+		u64 reserved_42_47 : 6;
+		u64 wqp : 42;
+	} s_sso_ientx_wqpgrp_cn78xx;
+
+	struct {
+		u64 reserved_38_63 : 26;
+		u64 pend_switch : 1;
+		u64 reserved_34_36 : 3;
+		u64 pend_tt : 2;
+		u64 pend_tag : 32;
+	} s_sso_ientx_pendtag_cn78xx;
+
+	struct {
+		u64 reserved_26_63 : 38;
+		u64 prev_index : 10;
+		u64 reserved_11_15 : 5;
+		u64 next_index_vld : 1;
+		u64 next_index : 10;
+	} s_sso_ientx_links_cn73xx;
+
+	struct {
+		u64 reserved_28_63 : 36;
+		u64 prev_index : 12;
+		u64 reserved_13_15 : 3;
+		u64 next_index_vld : 1;
+		u64 next_index : 12;
+	} s_sso_ientx_links_cn78xx;
+
+	/**
+	 * Result For POW Memory Load (get_des == 1)
+	 */
+	struct {
+		u64 reserved_51_63 : 13;
+		u64 fwd_index : 11;
+		u64 grp : 4;
+		u64 nosched : 1;
+		u64 pend_switch : 1;
+		u64 pend_type : 2;
+		u64 pend_tag : 32;
+	} s_smemload2;
+	/**
+	 * Result For SSO Memory Load (opcode is ML_PENTAG)
+	 */
+	struct {
+		u64 reserved_38_63 : 26;
+		u64 pend_switch : 1;
+		u64 reserved_34_36 : 3;
+		u64 pend_type : 2;
+		u64 pend_tag : 32;
+	} s_smemload2_cn68xx;
+
+	struct {
+		u64 pend_switch : 1;
+		u64 pend_get_work : 1;
+		u64 pend_get_work_wait : 1;
+		u64 pend_nosched : 1;
+		u64 pend_nosched_clr : 1;
+		u64 pend_desched : 1;
+		u64 pend_alloc_we : 1;
+		u64 reserved_34_56 : 23;
+		u64 pend_tt : 2;
+		u64 pend_tag : 32;
+	} s_sso_ppx_pendtag_cn78xx;
+	/**
+	 * Result For SSO Memory Load (opcode is ML_LINKS)
+	 */
+	struct {
+		u64 reserved_24_63 : 40;
+		u64 fwd_index : 11;
+		u64 reserved_11_12 : 2;
+		u64 next_index : 11;
+	} s_smemload3_cn68xx;
+
+	/**
+	 * Result For POW Index/Pointer Load (get_rmt == 0/get_des_get_tail == 0)
+	 */
+	struct {
+		u64 reserved_52_63 : 12;
+		u64 free_val : 1;
+		u64 free_one : 1;
+		u64 reserved_49 : 1;
+		u64 free_head : 11;
+		u64 reserved_37 : 1;
+		u64 free_tail : 11;
+		u64 loc_val : 1;
+		u64 loc_one : 1;
+		u64 reserved_23 : 1;
+		u64 loc_head : 11;
+		u64 reserved_11 : 1;
+		u64 loc_tail : 11;
+	} sindexload0;
+	/**
+	 * Result for SSO Index/Pointer Load(opcode ==
+	 * IPL_IQ/IPL_DESCHED/IPL_NOSCHED)
+	 */
+	struct {
+		u64 reserved_28_63 : 36;
+		u64 queue_val : 1;
+		u64 queue_one : 1;
+		u64 reserved_24_25 : 2;
+		u64 queue_head : 11;
+		u64 reserved_11_12 : 2;
+		u64 queue_tail : 11;
+	} sindexload0_cn68xx;
+	/**
+	 * Result For POW Index/Pointer Load (get_rmt == 0/get_des_get_tail == 1)
+	 */
+	struct {
+		u64 reserved_52_63 : 12;
+		u64 nosched_val : 1;
+		u64 nosched_one : 1;
+		u64 reserved_49 : 1;
+		u64 nosched_head : 11;
+		u64 reserved_37 : 1;
+		u64 nosched_tail : 11;
+		u64 des_val : 1;
+		u64 des_one : 1;
+		u64 reserved_23 : 1;
+		u64 des_head : 11;
+		u64 reserved_11 : 1;
+		u64 des_tail : 11;
+	} sindexload1;
+	/**
+	 * Result for SSO Index/Pointer Load(opcode == IPL_FREE0/IPL_FREE1/IPL_FREE2)
+	 */
+	struct {
+		u64 reserved_60_63 : 4;
+		u64 qnum_head : 2;
+		u64 qnum_tail : 2;
+		u64 reserved_28_55 : 28;
+		u64 queue_val : 1;
+		u64 queue_one : 1;
+		u64 reserved_24_25 : 2;
+		u64 queue_head : 11;
+		u64 reserved_11_12 : 2;
+		u64 queue_tail : 11;
+	} sindexload1_cn68xx;
+	/**
+	 * Result For POW Index/Pointer Load (get_rmt == 1/get_des_get_tail == 0)
+	 */
+	struct {
+		u64 reserved_39_63 : 25;
+		u64 rmt_is_head : 1;
+		u64 rmt_val : 1;
+		u64 rmt_one : 1;
+		u64 rmt_head : 36;
+	} sindexload2;
+	/**
+	 * Result For POW Index/Pointer Load (get_rmt == 1/get_des_get_tail == 1)
+	 */
+	struct {
+		u64 reserved_39_63 : 25;
+		u64 rmt_is_head : 1;
+		u64 rmt_val : 1;
+		u64 rmt_one : 1;
+		u64 rmt_tail : 36;
+	} sindexload3;
+	/**
+	 * Response to NULL_RD request loads
+	 */
+	struct {
+		u64 unused : 62;
+		u64 state : 2;
+	} s_null_rd;
+
+} cvmx_pow_tag_load_resp_t;
+
+typedef union {
+	u64 u64;
+	struct {
+		u64 reserved_57_63 : 7;
+		u64 index : 11;
+		u64 reserved_45 : 1;
+		u64 grp : 6;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 reserved_34_36 : 3;
+		u64 tag_type : 2;
+		u64 tag : 32;
+	} s;
+} cvmx_pow_sl_tag_resp_t;
+
+/**
+ * This structure describes the address used for stores to the POW.
+ *  The store address is meaningful on stores to the POW.  The hardware assumes that an aligned
+ *  64-bit store was used for all these stores.
+ *  Note the assumption that the work queue entry is aligned on an 8-byte
+ *  boundary (since the low-order 3 address bits must be zero).
+ *  Note that not all fields are used by all operations.
+ *
+ *  NOTE: The following is the behavior of the pending switch bit at the PP
+ *       for POW stores (i.e. when did<7:3> == 0xc)
+ *     - did<2:0> == 0      => pending switch bit is set
+ *     - did<2:0> == 1      => no affect on the pending switch bit
+ *     - did<2:0> == 3      => pending switch bit is cleared
+ *     - did<2:0> == 7      => no affect on the pending switch bit
+ *     - did<2:0> == others => must not be used
+ *     - No other loads/stores have an affect on the pending switch bit
+ *     - The switch bus from POW can clear the pending switch bit
+ *
+ *  NOTE: did<2:0> == 2 is used by the HW for a special single-cycle ADDWQ command
+ *  that only contains the pointer). SW must never use did<2:0> == 2.
+ */
+typedef union {
+	u64 u64;
+	struct {
+		u64 mem_reg : 2;
+		u64 reserved_49_61 : 13;
+		u64 is_io : 1;
+		u64 did : 8;
+		u64 addr : 40;
+	} stag;
+} cvmx_pow_tag_store_addr_t; /* FIXME- this type is unused */
+
+/**
+ * Decode of the store data when an IOBDMA SENDSINGLE is sent to POW
+ */
+typedef union {
+	u64 u64;
+	struct {
+		u64 scraddr : 8;
+		u64 len : 8;
+		u64 did : 8;
+		u64 unused : 36;
+		u64 wait : 1;
+		u64 unused2 : 3;
+	} s;
+	struct {
+		u64 scraddr : 8;
+		u64 len : 8;
+		u64 did : 8;
+		u64 node : 4;
+		u64 unused1 : 4;
+		u64 indexed : 1;
+		u64 grouped : 1;
+		u64 rtngrp : 1;
+		u64 unused2 : 13;
+		u64 index_grp_mask : 12;
+		u64 wait : 1;
+		u64 unused3 : 3;
+	} s_cn78xx;
+} cvmx_pow_iobdma_store_t;
+
+/* CSR typedefs have been moved to cvmx-pow-defs.h */
+
+/*enum for group priority parameters which needs modification*/
+enum cvmx_sso_group_modify_mask {
+	CVMX_SSO_MODIFY_GROUP_PRIORITY = 0x01,
+	CVMX_SSO_MODIFY_GROUP_WEIGHT = 0x02,
+	CVMX_SSO_MODIFY_GROUP_AFFINITY = 0x04
+};
+
+/**
+ * @INTERNAL
+ * Return the number of SSO groups for a given SoC model
+ */
+static inline unsigned int cvmx_sso_num_xgrp(void)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return 256;
+	if (OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		return 64;
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX))
+		return 64;
+	printf("ERROR: %s: Unknown model\n", __func__);
+	return 0;
+}
+
+/**
+ * @INTERNAL
+ * Return the number of POW groups on current model.
+ * In case of CN78XX/CN73XX this is the number of equivalent
+ * "legacy groups" on the chip when it is used in backward
+ * compatible mode.
+ */
+static inline unsigned int cvmx_pow_num_groups(void)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		return cvmx_sso_num_xgrp() >> 3;
+	else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE))
+		return 64;
+	else
+		return 16;
+}
+
+/**
+ * @INTERNAL
+ * Return the number of mask-set registers.
+ */
+static inline unsigned int cvmx_sso_num_maskset(void)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		return 2;
+	else
+		return 1;
+}
+
+/**
+ * Get the POW tag for this core. This returns the current
+ * tag type, tag, group, and POW entry index associated with
+ * this core. Index is only valid if the tag type isn't NULL_NULL.
+ * If a tag switch is pending this routine returns the tag before
+ * the tag switch, not after.
+ *
+ * @return Current tag
+ */
+static inline cvmx_pow_tag_info_t cvmx_pow_get_current_tag(void)
+{
+	cvmx_pow_load_addr_t load_addr;
+	cvmx_pow_tag_info_t result;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_sso_sl_ppx_tag_t sl_ppx_tag;
+		cvmx_xgrp_t xgrp;
+		int node, core;
+
+		CVMX_SYNCS;
+		node = cvmx_get_node_num();
+		core = cvmx_get_local_core_num();
+		sl_ppx_tag.u64 = csr_rd_node(node, CVMX_SSO_SL_PPX_TAG(core));
+		result.index = sl_ppx_tag.s.index;
+		result.tag_type = sl_ppx_tag.s.tt;
+		result.tag = sl_ppx_tag.s.tag;
+
+		/* Get native XGRP value */
+		xgrp.xgrp = sl_ppx_tag.s.grp;
+
+		/* Return legacy style group 0..15 */
+		result.grp = xgrp.group;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		cvmx_pow_sl_tag_resp_t load_resp;
+
+		load_addr.u64 = 0;
+		load_addr.sstatus_cn68xx.mem_region = CVMX_IO_SEG;
+		load_addr.sstatus_cn68xx.is_io = 1;
+		load_addr.sstatus_cn68xx.did = CVMX_OCT_DID_TAG_TAG5;
+		load_addr.sstatus_cn68xx.coreid = cvmx_get_core_num();
+		load_addr.sstatus_cn68xx.opcode = 3;
+		load_resp.u64 = csr_rd(load_addr.u64);
+		result.grp = load_resp.s.grp;
+		result.index = load_resp.s.index;
+		result.tag_type = load_resp.s.tag_type;
+		result.tag = load_resp.s.tag;
+	} else {
+		cvmx_pow_tag_load_resp_t load_resp;
+
+		load_addr.u64 = 0;
+		load_addr.sstatus.mem_region = CVMX_IO_SEG;
+		load_addr.sstatus.is_io = 1;
+		load_addr.sstatus.did = CVMX_OCT_DID_TAG_TAG1;
+		load_addr.sstatus.coreid = cvmx_get_core_num();
+		load_addr.sstatus.get_cur = 1;
+		load_resp.u64 = csr_rd(load_addr.u64);
+		result.grp = load_resp.s_sstatus2.grp;
+		result.index = load_resp.s_sstatus2.index;
+		result.tag_type = load_resp.s_sstatus2.tag_type;
+		result.tag = load_resp.s_sstatus2.tag;
+	}
+	return result;
+}
+
+/**
+ * Get the POW WQE for this core. This returns the work queue
+ * entry currently associated with this core.
+ *
+ * @return WQE pointer
+ */
+static inline cvmx_wqe_t *cvmx_pow_get_current_wqp(void)
+{
+	cvmx_pow_load_addr_t load_addr;
+	cvmx_pow_tag_load_resp_t load_resp;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_sso_sl_ppx_wqp_t sso_wqp;
+		int node = cvmx_get_node_num();
+		int core = cvmx_get_local_core_num();
+
+		sso_wqp.u64 = csr_rd_node(node, CVMX_SSO_SL_PPX_WQP(core));
+		if (sso_wqp.s.wqp)
+			return (cvmx_wqe_t *)cvmx_phys_to_ptr(sso_wqp.s.wqp);
+		return (cvmx_wqe_t *)0;
+	}
+	if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		load_addr.u64 = 0;
+		load_addr.sstatus_cn68xx.mem_region = CVMX_IO_SEG;
+		load_addr.sstatus_cn68xx.is_io = 1;
+		load_addr.sstatus_cn68xx.did = CVMX_OCT_DID_TAG_TAG5;
+		load_addr.sstatus_cn68xx.coreid = cvmx_get_core_num();
+		load_addr.sstatus_cn68xx.opcode = 4;
+		load_resp.u64 = csr_rd(load_addr.u64);
+		if (load_resp.s_sstatus3_cn68xx.wqp)
+			return (cvmx_wqe_t *)cvmx_phys_to_ptr(load_resp.s_sstatus3_cn68xx.wqp);
+		else
+			return (cvmx_wqe_t *)0;
+	} else {
+		load_addr.u64 = 0;
+		load_addr.sstatus.mem_region = CVMX_IO_SEG;
+		load_addr.sstatus.is_io = 1;
+		load_addr.sstatus.did = CVMX_OCT_DID_TAG_TAG1;
+		load_addr.sstatus.coreid = cvmx_get_core_num();
+		load_addr.sstatus.get_cur = 1;
+		load_addr.sstatus.get_wqp = 1;
+		load_resp.u64 = csr_rd(load_addr.u64);
+		return (cvmx_wqe_t *)cvmx_phys_to_ptr(load_resp.s_sstatus4.wqp);
+	}
+}
+
+/**
+ * @INTERNAL
+ * Print a warning if a tag switch is pending for this core
+ *
+ * @param function Function name checking for a pending tag switch
+ */
+static inline void __cvmx_pow_warn_if_pending_switch(const char *function)
+{
+	u64 switch_complete;
+
+	CVMX_MF_CHORD(switch_complete);
+	cvmx_warn_if(!switch_complete, "%s called with tag switch in progress\n", function);
+}
+
+/**
+ * Waits for a tag switch to complete by polling the completion bit.
+ * Note that switches to NULL complete immediately and do not need
+ * to be waited for.
+ */
+static inline void cvmx_pow_tag_sw_wait(void)
+{
+	const u64 TIMEOUT_MS = 10; /* 10ms timeout */
+	u64 switch_complete;
+	u64 start_cycle;
+
+	if (CVMX_ENABLE_POW_CHECKS)
+		start_cycle = get_timer(0);
+
+	while (1) {
+		CVMX_MF_CHORD(switch_complete);
+		if (cvmx_likely(switch_complete))
+			break;
+
+		if (CVMX_ENABLE_POW_CHECKS) {
+			if (cvmx_unlikely(get_timer(start_cycle) > TIMEOUT_MS)) {
+				debug("WARNING: %s: Tag switch is taking a long time, possible deadlock\n",
+				      __func__);
+			}
+		}
+	}
+}
+
+/**
+ * Synchronous work request.  Requests work from the POW.
+ * This function does NOT wait for previous tag switches to complete,
+ * so the caller must ensure that there is not a pending tag switch.
+ *
+ * @param wait   When set, call stalls until work becomes available, or
+ *               times out. If not set, returns immediately.
+ *
+ * @return Returns the WQE pointer from POW. Returns NULL if no work was
+ * available.
+ */
+static inline cvmx_wqe_t *cvmx_pow_work_request_sync_nocheck(cvmx_pow_wait_t wait)
+{
+	cvmx_pow_load_addr_t ptr;
+	cvmx_pow_tag_load_resp_t result;
+
+	if (CVMX_ENABLE_POW_CHECKS)
+		__cvmx_pow_warn_if_pending_switch(__func__);
+
+	ptr.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		ptr.swork_78xx.node = cvmx_get_node_num();
+		ptr.swork_78xx.mem_region = CVMX_IO_SEG;
+		ptr.swork_78xx.is_io = 1;
+		ptr.swork_78xx.did = CVMX_OCT_DID_TAG_SWTAG;
+		ptr.swork_78xx.wait = wait;
+	} else {
+		ptr.swork.mem_region = CVMX_IO_SEG;
+		ptr.swork.is_io = 1;
+		ptr.swork.did = CVMX_OCT_DID_TAG_SWTAG;
+		ptr.swork.wait = wait;
+	}
+
+	result.u64 = csr_rd(ptr.u64);
+	if (result.s_work.no_work)
+		return NULL;
+	else
+		return (cvmx_wqe_t *)cvmx_phys_to_ptr(result.s_work.addr);
+}
+
+/**
+ * Synchronous work request.  Requests work from the POW.
+ * This function waits for any previous tag switch to complete before
+ * requesting the new work.
+ *
+ * @param wait   When set, call stalls until work becomes available, or
+ *               times out. If not set, returns immediately.
+ *
+ * @return Returns the WQE pointer from POW. Returns NULL if no work was
+ * available.
+ */
+static inline cvmx_wqe_t *cvmx_pow_work_request_sync(cvmx_pow_wait_t wait)
+{
+	/* Must not have a switch pending when requesting work */
+	cvmx_pow_tag_sw_wait();
+	return (cvmx_pow_work_request_sync_nocheck(wait));
+}
+
+/**
+ * Synchronous null_rd request.  Requests a switch out of NULL_NULL POW state.
+ * This function waits for any previous tag switch to complete before
+ * requesting the null_rd.
+ *
+ * @return Returns the POW state of type cvmx_pow_tag_type_t.
+ */
+static inline cvmx_pow_tag_type_t cvmx_pow_work_request_null_rd(void)
+{
+	cvmx_pow_load_addr_t ptr;
+	cvmx_pow_tag_load_resp_t result;
+
+	/* Must not have a switch pending when requesting work */
+	cvmx_pow_tag_sw_wait();
+
+	ptr.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		ptr.swork_78xx.mem_region = CVMX_IO_SEG;
+		ptr.swork_78xx.is_io = 1;
+		ptr.swork_78xx.did = CVMX_OCT_DID_TAG_NULL_RD;
+		ptr.swork_78xx.node = cvmx_get_node_num();
+	} else {
+		ptr.snull_rd.mem_region = CVMX_IO_SEG;
+		ptr.snull_rd.is_io = 1;
+		ptr.snull_rd.did = CVMX_OCT_DID_TAG_NULL_RD;
+	}
+	result.u64 = csr_rd(ptr.u64);
+	return (cvmx_pow_tag_type_t)result.s_null_rd.state;
+}
+
+/**
+ * Asynchronous work request.
+ * Work is requested from the POW unit, and should later be checked with
+ * function cvmx_pow_work_response_async.
+ * This function does NOT wait for previous tag switches to complete,
+ * so the caller must ensure that there is not a pending tag switch.
+ *
+ * @param scr_addr Scratch memory address that response will be returned to,
+ *     which is either a valid WQE, or a response with the invalid bit set.
+ *     Byte address, must be 8 byte aligned.
+ * @param wait 1 to cause response to wait for work to become available
+ *               (or timeout)
+ *             0 to cause response to return immediately
+ */
+static inline void cvmx_pow_work_request_async_nocheck(int scr_addr, cvmx_pow_wait_t wait)
+{
+	cvmx_pow_iobdma_store_t data;
+
+	if (CVMX_ENABLE_POW_CHECKS)
+		__cvmx_pow_warn_if_pending_switch(__func__);
+
+	/* scr_addr must be 8 byte aligned */
+	data.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		data.s_cn78xx.node = cvmx_get_node_num();
+		data.s_cn78xx.scraddr = scr_addr >> 3;
+		data.s_cn78xx.len = 1;
+		data.s_cn78xx.did = CVMX_OCT_DID_TAG_SWTAG;
+		data.s_cn78xx.wait = wait;
+	} else {
+		data.s.scraddr = scr_addr >> 3;
+		data.s.len = 1;
+		data.s.did = CVMX_OCT_DID_TAG_SWTAG;
+		data.s.wait = wait;
+	}
+	cvmx_send_single(data.u64);
+}
+
+/**
+ * Asynchronous work request.
+ * Work is requested from the POW unit, and should later be checked with
+ * function cvmx_pow_work_response_async.
+ * This function waits for any previous tag switch to complete before
+ * requesting the new work.
+ *
+ * @param scr_addr Scratch memory address that response will be returned to,
+ *     which is either a valid WQE, or a response with the invalid bit set.
+ *     Byte address, must be 8 byte aligned.
+ * @param wait 1 to cause response to wait for work to become available
+ *               (or timeout)
+ *             0 to cause response to return immediately
+ */
+static inline void cvmx_pow_work_request_async(int scr_addr, cvmx_pow_wait_t wait)
+{
+	/* Must not have a switch pending when requesting work */
+	cvmx_pow_tag_sw_wait();
+	cvmx_pow_work_request_async_nocheck(scr_addr, wait);
+}
+
+/**
+ * Gets result of asynchronous work request.  Performs a IOBDMA sync
+ * to wait for the response.
+ *
+ * @param scr_addr Scratch memory address to get result from
+ *                  Byte address, must be 8 byte aligned.
+ * @return Returns the WQE from the scratch register, or NULL if no work was
+ *         available.
+ */
+static inline cvmx_wqe_t *cvmx_pow_work_response_async(int scr_addr)
+{
+	cvmx_pow_tag_load_resp_t result;
+
+	CVMX_SYNCIOBDMA;
+	result.u64 = cvmx_scratch_read64(scr_addr);
+	if (result.s_work.no_work)
+		return NULL;
+	else
+		return (cvmx_wqe_t *)cvmx_phys_to_ptr(result.s_work.addr);
+}
+
+/**
+ * Checks if a work queue entry pointer returned by a work
+ * request is valid.  It may be invalid due to no work
+ * being available or due to a timeout.
+ *
+ * @param wqe_ptr pointer to a work queue entry returned by the POW
+ *
+ * @return 0 if pointer is valid
+ *         1 if invalid (no work was returned)
+ */
+static inline u64 cvmx_pow_work_invalid(cvmx_wqe_t *wqe_ptr)
+{
+	return (!wqe_ptr); /* FIXME: improve */
+}
+
+/**
+ * Starts a tag switch to the provided tag value and tag type.  Completion for
+ * the tag switch must be checked for separately.
+ * This function does NOT update the
+ * work queue entry in dram to match tag value and type, so the application must
+ * keep track of these if they are important to the application.
+ * This tag switch command must not be used for switches to NULL, as the tag
+ * switch pending bit will be set by the switch request, but never cleared by
+ * the hardware.
+ *
+ * NOTE: This should not be used when switching from a NULL tag.  Use
+ * cvmx_pow_tag_sw_full() instead.
+ *
+ * This function does no checks, so the caller must ensure that any previous tag
+ * switch has completed.
+ *
+ * @param tag      new tag value
+ * @param tag_type new tag type (ordered or atomic)
+ */
+static inline void cvmx_pow_tag_sw_nocheck(u32 tag, cvmx_pow_tag_type_t tag_type)
+{
+	union cvmx_pow_tag_req_addr ptr;
+	cvmx_pow_tag_req_t tag_req;
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		cvmx_pow_tag_info_t current_tag;
+
+		__cvmx_pow_warn_if_pending_switch(__func__);
+		current_tag = cvmx_pow_get_current_tag();
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL_NULL,
+			     "%s called with NULL_NULL tag\n", __func__);
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL,
+			     "%s called with NULL tag\n", __func__);
+		cvmx_warn_if((current_tag.tag_type == tag_type) && (current_tag.tag == tag),
+			     "%s called to perform a tag switch to the same tag\n", __func__);
+		cvmx_warn_if(
+			tag_type == CVMX_POW_TAG_TYPE_NULL,
+			"%s called to perform a tag switch to NULL. Use cvmx_pow_tag_sw_null() instead\n",
+			__func__);
+	}
+
+	/*
+	 * Note that WQE in DRAM is not updated here, as the POW does not read
+	 * from DRAM once the WQE is in flight.  See hardware manual for
+	 * complete details.
+	 * It is the application's responsibility to keep track of the
+	 * current tag value if that is important.
+	 */
+	tag_req.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		tag_req.s_cn78xx_other.op = CVMX_POW_TAG_OP_SWTAG;
+		tag_req.s_cn78xx_other.type = tag_type;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		tag_req.s_cn68xx_other.op = CVMX_POW_TAG_OP_SWTAG;
+		tag_req.s_cn68xx_other.tag = tag;
+		tag_req.s_cn68xx_other.type = tag_type;
+	} else {
+		tag_req.s_cn38xx.op = CVMX_POW_TAG_OP_SWTAG;
+		tag_req.s_cn38xx.tag = tag;
+		tag_req.s_cn38xx.type = tag_type;
+	}
+	ptr.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		ptr.s_cn78xx.mem_region = CVMX_IO_SEG;
+		ptr.s_cn78xx.is_io = 1;
+		ptr.s_cn78xx.did = CVMX_OCT_DID_TAG_SWTAG;
+		ptr.s_cn78xx.node = cvmx_get_node_num();
+		ptr.s_cn78xx.tag = tag;
+	} else {
+		ptr.s.mem_region = CVMX_IO_SEG;
+		ptr.s.is_io = 1;
+		ptr.s.did = CVMX_OCT_DID_TAG_SWTAG;
+	}
+	/* Once this store arrives at POW, it will attempt the switch
+	   software must wait for the switch to complete separately */
+	cvmx_write_io(ptr.u64, tag_req.u64);
+}
+
+/**
+ * Starts a tag switch to the provided tag value and tag type.  Completion for
+ * the tag switch must be checked for separately.
+ * This function does NOT update the
+ * work queue entry in dram to match tag value and type, so the application must
+ * keep track of these if they are important to the application.
+ * This tag switch command must not be used for switches to NULL, as the tag
+ * switch pending bit will be set by the switch request, but never cleared by
+ * the hardware.
+ *
+ * NOTE: This should not be used when switching from a NULL tag.  Use
+ * cvmx_pow_tag_sw_full() instead.
+ *
+ * This function waits for any previous tag switch to complete, and also
+ * displays an error on tag switches to NULL.
+ *
+ * @param tag      new tag value
+ * @param tag_type new tag type (ordered or atomic)
+ */
+static inline void cvmx_pow_tag_sw(u32 tag, cvmx_pow_tag_type_t tag_type)
+{
+	/*
+	 * Note that WQE in DRAM is not updated here, as the POW does not read
+	 * from DRAM once the WQE is in flight.  See hardware manual for
+	 * complete details. It is the application's responsibility to keep
+	 * track of the current tag value if that is important.
+	 */
+
+	/*
+	 * Ensure that there is not a pending tag switch, as a tag switch
+	 * cannot be started if a previous switch is still pending.
+	 */
+	cvmx_pow_tag_sw_wait();
+	cvmx_pow_tag_sw_nocheck(tag, tag_type);
+}
+
+/**
+ * Starts a tag switch to the provided tag value and tag type.  Completion for
+ * the tag switch must be checked for separately.
+ * This function does NOT update the
+ * work queue entry in dram to match tag value and type, so the application must
+ * keep track of these if they are important to the application.
+ * This tag switch command must not be used for switches to NULL, as the tag
+ * switch pending bit will be set by the switch request, but never cleared by
+ * the hardware.
+ *
+ * This function must be used for tag switches from NULL.
+ *
+ * This function does no checks, so the caller must ensure that any previous tag
+ * switch has completed.
+ *
+ * @param wqp      pointer to work queue entry to submit.  This entry is
+ *                 updated to match the other parameters
+ * @param tag      tag value to be assigned to work queue entry
+ * @param tag_type type of tag
+ * @param group    group value for the work queue entry.
+ */
+static inline void cvmx_pow_tag_sw_full_nocheck(cvmx_wqe_t *wqp, u32 tag,
+						cvmx_pow_tag_type_t tag_type, u64 group)
+{
+	union cvmx_pow_tag_req_addr ptr;
+	cvmx_pow_tag_req_t tag_req;
+	unsigned int node = cvmx_get_node_num();
+	u64 wqp_phys = cvmx_ptr_to_phys(wqp);
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		cvmx_pow_tag_info_t current_tag;
+
+		__cvmx_pow_warn_if_pending_switch(__func__);
+		current_tag = cvmx_pow_get_current_tag();
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL_NULL,
+			     "%s called with NULL_NULL tag\n", __func__);
+		cvmx_warn_if((current_tag.tag_type == tag_type) && (current_tag.tag == tag),
+			     "%s called to perform a tag switch to the same tag\n", __func__);
+		cvmx_warn_if(
+			tag_type == CVMX_POW_TAG_TYPE_NULL,
+			"%s called to perform a tag switch to NULL. Use cvmx_pow_tag_sw_null() instead\n",
+			__func__);
+		if ((wqp != cvmx_phys_to_ptr(0x80)) && cvmx_pow_get_current_wqp())
+			cvmx_warn_if(wqp != cvmx_pow_get_current_wqp(),
+				     "%s passed WQE(%p) doesn't match the address in the POW(%p)\n",
+				     __func__, wqp, cvmx_pow_get_current_wqp());
+	}
+
+	/*
+	 * Note that WQE in DRAM is not updated here, as the POW does not
+	 * read from DRAM once the WQE is in flight.  See hardware manual
+	 * for complete details. It is the application's responsibility to
+	 * keep track of the current tag value if that is important.
+	 */
+	tag_req.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		unsigned int xgrp;
+
+		if (wqp_phys != 0x80) {
+			/* If WQE is valid, use its XGRP:
+			 * WQE GRP is 10 bits, and is mapped
+			 * to legacy GRP + QoS, includes node number.
+			 */
+			xgrp = wqp->word1.cn78xx.grp;
+			/* Use XGRP[node] too */
+			node = xgrp >> 8;
+			/* Modify XGRP with legacy group # from arg */
+			xgrp &= ~0xf8;
+			xgrp |= 0xf8 & (group << 3);
+
+		} else {
+			/* If no WQE, build XGRP with QoS=0 and current node */
+			xgrp = group << 3;
+			xgrp |= node << 8;
+		}
+		tag_req.s_cn78xx_other.op = CVMX_POW_TAG_OP_SWTAG_FULL;
+		tag_req.s_cn78xx_other.type = tag_type;
+		tag_req.s_cn78xx_other.grp = xgrp;
+		tag_req.s_cn78xx_other.wqp = wqp_phys;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		tag_req.s_cn68xx_other.op = CVMX_POW_TAG_OP_SWTAG_FULL;
+		tag_req.s_cn68xx_other.tag = tag;
+		tag_req.s_cn68xx_other.type = tag_type;
+		tag_req.s_cn68xx_other.grp = group;
+	} else {
+		tag_req.s_cn38xx.op = CVMX_POW_TAG_OP_SWTAG_FULL;
+		tag_req.s_cn38xx.tag = tag;
+		tag_req.s_cn38xx.type = tag_type;
+		tag_req.s_cn38xx.grp = group;
+	}
+	ptr.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		ptr.s_cn78xx.mem_region = CVMX_IO_SEG;
+		ptr.s_cn78xx.is_io = 1;
+		ptr.s_cn78xx.did = CVMX_OCT_DID_TAG_SWTAG;
+		ptr.s_cn78xx.node = node;
+		ptr.s_cn78xx.tag = tag;
+	} else {
+		ptr.s.mem_region = CVMX_IO_SEG;
+		ptr.s.is_io = 1;
+		ptr.s.did = CVMX_OCT_DID_TAG_SWTAG;
+		ptr.s.addr = wqp_phys;
+	}
+	/* Once this store arrives at POW, it will attempt the switch
+	   software must wait for the switch to complete separately */
+	cvmx_write_io(ptr.u64, tag_req.u64);
+}
+
+/**
+ * Starts a tag switch to the provided tag value and tag type.
+ * Completion for the tag switch must be checked for separately.
+ * This function does NOT update the work queue entry in dram to match tag value
+ * and type, so the application must keep track of these if they are important
+ * to the application. This tag switch command must not be used for switches
+ * to NULL, as the tag switch pending bit will be set by the switch request,
+ * but never cleared by the hardware.
+ *
+ * This function must be used for tag switches from NULL.
+ *
+ * This function waits for any pending tag switches to complete
+ * before requesting the tag switch.
+ *
+ * @param wqp      Pointer to work queue entry to submit.
+ *     This entry is updated to match the other parameters
+ * @param tag      Tag value to be assigned to work queue entry
+ * @param tag_type Type of tag
+ * @param group    Group value for the work queue entry.
+ */
+static inline void cvmx_pow_tag_sw_full(cvmx_wqe_t *wqp, u32 tag, cvmx_pow_tag_type_t tag_type,
+					u64 group)
+{
+	/*
+	 * Ensure that there is not a pending tag switch, as a tag switch cannot
+	 * be started if a previous switch is still pending.
+	 */
+	cvmx_pow_tag_sw_wait();
+	cvmx_pow_tag_sw_full_nocheck(wqp, tag, tag_type, group);
+}
+
+/**
+ * Switch to a NULL tag, which ends any ordering or
+ * synchronization provided by the POW for the current
+ * work queue entry.  This operation completes immediately,
+ * so completion should not be waited for.
+ * This function does NOT wait for previous tag switches to complete,
+ * so the caller must ensure that any previous tag switches have completed.
+ */
+static inline void cvmx_pow_tag_sw_null_nocheck(void)
+{
+	union cvmx_pow_tag_req_addr ptr;
+	cvmx_pow_tag_req_t tag_req;
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		cvmx_pow_tag_info_t current_tag;
+
+		__cvmx_pow_warn_if_pending_switch(__func__);
+		current_tag = cvmx_pow_get_current_tag();
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL_NULL,
+			     "%s called with NULL_NULL tag\n", __func__);
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL,
+			     "%s called when we already have a NULL tag\n", __func__);
+	}
+	tag_req.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		tag_req.s_cn78xx_other.op = CVMX_POW_TAG_OP_SWTAG;
+		tag_req.s_cn78xx_other.type = CVMX_POW_TAG_TYPE_NULL;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		tag_req.s_cn68xx_other.op = CVMX_POW_TAG_OP_SWTAG;
+		tag_req.s_cn68xx_other.type = CVMX_POW_TAG_TYPE_NULL;
+	} else {
+		tag_req.s_cn38xx.op = CVMX_POW_TAG_OP_SWTAG;
+		tag_req.s_cn38xx.type = CVMX_POW_TAG_TYPE_NULL;
+	}
+	ptr.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		ptr.s_cn78xx.mem_region = CVMX_IO_SEG;
+		ptr.s_cn78xx.is_io = 1;
+		ptr.s_cn78xx.did = CVMX_OCT_DID_TAG_TAG1;
+		ptr.s_cn78xx.node = cvmx_get_node_num();
+	} else {
+		ptr.s.mem_region = CVMX_IO_SEG;
+		ptr.s.is_io = 1;
+		ptr.s.did = CVMX_OCT_DID_TAG_TAG1;
+	}
+	cvmx_write_io(ptr.u64, tag_req.u64);
+}
+
+/**
+ * Switch to a NULL tag, which ends any ordering or
+ * synchronization provided by the POW for the current
+ * work queue entry.  This operation completes immediately,
+ * so completion should not be waited for.
+ * This function waits for any pending tag switches to complete
+ * before requesting the switch to NULL.
+ */
+static inline void cvmx_pow_tag_sw_null(void)
+{
+	/*
+	 * Ensure that there is not a pending tag switch, as a tag switch cannot
+	 * be started if a previous switch is still pending.
+	 */
+	cvmx_pow_tag_sw_wait();
+	cvmx_pow_tag_sw_null_nocheck();
+}
+
+/**
+ * Submits work to an input queue.
+ * This function updates the work queue entry in DRAM to match the arguments given.
+ * Note that the tag provided is for the work queue entry submitted, and
+ * is unrelated to the tag that the core currently holds.
+ *
+ * @param wqp      pointer to work queue entry to submit.
+ *                 This entry is updated to match the other parameters
+ * @param tag      tag value to be assigned to work queue entry
+ * @param tag_type type of tag
+ * @param qos      Input queue to add to.
+ * @param grp      group value for the work queue entry.
+ */
+static inline void cvmx_pow_work_submit(cvmx_wqe_t *wqp, u32 tag, cvmx_pow_tag_type_t tag_type,
+					u64 qos, u64 grp)
+{
+	union cvmx_pow_tag_req_addr ptr;
+	cvmx_pow_tag_req_t tag_req;
+
+	tag_req.u64 = 0;
+	ptr.u64 = 0;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		unsigned int node = cvmx_get_node_num();
+		unsigned int xgrp;
+
+		xgrp = (grp & 0x1f) << 3;
+		xgrp |= (qos & 7);
+		xgrp |= 0x300 & (node << 8);
+
+		wqp->word1.cn78xx.rsvd_0 = 0;
+		wqp->word1.cn78xx.rsvd_1 = 0;
+		wqp->word1.cn78xx.tag = tag;
+		wqp->word1.cn78xx.tag_type = tag_type;
+		wqp->word1.cn78xx.grp = xgrp;
+		CVMX_SYNCWS;
+
+		tag_req.s_cn78xx_other.op = CVMX_POW_TAG_OP_ADDWQ;
+		tag_req.s_cn78xx_other.type = tag_type;
+		tag_req.s_cn78xx_other.wqp = cvmx_ptr_to_phys(wqp);
+		tag_req.s_cn78xx_other.grp = xgrp;
+
+		ptr.s_cn78xx.did = 0x66; // CVMX_OCT_DID_TAG_TAG6;
+		ptr.s_cn78xx.mem_region = CVMX_IO_SEG;
+		ptr.s_cn78xx.is_io = 1;
+		ptr.s_cn78xx.node = node;
+		ptr.s_cn78xx.tag = tag;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		/* Reset all reserved bits */
+		wqp->word1.cn68xx.zero_0 = 0;
+		wqp->word1.cn68xx.zero_1 = 0;
+		wqp->word1.cn68xx.zero_2 = 0;
+		wqp->word1.cn68xx.qos = qos;
+		wqp->word1.cn68xx.grp = grp;
+
+		wqp->word1.tag = tag;
+		wqp->word1.tag_type = tag_type;
+
+		tag_req.s_cn68xx_add.op = CVMX_POW_TAG_OP_ADDWQ;
+		tag_req.s_cn68xx_add.type = tag_type;
+		tag_req.s_cn68xx_add.tag = tag;
+		tag_req.s_cn68xx_add.qos = qos;
+		tag_req.s_cn68xx_add.grp = grp;
+
+		ptr.s.mem_region = CVMX_IO_SEG;
+		ptr.s.is_io = 1;
+		ptr.s.did = CVMX_OCT_DID_TAG_TAG1;
+		ptr.s.addr = cvmx_ptr_to_phys(wqp);
+	} else {
+		/* Reset all reserved bits */
+		wqp->word1.cn38xx.zero_2 = 0;
+		wqp->word1.cn38xx.qos = qos;
+		wqp->word1.cn38xx.grp = grp;
+
+		wqp->word1.tag = tag;
+		wqp->word1.tag_type = tag_type;
+
+		tag_req.s_cn38xx.op = CVMX_POW_TAG_OP_ADDWQ;
+		tag_req.s_cn38xx.type = tag_type;
+		tag_req.s_cn38xx.tag = tag;
+		tag_req.s_cn38xx.qos = qos;
+		tag_req.s_cn38xx.grp = grp;
+
+		ptr.s.mem_region = CVMX_IO_SEG;
+		ptr.s.is_io = 1;
+		ptr.s.did = CVMX_OCT_DID_TAG_TAG1;
+		ptr.s.addr = cvmx_ptr_to_phys(wqp);
+	}
+	/* SYNC write to memory before the work submit.
+	 * This is necessary as POW may read values from DRAM at this time */
+	CVMX_SYNCWS;
+	cvmx_write_io(ptr.u64, tag_req.u64);
+}
+
+/**
+ * This function sets the group mask for a core.  The group mask
+ * indicates which groups each core will accept work from. There are
+ * 16 groups.
+ *
+ * @param core_num   core to apply mask to
+ * @param mask   Group mask, one bit for up to 64 groups.
+ *               Each 1 bit in the mask enables the core to accept work from
+ *               the corresponding group.
+ *               The CN68XX supports 64 groups, earlier models only support
+ *               16 groups.
+ *
+ * The CN78XX in backwards compatibility mode allows up to 32 groups,
+ * so the 'mask' argument has one bit for every of the legacy
+ * groups, and a '1' in the mask causes a total of 8 groups
+ * which share the legacy group numbher and 8 qos levels,
+ * to be enabled for the calling processor core.
+ * A '0' in the mask will disable the current core
+ * from receiving work from the associated group.
+ */
+static inline void cvmx_pow_set_group_mask(u64 core_num, u64 mask)
+{
+	u64 valid_mask;
+	int num_groups = cvmx_pow_num_groups();
+
+	if (num_groups >= 64)
+		valid_mask = ~0ull;
+	else
+		valid_mask = (1ull << num_groups) - 1;
+
+	if ((mask & valid_mask) == 0) {
+		printf("ERROR: %s empty group mask disables work on core# %llu, ignored.\n",
+		       __func__, (unsigned long long)core_num);
+		return;
+	}
+	cvmx_warn_if(mask & (~valid_mask), "%s group number range exceeded: %#llx\n", __func__,
+		     (unsigned long long)mask);
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		unsigned int mask_set;
+		cvmx_sso_ppx_sx_grpmskx_t grp_msk;
+		unsigned int core, node;
+		unsigned int rix;  /* Register index */
+		unsigned int grp;  /* Legacy group # */
+		unsigned int bit;  /* bit index */
+		unsigned int xgrp; /* native group # */
+
+		node = cvmx_coremask_core_to_node(core_num);
+		core = cvmx_coremask_core_on_node(core_num);
+
+		/* 78xx: 256 groups divided into 4 X 64 bit registers */
+		/* 73xx: 64 groups are in one register */
+		for (rix = 0; rix < (cvmx_sso_num_xgrp() >> 6); rix++) {
+			grp_msk.u64 = 0;
+			for (bit = 0; bit < 64; bit++) {
+				/* 8-bit native XGRP number */
+				xgrp = (rix << 6) | bit;
+				/* Legacy 5-bit group number */
+				grp = (xgrp >> 3) & 0x1f;
+				/* Inspect legacy mask by legacy group */
+				if (mask & (1ull << grp))
+					grp_msk.s.grp_msk |= 1ull << bit;
+				/* Pre-set to all 0's */
+			}
+			for (mask_set = 0; mask_set < cvmx_sso_num_maskset(); mask_set++) {
+				csr_wr_node(node, CVMX_SSO_PPX_SX_GRPMSKX(core, mask_set, rix),
+					    grp_msk.u64);
+			}
+		}
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		cvmx_sso_ppx_grp_msk_t grp_msk;
+
+		grp_msk.s.grp_msk = mask;
+		csr_wr(CVMX_SSO_PPX_GRP_MSK(core_num), grp_msk.u64);
+	} else {
+		cvmx_pow_pp_grp_mskx_t grp_msk;
+
+		grp_msk.u64 = csr_rd(CVMX_POW_PP_GRP_MSKX(core_num));
+		grp_msk.s.grp_msk = mask & 0xffff;
+		csr_wr(CVMX_POW_PP_GRP_MSKX(core_num), grp_msk.u64);
+	}
+}
+
+/**
+ * This function gets the group mask for a core.  The group mask
+ * indicates which groups each core will accept work from.
+ *
+ * @param core_num   core to apply mask to
+ * @return	Group mask, one bit for up to 64 groups.
+ *               Each 1 bit in the mask enables the core to accept work from
+ *               the corresponding group.
+ *               The CN68XX supports 64 groups, earlier models only support
+ *               16 groups.
+ *
+ * The CN78XX in backwards compatibility mode allows up to 32 groups,
+ * so the 'mask' argument has one bit for every of the legacy
+ * groups, and a '1' in the mask causes a total of 8 groups
+ * which share the legacy group numbher and 8 qos levels,
+ * to be enabled for the calling processor core.
+ * A '0' in the mask will disable the current core
+ * from receiving work from the associated group.
+ */
+static inline u64 cvmx_pow_get_group_mask(u64 core_num)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_sso_ppx_sx_grpmskx_t grp_msk;
+		unsigned int core, node, i;
+		int rix; /* Register index */
+		u64 mask = 0;
+
+		node = cvmx_coremask_core_to_node(core_num);
+		core = cvmx_coremask_core_on_node(core_num);
+
+		/* 78xx: 256 groups divided into 4 X 64 bit registers */
+		/* 73xx: 64 groups are in one register */
+		for (rix = (cvmx_sso_num_xgrp() >> 6) - 1; rix >= 0; rix--) {
+			/* read only mask_set=0 (both 'set' was written same) */
+			grp_msk.u64 = csr_rd_node(node, CVMX_SSO_PPX_SX_GRPMSKX(core, 0, rix));
+			/* ASSUME: (this is how mask bits got written) */
+			/* grp_mask[7:0]: all bits 0..7 are same */
+			/* grp_mask[15:8]: all bits 8..15 are same, etc */
+			/* DO: mask[7:0] = grp_mask.u64[56,48,40,32,24,16,8,0] */
+			for (i = 0; i < 8; i++)
+				mask |= (grp_msk.u64 & ((u64)1 << (i * 8))) >> (7 * i);
+			/* we collected 8 MSBs in mask[7:0], <<=8 and continue */
+			if (cvmx_likely(rix != 0))
+				mask <<= 8;
+		}
+		return mask & 0xFFFFFFFF;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		cvmx_sso_ppx_grp_msk_t grp_msk;
+
+		grp_msk.u64 = csr_rd(CVMX_SSO_PPX_GRP_MSK(core_num));
+		return grp_msk.u64;
+	} else {
+		cvmx_pow_pp_grp_mskx_t grp_msk;
+
+		grp_msk.u64 = csr_rd(CVMX_POW_PP_GRP_MSKX(core_num));
+		return grp_msk.u64 & 0xffff;
+	}
+}
+
+/*
+ * Returns 0 if 78xx(73xx,75xx) is not programmed in legacy compatible mode
+ * Returns 1 if 78xx(73xx,75xx) is programmed in legacy compatible mode
+ * Returns 1 if octeon model is not 78xx(73xx,75xx)
+ */
+static inline u64 cvmx_pow_is_legacy78mode(u64 core_num)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_sso_ppx_sx_grpmskx_t grp_msk0, grp_msk1;
+		unsigned int core, node, i;
+		int rix; /* Register index */
+		u64 mask = 0;
+
+		node = cvmx_coremask_core_to_node(core_num);
+		core = cvmx_coremask_core_on_node(core_num);
+
+		/* 78xx: 256 groups divided into 4 X 64 bit registers */
+		/* 73xx: 64 groups are in one register */
+		/* 1) in order for the 78_SSO to be in legacy compatible mode
+		 * the both mask_sets should be programmed the same */
+		for (rix = (cvmx_sso_num_xgrp() >> 6) - 1; rix >= 0; rix--) {
+			/* read mask_set=0 (both 'set' was written same) */
+			grp_msk0.u64 = csr_rd_node(node, CVMX_SSO_PPX_SX_GRPMSKX(core, 0, rix));
+			grp_msk1.u64 = csr_rd_node(node, CVMX_SSO_PPX_SX_GRPMSKX(core, 1, rix));
+			if (grp_msk0.u64 != grp_msk1.u64) {
+				return 0;
+			}
+			/* (this is how mask bits should be written) */
+			/* grp_mask[7:0]: all bits 0..7 are same */
+			/* grp_mask[15:8]: all bits 8..15 are same, etc */
+			/* 2) in order for the 78_SSO to be in legacy compatible
+			 * mode above should be true (test only mask_set=0 */
+			for (i = 0; i < 8; i++) {
+				mask = (grp_msk0.u64 >> (i << 3)) & 0xFF;
+				if (!(mask == 0 || mask == 0xFF)) {
+					return 0;
+				}
+			}
+		}
+		/* if we come here, the 78_SSO is in legacy compatible mode */
+	}
+	return 1; /* the SSO/POW is in legacy (or compatible) mode */
+}
+
+/**
+ * This function sets POW static priorities for a core. Each input queue has
+ * an associated priority value.
+ *
+ * @param core_num   core to apply priorities to
+ * @param priority   Vector of 8 priorities, one per POW Input Queue (0-7).
+ *                   Highest priority is 0 and lowest is 7. A priority value
+ *                   of 0xF instructs POW to skip the Input Queue when
+ *                   scheduling to this specific core.
+ *                   NOTE: priorities should not have gaps in values, meaning
+ *                         {0,1,1,1,1,1,1,1} is a valid configuration while
+ *                         {0,2,2,2,2,2,2,2} is not.
+ */
+static inline void cvmx_pow_set_priority(u64 core_num, const u8 priority[])
+{
+	/* Detect gaps between priorities and flag error */
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		int i;
+		u32 prio_mask = 0;
+
+		for (i = 0; i < 8; i++)
+			if (priority[i] != 0xF)
+				prio_mask |= 1 << priority[i];
+
+		if (prio_mask ^ ((1 << cvmx_pop(prio_mask)) - 1)) {
+			debug("ERROR: POW static priorities should be contiguous (0x%llx)\n",
+			      (unsigned long long)prio_mask);
+			return;
+		}
+	}
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		unsigned int group;
+		unsigned int node = cvmx_get_node_num();
+		cvmx_sso_grpx_pri_t grp_pri;
+
+		/*grp_pri.s.weight = 0x3f; these will be anyway overwritten */
+		/*grp_pri.s.affinity = 0xf; by the next csr_rd_node(..), */
+
+		for (group = 0; group < cvmx_sso_num_xgrp(); group++) {
+			grp_pri.u64 = csr_rd_node(node, CVMX_SSO_GRPX_PRI(group));
+			grp_pri.s.pri = priority[group & 0x7];
+			csr_wr_node(node, CVMX_SSO_GRPX_PRI(group), grp_pri.u64);
+		}
+
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		cvmx_sso_ppx_qos_pri_t qos_pri;
+
+		qos_pri.u64 = csr_rd(CVMX_SSO_PPX_QOS_PRI(core_num));
+		qos_pri.s.qos0_pri = priority[0];
+		qos_pri.s.qos1_pri = priority[1];
+		qos_pri.s.qos2_pri = priority[2];
+		qos_pri.s.qos3_pri = priority[3];
+		qos_pri.s.qos4_pri = priority[4];
+		qos_pri.s.qos5_pri = priority[5];
+		qos_pri.s.qos6_pri = priority[6];
+		qos_pri.s.qos7_pri = priority[7];
+		csr_wr(CVMX_SSO_PPX_QOS_PRI(core_num), qos_pri.u64);
+	} else {
+		/* POW priorities on CN5xxx .. CN66XX */
+		cvmx_pow_pp_grp_mskx_t grp_msk;
+
+		grp_msk.u64 = csr_rd(CVMX_POW_PP_GRP_MSKX(core_num));
+		grp_msk.s.qos0_pri = priority[0];
+		grp_msk.s.qos1_pri = priority[1];
+		grp_msk.s.qos2_pri = priority[2];
+		grp_msk.s.qos3_pri = priority[3];
+		grp_msk.s.qos4_pri = priority[4];
+		grp_msk.s.qos5_pri = priority[5];
+		grp_msk.s.qos6_pri = priority[6];
+		grp_msk.s.qos7_pri = priority[7];
+
+		csr_wr(CVMX_POW_PP_GRP_MSKX(core_num), grp_msk.u64);
+	}
+}
+
+/**
+ * This function gets POW static priorities for a core. Each input queue has
+ * an associated priority value.
+ *
+ * @param[in]  core_num core to get priorities for
+ * @param[out] priority Pointer to u8[] where to return priorities
+ *			Vector of 8 priorities, one per POW Input Queue (0-7).
+ *			Highest priority is 0 and lowest is 7. A priority value
+ *			of 0xF instructs POW to skip the Input Queue when
+ *			scheduling to this specific core.
+ *                   NOTE: priorities should not have gaps in values, meaning
+ *                         {0,1,1,1,1,1,1,1} is a valid configuration while
+ *                         {0,2,2,2,2,2,2,2} is not.
+ */
+static inline void cvmx_pow_get_priority(u64 core_num, u8 priority[])
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		unsigned int group;
+		unsigned int node = cvmx_get_node_num();
+		cvmx_sso_grpx_pri_t grp_pri;
+
+		/* read priority only from the first 8 groups */
+		/* the next groups are programmed the same (periodicaly) */
+		for (group = 0; group < 8 /*cvmx_sso_num_xgrp() */; group++) {
+			grp_pri.u64 = csr_rd_node(node, CVMX_SSO_GRPX_PRI(group));
+			priority[group /* & 0x7 */] = grp_pri.s.pri;
+		}
+
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		cvmx_sso_ppx_qos_pri_t qos_pri;
+
+		qos_pri.u64 = csr_rd(CVMX_SSO_PPX_QOS_PRI(core_num));
+		priority[0] = qos_pri.s.qos0_pri;
+		priority[1] = qos_pri.s.qos1_pri;
+		priority[2] = qos_pri.s.qos2_pri;
+		priority[3] = qos_pri.s.qos3_pri;
+		priority[4] = qos_pri.s.qos4_pri;
+		priority[5] = qos_pri.s.qos5_pri;
+		priority[6] = qos_pri.s.qos6_pri;
+		priority[7] = qos_pri.s.qos7_pri;
+	} else {
+		/* POW priorities on CN5xxx .. CN66XX */
+		cvmx_pow_pp_grp_mskx_t grp_msk;
+
+		grp_msk.u64 = csr_rd(CVMX_POW_PP_GRP_MSKX(core_num));
+		priority[0] = grp_msk.s.qos0_pri;
+		priority[1] = grp_msk.s.qos1_pri;
+		priority[2] = grp_msk.s.qos2_pri;
+		priority[3] = grp_msk.s.qos3_pri;
+		priority[4] = grp_msk.s.qos4_pri;
+		priority[5] = grp_msk.s.qos5_pri;
+		priority[6] = grp_msk.s.qos6_pri;
+		priority[7] = grp_msk.s.qos7_pri;
+	}
+
+	/* Detect gaps between priorities and flag error - (optional) */
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		int i;
+		u32 prio_mask = 0;
+
+		for (i = 0; i < 8; i++)
+			if (priority[i] != 0xF)
+				prio_mask |= 1 << priority[i];
+
+		if (prio_mask ^ ((1 << cvmx_pop(prio_mask)) - 1)) {
+			debug("ERROR:%s: POW static priorities should be contiguous (0x%llx)\n",
+			      __func__, (unsigned long long)prio_mask);
+			return;
+		}
+	}
+}
+
+static inline void cvmx_sso_get_group_priority(int node, cvmx_xgrp_t xgrp, int *priority,
+					       int *weight, int *affinity)
+{
+	cvmx_sso_grpx_pri_t grp_pri;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		debug("ERROR: %s is not supported on this chip)\n", __func__);
+		return;
+	}
+
+	grp_pri.u64 = csr_rd_node(node, CVMX_SSO_GRPX_PRI(xgrp.xgrp));
+	*affinity = grp_pri.s.affinity;
+	*priority = grp_pri.s.pri;
+	*weight = grp_pri.s.weight;
+}
+
+/**
+ * Performs a tag switch and then an immediate deschedule. This completes
+ * immediately, so completion must not be waited for.  This function does NOT
+ * update the wqe in DRAM to match arguments.
+ *
+ * This function does NOT wait for any prior tag switches to complete, so the
+ * calling code must do this.
+ *
+ * Note the following CAVEAT of the Octeon HW behavior when
+ * re-scheduling DE-SCHEDULEd items whose (next) state is
+ * ORDERED:
+ *   - If there are no switches pending at the time that the
+ *     HW executes the de-schedule, the HW will only re-schedule
+ *     the head of the FIFO associated with the given tag. This
+ *     means that in many respects, the HW treats this ORDERED
+ *     tag as an ATOMIC tag. Note that in the SWTAG_DESCH
+ *     case (to an ORDERED tag), the HW will do the switch
+ *     before the deschedule whenever it is possible to do
+ *     the switch immediately, so it may often look like
+ *     this case.
+ *   - If there is a pending switch to ORDERED at the time
+ *     the HW executes the de-schedule, the HW will perform
+ *     the switch at the time it re-schedules, and will be
+ *     able to reschedule any/all of the entries with the
+ *     same tag.
+ * Due to this behavior, the RECOMMENDATION to software is
+ * that they have a (next) state of ATOMIC when they
+ * DE-SCHEDULE. If an ORDERED tag is what was really desired,
+ * SW can choose to immediately switch to an ORDERED tag
+ * after the work (that has an ATOMIC tag) is re-scheduled.
+ * Note that since there are never any tag switches pending
+ * when the HW re-schedules, this switch can be IMMEDIATE upon
+ * the reception of the pointer during the re-schedule.
+ *
+ * @param tag      New tag value
+ * @param tag_type New tag type
+ * @param group    New group value
+ * @param no_sched Control whether this work queue entry will be rescheduled.
+ *                 - 1 : don't schedule this work
+ *                 - 0 : allow this work to be scheduled.
+ */
+static inline void cvmx_pow_tag_sw_desched_nocheck(u32 tag, cvmx_pow_tag_type_t tag_type, u64 group,
+						   u64 no_sched)
+{
+	union cvmx_pow_tag_req_addr ptr;
+	cvmx_pow_tag_req_t tag_req;
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		cvmx_pow_tag_info_t current_tag;
+
+		__cvmx_pow_warn_if_pending_switch(__func__);
+		current_tag = cvmx_pow_get_current_tag();
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL_NULL,
+			     "%s called with NULL_NULL tag\n", __func__);
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL,
+			     "%s called with NULL tag. Deschedule not allowed from NULL state\n",
+			     __func__);
+		cvmx_warn_if((current_tag.tag_type != CVMX_POW_TAG_TYPE_ATOMIC) &&
+			     (tag_type != CVMX_POW_TAG_TYPE_ATOMIC),
+			     "%s called where neither the before or after tag is ATOMIC\n",
+			     __func__);
+	}
+	tag_req.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_t *wqp = cvmx_pow_get_current_wqp();
+
+		if (!wqp) {
+			debug("ERROR: Failed to get WQE, %s\n", __func__);
+			return;
+		}
+		group &= 0x1f;
+		wqp->word1.cn78xx.tag = tag;
+		wqp->word1.cn78xx.tag_type = tag_type;
+		wqp->word1.cn78xx.grp = group << 3;
+		CVMX_SYNCWS;
+		tag_req.s_cn78xx_other.op = CVMX_POW_TAG_OP_SWTAG_DESCH;
+		tag_req.s_cn78xx_other.type = tag_type;
+		tag_req.s_cn78xx_other.grp = group << 3;
+		tag_req.s_cn78xx_other.no_sched = no_sched;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		group &= 0x3f;
+		tag_req.s_cn68xx_other.op = CVMX_POW_TAG_OP_SWTAG_DESCH;
+		tag_req.s_cn68xx_other.tag = tag;
+		tag_req.s_cn68xx_other.type = tag_type;
+		tag_req.s_cn68xx_other.grp = group;
+		tag_req.s_cn68xx_other.no_sched = no_sched;
+	} else {
+		group &= 0x0f;
+		tag_req.s_cn38xx.op = CVMX_POW_TAG_OP_SWTAG_DESCH;
+		tag_req.s_cn38xx.tag = tag;
+		tag_req.s_cn38xx.type = tag_type;
+		tag_req.s_cn38xx.grp = group;
+		tag_req.s_cn38xx.no_sched = no_sched;
+	}
+	ptr.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		ptr.s.mem_region = CVMX_IO_SEG;
+		ptr.s.is_io = 1;
+		ptr.s.did = CVMX_OCT_DID_TAG_TAG3;
+		ptr.s_cn78xx.node = cvmx_get_node_num();
+		ptr.s_cn78xx.tag = tag;
+	} else {
+		ptr.s.mem_region = CVMX_IO_SEG;
+		ptr.s.is_io = 1;
+		ptr.s.did = CVMX_OCT_DID_TAG_TAG3;
+	}
+	cvmx_write_io(ptr.u64, tag_req.u64);
+}
+
+/**
+ * Performs a tag switch and then an immediate deschedule. This completes
+ * immediately, so completion must not be waited for.  This function does NOT
+ * update the wqe in DRAM to match arguments.
+ *
+ * This function waits for any prior tag switches to complete, so the
+ * calling code may call this function with a pending tag switch.
+ *
+ * Note the following CAVEAT of the Octeon HW behavior when
+ * re-scheduling DE-SCHEDULEd items whose (next) state is
+ * ORDERED:
+ *   - If there are no switches pending at the time that the
+ *     HW executes the de-schedule, the HW will only re-schedule
+ *     the head of the FIFO associated with the given tag. This
+ *     means that in many respects, the HW treats this ORDERED
+ *     tag as an ATOMIC tag. Note that in the SWTAG_DESCH
+ *     case (to an ORDERED tag), the HW will do the switch
+ *     before the deschedule whenever it is possible to do
+ *     the switch immediately, so it may often look like
+ *     this case.
+ *   - If there is a pending switch to ORDERED at the time
+ *     the HW executes the de-schedule, the HW will perform
+ *     the switch at the time it re-schedules, and will be
+ *     able to reschedule any/all of the entries with the
+ *     same tag.
+ * Due to this behavior, the RECOMMENDATION to software is
+ * that they have a (next) state of ATOMIC when they
+ * DE-SCHEDULE. If an ORDERED tag is what was really desired,
+ * SW can choose to immediately switch to an ORDERED tag
+ * after the work (that has an ATOMIC tag) is re-scheduled.
+ * Note that since there are never any tag switches pending
+ * when the HW re-schedules, this switch can be IMMEDIATE upon
+ * the reception of the pointer during the re-schedule.
+ *
+ * @param tag      New tag value
+ * @param tag_type New tag type
+ * @param group    New group value
+ * @param no_sched Control whether this work queue entry will be rescheduled.
+ *                 - 1 : don't schedule this work
+ *                 - 0 : allow this work to be scheduled.
+ */
+static inline void cvmx_pow_tag_sw_desched(u32 tag, cvmx_pow_tag_type_t tag_type, u64 group,
+					   u64 no_sched)
+{
+	/* Need to make sure any writes to the work queue entry are complete */
+	CVMX_SYNCWS;
+	/* Ensure that there is not a pending tag switch, as a tag switch cannot be started
+	 * if a previous switch is still pending.  */
+	cvmx_pow_tag_sw_wait();
+	cvmx_pow_tag_sw_desched_nocheck(tag, tag_type, group, no_sched);
+}
+
+/**
+ * Descchedules the current work queue entry.
+ *
+ * @param no_sched no schedule flag value to be set on the work queue entry.
+ *     If this is set the entry will not be rescheduled.
+ */
+static inline void cvmx_pow_desched(u64 no_sched)
+{
+	union cvmx_pow_tag_req_addr ptr;
+	cvmx_pow_tag_req_t tag_req;
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		cvmx_pow_tag_info_t current_tag;
+
+		__cvmx_pow_warn_if_pending_switch(__func__);
+		current_tag = cvmx_pow_get_current_tag();
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL_NULL,
+			     "%s called with NULL_NULL tag\n", __func__);
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL,
+			     "%s called with NULL tag. Deschedule not expected from NULL state\n",
+			     __func__);
+	}
+	/* Need to make sure any writes to the work queue entry are complete */
+	CVMX_SYNCWS;
+
+	tag_req.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		tag_req.s_cn78xx_other.op = CVMX_POW_TAG_OP_DESCH;
+		tag_req.s_cn78xx_other.no_sched = no_sched;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		tag_req.s_cn68xx_other.op = CVMX_POW_TAG_OP_DESCH;
+		tag_req.s_cn68xx_other.no_sched = no_sched;
+	} else {
+		tag_req.s_cn38xx.op = CVMX_POW_TAG_OP_DESCH;
+		tag_req.s_cn38xx.no_sched = no_sched;
+	}
+	ptr.u64 = 0;
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		ptr.s_cn78xx.mem_region = CVMX_IO_SEG;
+		ptr.s_cn78xx.is_io = 1;
+		ptr.s_cn78xx.did = CVMX_OCT_DID_TAG_TAG3;
+		ptr.s_cn78xx.node = cvmx_get_node_num();
+	} else {
+		ptr.s.mem_region = CVMX_IO_SEG;
+		ptr.s.is_io = 1;
+		ptr.s.did = CVMX_OCT_DID_TAG_TAG3;
+	}
+	cvmx_write_io(ptr.u64, tag_req.u64);
+}
+
+/******************************************************************************/
+/* OCTEON3-specific functions.                                                */
+/******************************************************************************/
+/**
+ * This function sets the the affinity of group to the cores in 78xx.
+ * It sets up all the cores in core_mask to accept work from the specified group.
+ *
+ * @param xgrp	Group to accept work from, 0 - 255.
+ * @param core_mask	Mask of all the cores which will accept work from this group
+ * @param mask_set	Every core has set of 2 masks which can be set to accept work
+ *     from 256 groups. At the time of get_work, cores can choose which mask_set
+ *     to get work from. 'mask_set' values range from 0 to 3, where	each of the
+ *     two bits represents a mask set. Cores will be added to the mask set with
+ *     corresponding bit set, and removed from the mask set with corresponding
+ *     bit clear.
+ * Note: cores can only accept work from SSO groups on the same node,
+ * so the node number for the group is derived from the core number.
+ */
+static inline void cvmx_sso_set_group_core_affinity(cvmx_xgrp_t xgrp,
+						    const struct cvmx_coremask *core_mask,
+						    u8 mask_set)
+{
+	cvmx_sso_ppx_sx_grpmskx_t grp_msk;
+	int core;
+	int grp_index = xgrp.xgrp >> 6;
+	int bit_pos = xgrp.xgrp % 64;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		debug("ERROR: %s is not supported on this chip)\n", __func__);
+		return;
+	}
+	cvmx_coremask_for_each_core(core, core_mask)
+	{
+		unsigned int node, ncore;
+		u64 reg_addr;
+
+		node = cvmx_coremask_core_to_node(core);
+		ncore = cvmx_coremask_core_on_node(core);
+
+		reg_addr = CVMX_SSO_PPX_SX_GRPMSKX(ncore, 0, grp_index);
+		grp_msk.u64 = csr_rd_node(node, reg_addr);
+
+		if (mask_set & 1)
+			grp_msk.s.grp_msk |= (1ull << bit_pos);
+		else
+			grp_msk.s.grp_msk &= ~(1ull << bit_pos);
+
+		csr_wr_node(node, reg_addr, grp_msk.u64);
+
+		reg_addr = CVMX_SSO_PPX_SX_GRPMSKX(ncore, 1, grp_index);
+		grp_msk.u64 = csr_rd_node(node, reg_addr);
+
+		if (mask_set & 2)
+			grp_msk.s.grp_msk |= (1ull << bit_pos);
+		else
+			grp_msk.s.grp_msk &= ~(1ull << bit_pos);
+
+		csr_wr_node(node, reg_addr, grp_msk.u64);
+	}
+}
+
+/**
+ * This function sets the priority and group affinity arbitration for each group.
+ *
+ * @param node		Node number
+ * @param xgrp	Group 0 - 255 to apply mask parameters to
+ * @param priority	Priority of the group relative to other groups
+ *     0x0 - highest priority
+ *     0x7 - lowest priority
+ * @param weight	Cross-group arbitration weight to apply to this group.
+ *     valid values are 1-63
+ *     h/w default is 0x3f
+ * @param affinity	Processor affinity arbitration weight to apply to this group.
+ *     If zero, affinity is disabled.
+ *     valid values are 0-15
+ *     h/w default which is 0xf.
+ * @param modify_mask   mask of the parameters which needs to be modified.
+ *     enum cvmx_sso_group_modify_mask
+ *     to modify only priority -- set bit0
+ *     to modify only weight   -- set bit1
+ *     to modify only affinity -- set bit2
+ */
+static inline void cvmx_sso_set_group_priority(int node, cvmx_xgrp_t xgrp, int priority, int weight,
+					       int affinity,
+					       enum cvmx_sso_group_modify_mask modify_mask)
+{
+	cvmx_sso_grpx_pri_t grp_pri;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		debug("ERROR: %s is not supported on this chip)\n", __func__);
+		return;
+	}
+	if (weight <= 0)
+		weight = 0x3f; /* Force HW default when out of range */
+
+	grp_pri.u64 = csr_rd_node(node, CVMX_SSO_GRPX_PRI(xgrp.xgrp));
+	if (grp_pri.s.weight == 0)
+		grp_pri.s.weight = 0x3f;
+	if (modify_mask & CVMX_SSO_MODIFY_GROUP_PRIORITY)
+		grp_pri.s.pri = priority;
+	if (modify_mask & CVMX_SSO_MODIFY_GROUP_WEIGHT)
+		grp_pri.s.weight = weight;
+	if (modify_mask & CVMX_SSO_MODIFY_GROUP_AFFINITY)
+		grp_pri.s.affinity = affinity;
+	csr_wr_node(node, CVMX_SSO_GRPX_PRI(xgrp.xgrp), grp_pri.u64);
+}
+
+/**
+ * Asynchronous work request.
+ * Only works on CN78XX style SSO.
+ *
+ * Work is requested from the SSO unit, and should later be checked with
+ * function cvmx_pow_work_response_async.
+ * This function does NOT wait for previous tag switches to complete,
+ * so the caller must ensure that there is not a pending tag switch.
+ *
+ * @param scr_addr Scratch memory address that response will be returned to,
+ *     which is either a valid WQE, or a response with the invalid bit set.
+ *     Byte address, must be 8 byte aligned.
+ * @param xgrp  Group to receive work for (0-255).
+ * @param wait
+ *     1 to cause response to wait for work to become available (or timeout)
+ *     0 to cause response to return immediately
+ */
+static inline void cvmx_sso_work_request_grp_async_nocheck(int scr_addr, cvmx_xgrp_t xgrp,
+							   cvmx_pow_wait_t wait)
+{
+	cvmx_pow_iobdma_store_t data;
+	unsigned int node = cvmx_get_node_num();
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		__cvmx_pow_warn_if_pending_switch(__func__);
+		cvmx_warn_if(!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE), "Not CN78XX");
+	}
+	/* scr_addr must be 8 byte aligned */
+	data.u64 = 0;
+	data.s_cn78xx.scraddr = scr_addr >> 3;
+	data.s_cn78xx.len = 1;
+	data.s_cn78xx.did = CVMX_OCT_DID_TAG_SWTAG;
+	data.s_cn78xx.grouped = 1;
+	data.s_cn78xx.index_grp_mask = (node << 8) | xgrp.xgrp;
+	data.s_cn78xx.wait = wait;
+	data.s_cn78xx.node = node;
+
+	cvmx_send_single(data.u64);
+}
+
+/**
+ * Synchronous work request from the node-local SSO without verifying
+ * pending tag switch. It requests work from a specific SSO group.
+ *
+ * @param lgrp The local group number (within the SSO of the node of the caller)
+ *     from which to get the work.
+ * @param wait When set, call stalls until work becomes available, or times out.
+ *     If not set, returns immediately.
+ *
+ * @return Returns the WQE pointer from SSO.
+ *     Returns NULL if no work was available.
+ */
+static inline void *cvmx_sso_work_request_grp_sync_nocheck(unsigned int lgrp, cvmx_pow_wait_t wait)
+{
+	cvmx_pow_load_addr_t ptr;
+	cvmx_pow_tag_load_resp_t result;
+	unsigned int node = cvmx_get_node_num() & 3;
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		__cvmx_pow_warn_if_pending_switch(__func__);
+		cvmx_warn_if(!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE), "Not CN78XX");
+	}
+	ptr.u64 = 0;
+	ptr.swork_78xx.mem_region = CVMX_IO_SEG;
+	ptr.swork_78xx.is_io = 1;
+	ptr.swork_78xx.did = CVMX_OCT_DID_TAG_SWTAG;
+	ptr.swork_78xx.node = node;
+	ptr.swork_78xx.grouped = 1;
+	ptr.swork_78xx.index = (lgrp & 0xff) | node << 8;
+	ptr.swork_78xx.wait = wait;
+
+	result.u64 = csr_rd(ptr.u64);
+	if (result.s_work.no_work)
+		return NULL;
+	else
+		return cvmx_phys_to_ptr(result.s_work.addr);
+}
+
+/**
+ * Synchronous work request from the node-local SSO.
+ * It requests work from a specific SSO group.
+ * This function waits for any previous tag switch to complete before
+ * requesting the new work.
+ *
+ * @param lgrp The node-local group number from which to get the work.
+ * @param wait When set, call stalls until work becomes available, or times out.
+ *     If not set, returns immediately.
+ *
+ * @return The WQE pointer or NULL, if work is not available.
+ */
+static inline void *cvmx_sso_work_request_grp_sync(unsigned int lgrp, cvmx_pow_wait_t wait)
+{
+	cvmx_pow_tag_sw_wait();
+	return cvmx_sso_work_request_grp_sync_nocheck(lgrp, wait);
+}
+
+/**
+ * This function sets the group mask for a core.  The group mask bits
+ * indicate which groups each core will accept work from.
+ *
+ * @param core_num	Processor core to apply mask to.
+ * @param mask_set	7XXX has 2 sets of masks per core.
+ *     Bit 0 represents the first mask set, bit 1 -- the second.
+ * @param xgrp_mask	Group mask array.
+ *     Total number of groups is divided into a number of
+ *     64-bits mask sets. Each bit in the mask, if set, enables
+ *     the core to accept work from the corresponding group.
+ *
+ * NOTE: Each core can be configured to accept work in accordance to both
+ * mask sets, with the first having higher precedence over the second,
+ * or to accept work in accordance to just one of the two mask sets.
+ * The 'core_num' argument represents a processor core on any node
+ * in a coherent multi-chip system.
+ *
+ * If the 'mask_set' argument is 3, both mask sets are configured
+ * with the same value (which is not typically the intention),
+ * so keep in mind the function needs to be called twice
+ * to set a different value into each of the mask sets,
+ * once with 'mask_set=1' and second time with 'mask_set=2'.
+ */
+static inline void cvmx_pow_set_xgrp_mask(u64 core_num, u8 mask_set, const u64 xgrp_mask[])
+{
+	unsigned int grp, node, core;
+	u64 reg_addr;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		debug("ERROR: %s is not supported on this chip)\n", __func__);
+		return;
+	}
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		cvmx_warn_if(((mask_set < 1) || (mask_set > 3)), "Invalid mask set");
+	}
+
+	if ((mask_set < 1) || (mask_set > 3))
+		mask_set = 3;
+
+	node = cvmx_coremask_core_to_node(core_num);
+	core = cvmx_coremask_core_on_node(core_num);
+
+	for (grp = 0; grp < (cvmx_sso_num_xgrp() >> 6); grp++) {
+		if (mask_set & 1) {
+			reg_addr = CVMX_SSO_PPX_SX_GRPMSKX(core, 0, grp),
+			csr_wr_node(node, reg_addr, xgrp_mask[grp]);
+		}
+		if (mask_set & 2) {
+			reg_addr = CVMX_SSO_PPX_SX_GRPMSKX(core, 1, grp),
+			csr_wr_node(node, reg_addr, xgrp_mask[grp]);
+		}
+	}
+}
+
+/**
+ * This function gets the group mask for a core.  The group mask bits
+ * indicate which groups each core will accept work from.
+ *
+ * @param core_num	Processor core to apply mask to.
+ * @param mask_set	7XXX has 2 sets of masks per core.
+ *     Bit 0 represents the first mask set, bit 1 -- the second.
+ * @param xgrp_mask	Provide pointer to u64 mask[8] output array.
+ *     Total number of groups is divided into a number of
+ *     64-bits mask sets. Each bit in the mask represents
+ *     the core accepts work from the corresponding group.
+ *
+ * NOTE: Each core can be configured to accept work in accordance to both
+ * mask sets, with the first having higher precedence over the second,
+ * or to accept work in accordance to just one of the two mask sets.
+ * The 'core_num' argument represents a processor core on any node
+ * in a coherent multi-chip system.
+ */
+static inline void cvmx_pow_get_xgrp_mask(u64 core_num, u8 mask_set, u64 *xgrp_mask)
+{
+	cvmx_sso_ppx_sx_grpmskx_t grp_msk;
+	unsigned int grp, node, core;
+	u64 reg_addr;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		debug("ERROR: %s is not supported on this chip)\n", __func__);
+		return;
+	}
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		cvmx_warn_if(mask_set != 1 && mask_set != 2, "Invalid mask set");
+	}
+
+	node = cvmx_coremask_core_to_node(core_num);
+	core = cvmx_coremask_core_on_node(core_num);
+
+	for (grp = 0; grp < cvmx_sso_num_xgrp() >> 6; grp++) {
+		if (mask_set & 1) {
+			reg_addr = CVMX_SSO_PPX_SX_GRPMSKX(core, 0, grp),
+			grp_msk.u64 = csr_rd_node(node, reg_addr);
+			xgrp_mask[grp] = grp_msk.s.grp_msk;
+		}
+		if (mask_set & 2) {
+			reg_addr = CVMX_SSO_PPX_SX_GRPMSKX(core, 1, grp),
+			grp_msk.u64 = csr_rd_node(node, reg_addr);
+			xgrp_mask[grp] = grp_msk.s.grp_msk;
+		}
+	}
+}
+
+/**
+ * Executes SSO SWTAG command.
+ * This is similar to cvmx_pow_tag_sw() function, but uses linear
+ * (vs. integrated group-qos) group index.
+ */
+static inline void cvmx_pow_tag_sw_node(cvmx_wqe_t *wqp, u32 tag, cvmx_pow_tag_type_t tag_type,
+					int node)
+{
+	union cvmx_pow_tag_req_addr ptr;
+	cvmx_pow_tag_req_t tag_req;
+
+	if (cvmx_unlikely(!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))) {
+		debug("ERROR: %s is supported on OCTEON3 only\n", __func__);
+		return;
+	}
+	CVMX_SYNCWS;
+	cvmx_pow_tag_sw_wait();
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		cvmx_pow_tag_info_t current_tag;
+
+		__cvmx_pow_warn_if_pending_switch(__func__);
+		current_tag = cvmx_pow_get_current_tag();
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL_NULL,
+			     "%s called with NULL_NULL tag\n", __func__);
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL,
+			     "%s called with NULL tag\n", __func__);
+		cvmx_warn_if((current_tag.tag_type == tag_type) && (current_tag.tag == tag),
+			     "%s called to perform a tag switch to the same tag\n", __func__);
+		cvmx_warn_if(
+			tag_type == CVMX_POW_TAG_TYPE_NULL,
+			"%s called to perform a tag switch to NULL. Use cvmx_pow_tag_sw_null() instead\n",
+			__func__);
+	}
+	wqp->word1.cn78xx.tag = tag;
+	wqp->word1.cn78xx.tag_type = tag_type;
+	CVMX_SYNCWS;
+
+	tag_req.u64 = 0;
+	tag_req.s_cn78xx_other.op = CVMX_POW_TAG_OP_SWTAG;
+	tag_req.s_cn78xx_other.type = tag_type;
+
+	ptr.u64 = 0;
+	ptr.s_cn78xx.mem_region = CVMX_IO_SEG;
+	ptr.s_cn78xx.is_io = 1;
+	ptr.s_cn78xx.did = CVMX_OCT_DID_TAG_SWTAG;
+	ptr.s_cn78xx.node = node;
+	ptr.s_cn78xx.tag = tag;
+	cvmx_write_io(ptr.u64, tag_req.u64);
+}
+
+/**
+ * Executes SSO SWTAG_FULL command.
+ * This is similar to cvmx_pow_tag_sw_full() function, but
+ * uses linear (vs. integrated group-qos) group index.
+ */
+static inline void cvmx_pow_tag_sw_full_node(cvmx_wqe_t *wqp, u32 tag, cvmx_pow_tag_type_t tag_type,
+					     u8 xgrp, int node)
+{
+	union cvmx_pow_tag_req_addr ptr;
+	cvmx_pow_tag_req_t tag_req;
+	u16 gxgrp;
+
+	if (cvmx_unlikely(!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))) {
+		debug("ERROR: %s is supported on OCTEON3 only\n", __func__);
+		return;
+	}
+	/* Ensure that there is not a pending tag switch, as a tag switch cannot be
+	 * started, if a previous switch is still pending. */
+	CVMX_SYNCWS;
+	cvmx_pow_tag_sw_wait();
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		cvmx_pow_tag_info_t current_tag;
+
+		__cvmx_pow_warn_if_pending_switch(__func__);
+		current_tag = cvmx_pow_get_current_tag();
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL_NULL,
+			     "%s called with NULL_NULL tag\n", __func__);
+		cvmx_warn_if((current_tag.tag_type == tag_type) && (current_tag.tag == tag),
+			     "%s called to perform a tag switch to the same tag\n", __func__);
+		cvmx_warn_if(
+			tag_type == CVMX_POW_TAG_TYPE_NULL,
+			"%s called to perform a tag switch to NULL. Use cvmx_pow_tag_sw_null() instead\n",
+			__func__);
+		if ((wqp != cvmx_phys_to_ptr(0x80)) && cvmx_pow_get_current_wqp())
+			cvmx_warn_if(wqp != cvmx_pow_get_current_wqp(),
+				     "%s passed WQE(%p) doesn't match the address in the POW(%p)\n",
+				     __func__, wqp, cvmx_pow_get_current_wqp());
+	}
+	gxgrp = node;
+	gxgrp = gxgrp << 8 | xgrp;
+	wqp->word1.cn78xx.grp = gxgrp;
+	wqp->word1.cn78xx.tag = tag;
+	wqp->word1.cn78xx.tag_type = tag_type;
+	CVMX_SYNCWS;
+
+	tag_req.u64 = 0;
+	tag_req.s_cn78xx_other.op = CVMX_POW_TAG_OP_SWTAG_FULL;
+	tag_req.s_cn78xx_other.type = tag_type;
+	tag_req.s_cn78xx_other.grp = gxgrp;
+	tag_req.s_cn78xx_other.wqp = cvmx_ptr_to_phys(wqp);
+
+	ptr.u64 = 0;
+	ptr.s_cn78xx.mem_region = CVMX_IO_SEG;
+	ptr.s_cn78xx.is_io = 1;
+	ptr.s_cn78xx.did = CVMX_OCT_DID_TAG_SWTAG;
+	ptr.s_cn78xx.node = node;
+	ptr.s_cn78xx.tag = tag;
+	cvmx_write_io(ptr.u64, tag_req.u64);
+}
+
+/**
+ * Submits work to an SSO group on any OCI node.
+ * This function updates the work queue entry in DRAM to match
+ * the arguments given.
+ * Note that the tag provided is for the work queue entry submitted,
+ * and is unrelated to the tag that the core currently holds.
+ *
+ * @param wqp pointer to work queue entry to submit.
+ * This entry is updated to match the other parameters
+ * @param tag tag value to be assigned to work queue entry
+ * @param tag_type type of tag
+ * @param xgrp native CN78XX group in the range 0..255
+ * @param node The OCI node number for the target group
+ *
+ * When this function is called on a model prior to CN78XX, which does
+ * not support OCI nodes, the 'node' argument is ignored, and the 'xgrp'
+ * parameter is converted into 'qos' (the lower 3 bits) and 'grp' (the higher
+ * 5 bits), following the backward-compatibility scheme of translating
+ * between new and old style group numbers.
+ */
+static inline void cvmx_pow_work_submit_node(cvmx_wqe_t *wqp, u32 tag, cvmx_pow_tag_type_t tag_type,
+					     u8 xgrp, u8 node)
+{
+	union cvmx_pow_tag_req_addr ptr;
+	cvmx_pow_tag_req_t tag_req;
+	u16 group;
+
+	if (cvmx_unlikely(!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))) {
+		debug("ERROR: %s is supported on OCTEON3 only\n", __func__);
+		return;
+	}
+	group = node;
+	group = group << 8 | xgrp;
+	wqp->word1.cn78xx.tag = tag;
+	wqp->word1.cn78xx.tag_type = tag_type;
+	wqp->word1.cn78xx.grp = group;
+	CVMX_SYNCWS;
+
+	tag_req.u64 = 0;
+	tag_req.s_cn78xx_other.op = CVMX_POW_TAG_OP_ADDWQ;
+	tag_req.s_cn78xx_other.type = tag_type;
+	tag_req.s_cn78xx_other.wqp = cvmx_ptr_to_phys(wqp);
+	tag_req.s_cn78xx_other.grp = group;
+
+	ptr.u64 = 0;
+	ptr.s_cn78xx.did = 0x66; // CVMX_OCT_DID_TAG_TAG6;
+	ptr.s_cn78xx.mem_region = CVMX_IO_SEG;
+	ptr.s_cn78xx.is_io = 1;
+	ptr.s_cn78xx.node = node;
+	ptr.s_cn78xx.tag = tag;
+
+	/* SYNC write to memory before the work submit.  This is necessary
+	 ** as POW may read values from DRAM at this time */
+	CVMX_SYNCWS;
+	cvmx_write_io(ptr.u64, tag_req.u64);
+}
+
+/**
+ * Executes the SSO SWTAG_DESCHED operation.
+ * This is similar to the cvmx_pow_tag_sw_desched() function, but
+ * uses linear (vs. unified group-qos) group index.
+ */
+static inline void cvmx_pow_tag_sw_desched_node(cvmx_wqe_t *wqe, u32 tag,
+						cvmx_pow_tag_type_t tag_type, u8 xgrp, u64 no_sched,
+						u8 node)
+{
+	union cvmx_pow_tag_req_addr ptr;
+	cvmx_pow_tag_req_t tag_req;
+	u16 group;
+
+	if (cvmx_unlikely(!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))) {
+		debug("ERROR: %s is supported on OCTEON3 only\n", __func__);
+		return;
+	}
+	/* Need to make sure any writes to the work queue entry are complete */
+	CVMX_SYNCWS;
+	/*
+	 * Ensure that there is not a pending tag switch, as a tag switch cannot
+	 * be started if a previous switch is still pending.
+	 */
+	cvmx_pow_tag_sw_wait();
+
+	if (CVMX_ENABLE_POW_CHECKS) {
+		cvmx_pow_tag_info_t current_tag;
+
+		__cvmx_pow_warn_if_pending_switch(__func__);
+		current_tag = cvmx_pow_get_current_tag();
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL_NULL,
+			     "%s called with NULL_NULL tag\n", __func__);
+		cvmx_warn_if(current_tag.tag_type == CVMX_POW_TAG_TYPE_NULL,
+			     "%s called with NULL tag. Deschedule not allowed from NULL state\n",
+			     __func__);
+		cvmx_warn_if((current_tag.tag_type != CVMX_POW_TAG_TYPE_ATOMIC) &&
+			     (tag_type != CVMX_POW_TAG_TYPE_ATOMIC),
+			     "%s called where neither the before or after tag is ATOMIC\n",
+			     __func__);
+	}
+	group = node;
+	group = group << 8 | xgrp;
+	wqe->word1.cn78xx.tag = tag;
+	wqe->word1.cn78xx.tag_type = tag_type;
+	wqe->word1.cn78xx.grp = group;
+	CVMX_SYNCWS;
+
+	tag_req.u64 = 0;
+	tag_req.s_cn78xx_other.op = CVMX_POW_TAG_OP_SWTAG_DESCH;
+	tag_req.s_cn78xx_other.type = tag_type;
+	tag_req.s_cn78xx_other.grp = group;
+	tag_req.s_cn78xx_other.no_sched = no_sched;
+
+	ptr.u64 = 0;
+	ptr.s.mem_region = CVMX_IO_SEG;
+	ptr.s.is_io = 1;
+	ptr.s.did = CVMX_OCT_DID_TAG_TAG3;
+	ptr.s_cn78xx.node = node;
+	ptr.s_cn78xx.tag = tag;
+	cvmx_write_io(ptr.u64, tag_req.u64);
+}
+
+/* Executes the UPD_WQP_GRP SSO operation.
+ *
+ * @param wqp  Pointer to the new work queue entry to switch to.
+ * @param xgrp SSO group in the range 0..255
+ *
+ * NOTE: The operation can be performed only on the local node.
+ */
+static inline void cvmx_sso_update_wqp_group(cvmx_wqe_t *wqp, u8 xgrp)
+{
+	union cvmx_pow_tag_req_addr addr;
+	cvmx_pow_tag_req_t data;
+	int node = cvmx_get_node_num();
+	int group = node << 8 | xgrp;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		debug("ERROR: %s is not supported on this chip)\n", __func__);
+		return;
+	}
+	wqp->word1.cn78xx.grp = group;
+	CVMX_SYNCWS;
+
+	data.u64 = 0;
+	data.s_cn78xx_other.op = CVMX_POW_TAG_OP_UPDATE_WQP_GRP;
+	data.s_cn78xx_other.grp = group;
+	data.s_cn78xx_other.wqp = cvmx_ptr_to_phys(wqp);
+
+	addr.u64 = 0;
+	addr.s_cn78xx.mem_region = CVMX_IO_SEG;
+	addr.s_cn78xx.is_io = 1;
+	addr.s_cn78xx.did = CVMX_OCT_DID_TAG_TAG1;
+	addr.s_cn78xx.node = node;
+	cvmx_write_io(addr.u64, data.u64);
+}
+
+/******************************************************************************/
+/* Define usage of bits within the 32 bit tag values.                         */
+/******************************************************************************/
+/*
+ * Number of bits of the tag used by software.  The SW bits
+ * are always a contiguous block of the high starting at bit 31.
+ * The hardware bits are always the low bits.  By default, the top 8 bits
+ * of the tag are reserved for software, and the low 24 are set by the IPD unit.
+ */
+#define CVMX_TAG_SW_BITS  (8)
+#define CVMX_TAG_SW_SHIFT (32 - CVMX_TAG_SW_BITS)
+
+/* Below is the list of values for the top 8 bits of the tag. */
+/*
+ * Tag values with top byte of this value are reserved for internal executive
+ * uses
+ */
+#define CVMX_TAG_SW_BITS_INTERNAL 0x1
+
+/*
+ * The executive divides the remaining 24 bits as follows:
+ * the upper 8 bits (bits 23 - 16 of the tag) define a subgroup
+ * the lower 16 bits (bits 15 - 0 of the tag) define are the value with
+ * the subgroup. Note that this section describes the format of tags generated
+ * by software - refer to the hardware documentation for a description of the
+ * tags values generated by the packet input hardware.
+ * Subgroups are defined here
+ */
+
+/* Mask for the value portion of the tag */
+#define CVMX_TAG_SUBGROUP_MASK	0xFFFF
+#define CVMX_TAG_SUBGROUP_SHIFT 16
+#define CVMX_TAG_SUBGROUP_PKO	0x1
+
+/* End of executive tag subgroup definitions */
+
+/* The remaining values software bit values 0x2 - 0xff are available
+ * for application use */
+
+/**
+ * This function creates a 32 bit tag value from the two values provided.
+ *
+ * @param sw_bits The upper bits (number depends on configuration) are set
+ *     to this value.  The remainder of bits are set by the hw_bits parameter.
+ * @param hw_bits The lower bits (number depends on configuration) are set
+ *     to this value.  The remainder of bits are set by the sw_bits parameter.
+ *
+ * @return 32 bit value of the combined hw and sw bits.
+ */
+static inline u32 cvmx_pow_tag_compose(u64 sw_bits, u64 hw_bits)
+{
+	return (((sw_bits & cvmx_build_mask(CVMX_TAG_SW_BITS)) << CVMX_TAG_SW_SHIFT) |
+		(hw_bits & cvmx_build_mask(32 - CVMX_TAG_SW_BITS)));
+}
+
+/**
+ * Extracts the bits allocated for software use from the tag
+ *
+ * @param tag    32 bit tag value
+ *
+ * @return N bit software tag value, where N is configurable with
+ *     the CVMX_TAG_SW_BITS define
+ */
+static inline u32 cvmx_pow_tag_get_sw_bits(u64 tag)
+{
+	return ((tag >> (32 - CVMX_TAG_SW_BITS)) & cvmx_build_mask(CVMX_TAG_SW_BITS));
+}
+
+/**
+ *
+ * Extracts the bits allocated for hardware use from the tag
+ *
+ * @param tag    32 bit tag value
+ *
+ * @return (32 - N) bit software tag value, where N is configurable with
+ *     the CVMX_TAG_SW_BITS define
+ */
+static inline u32 cvmx_pow_tag_get_hw_bits(u64 tag)
+{
+	return (tag & cvmx_build_mask(32 - CVMX_TAG_SW_BITS));
+}
+
+static inline u64 cvmx_sso3_get_wqe_count(int node)
+{
+	cvmx_sso_grpx_aq_cnt_t aq_cnt;
+	unsigned int grp = 0;
+	u64 cnt = 0;
+
+	for (grp = 0; grp < cvmx_sso_num_xgrp(); grp++) {
+		aq_cnt.u64 = csr_rd_node(node, CVMX_SSO_GRPX_AQ_CNT(grp));
+		cnt += aq_cnt.s.aq_cnt;
+	}
+	return cnt;
+}
+
+static inline u64 cvmx_sso_get_total_wqe_count(void)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		int node = cvmx_get_node_num();
+
+		return cvmx_sso3_get_wqe_count(node);
+	} else if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
+		cvmx_sso_iq_com_cnt_t sso_iq_com_cnt;
+
+		sso_iq_com_cnt.u64 = csr_rd(CVMX_SSO_IQ_COM_CNT);
+		return (sso_iq_com_cnt.s.iq_cnt);
+	} else {
+		cvmx_pow_iq_com_cnt_t pow_iq_com_cnt;
+
+		pow_iq_com_cnt.u64 = csr_rd(CVMX_POW_IQ_COM_CNT);
+		return (pow_iq_com_cnt.s.iq_cnt);
+	}
+}
+
+/**
+ * Store the current POW internal state into the supplied
+ * buffer. It is recommended that you pass a buffer of at least
+ * 128KB. The format of the capture may change based on SDK
+ * version and Octeon chip.
+ *
+ * @param buffer Buffer to store capture into
+ * @param buffer_size The size of the supplied buffer
+ *
+ * @return Zero on success, negative on failure
+ */
+int cvmx_pow_capture(void *buffer, int buffer_size);
+
+/**
+ * Dump a POW capture to the console in a human readable format.
+ *
+ * @param buffer POW capture from cvmx_pow_capture()
+ * @param buffer_size Size of the buffer
+ */
+void cvmx_pow_display(void *buffer, int buffer_size);
+
+/**
+ * Return the number of POW entries supported by this chip
+ *
+ * @return Number of POW entries
+ */
+int cvmx_pow_get_num_entries(void);
+int cvmx_pow_get_dump_size(void);
+
+/**
+ * This will allocate count number of SSO groups on the specified node to the
+ * calling application. These groups will be for exclusive use of the
+ * application until they are freed.
+ * @param node The numa node for the allocation.
+ * @param base_group Pointer to the initial group, -1 to allocate anywhere.
+ * @param count  The number of consecutive groups to allocate.
+ * @return 0 on success and -1 on failure.
+ */
+int cvmx_sso_reserve_group_range(int node, int *base_group, int count);
+#define cvmx_sso_allocate_group_range cvmx_sso_reserve_group_range
+int cvmx_sso_reserve_group(int node);
+#define cvmx_sso_allocate_group cvmx_sso_reserve_group
+int cvmx_sso_release_group_range(int node, int base_group, int count);
+int cvmx_sso_release_group(int node, int group);
+
+/**
+ * Show integrated SSO configuration.
+ *
+ * @param node	   node number
+ */
+int cvmx_sso_config_dump(unsigned int node);
+
+/**
+ * Show integrated SSO statistics.
+ *
+ * @param node	   node number
+ */
+int cvmx_sso_stats_dump(unsigned int node);
+
+/**
+ * Clear integrated SSO statistics.
+ *
+ * @param node	   node number
+ */
+int cvmx_sso_stats_clear(unsigned int node);
+
+/**
+ * Show SSO core-group affinity and priority per node (multi-node systems)
+ */
+void cvmx_pow_mask_priority_dump_node(unsigned int node, struct cvmx_coremask *avail_coremask);
+
+/**
+ * Show POW/SSO core-group affinity and priority (legacy, single-node systems)
+ */
+static inline void cvmx_pow_mask_priority_dump(struct cvmx_coremask *avail_coremask)
+{
+	cvmx_pow_mask_priority_dump_node(0 /*node */, avail_coremask);
+}
+
+/**
+ * Show SSO performance counters (multi-node systems)
+ */
+void cvmx_pow_show_perf_counters_node(unsigned int node);
+
+/**
+ * Show POW/SSO performance counters (legacy, single-node systems)
+ */
+static inline void cvmx_pow_show_perf_counters(void)
+{
+	cvmx_pow_show_perf_counters_node(0 /*node */);
+}
+
+#endif /* __CVMX_POW_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-qlm.h b/arch/mips/mach-octeon/include/mach/cvmx-qlm.h
new file mode 100644
index 0000000..19915eb
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-qlm.h
@@ -0,0 +1,304 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_QLM_H__
+#define __CVMX_QLM_H__
+
+/*
+ * Interface 0 on the 78xx can be connected to qlm 0 or qlm 2. When interface
+ * 0 is connected to qlm 0, this macro must be set to 0. When interface 0 is
+ * connected to qlm 2, this macro must be set to 1.
+ */
+#define MUX_78XX_IFACE0 0
+
+/*
+ * Interface 1 on the 78xx can be connected to qlm 1 or qlm 3. When interface
+ * 1 is connected to qlm 1, this macro must be set to 0. When interface 1 is
+ * connected to qlm 3, this macro must be set to 1.
+ */
+#define MUX_78XX_IFACE1 0
+
+/* Uncomment this line to print QLM JTAG state */
+/* #define CVMX_QLM_DUMP_STATE 1 */
+
+typedef struct {
+	const char *name;
+	int stop_bit;
+	int start_bit;
+} __cvmx_qlm_jtag_field_t;
+
+/**
+ * Return the number of QLMs supported by the chip
+ *
+ * @return  Number of QLMs
+ */
+int cvmx_qlm_get_num(void);
+
+/**
+ * Return the qlm number based on the interface
+ *
+ * @param xiface  Interface to look
+ */
+int cvmx_qlm_interface(int xiface);
+
+/**
+ * Return the qlm number based for a port in the interface
+ *
+ * @param xiface  interface to look up
+ * @param index  index in an interface
+ *
+ * @return the qlm number based on the xiface
+ */
+int cvmx_qlm_lmac(int xiface, int index);
+
+/**
+ * Return if only DLM5/DLM6/DLM5+DLM6 is used by BGX
+ *
+ * @param BGX  BGX to search for.
+ *
+ * @return muxes used 0 = DLM5+DLM6, 1 = DLM5, 2 = DLM6.
+ */
+int cvmx_qlm_mux_interface(int bgx);
+
+/**
+ * Return number of lanes for a given qlm
+ *
+ * @param qlm QLM block to query
+ *
+ * @return  Number of lanes
+ */
+int cvmx_qlm_get_lanes(int qlm);
+
+/**
+ * Get the QLM JTAG fields based on Octeon model on the supported chips.
+ *
+ * @return  qlm_jtag_field_t structure
+ */
+const __cvmx_qlm_jtag_field_t *cvmx_qlm_jtag_get_field(void);
+
+/**
+ * Get the QLM JTAG length by going through qlm_jtag_field for each
+ * Octeon model that is supported
+ *
+ * @return return the length.
+ */
+int cvmx_qlm_jtag_get_length(void);
+
+/**
+ * Initialize the QLM layer
+ */
+void cvmx_qlm_init(void);
+
+/**
+ * Get a field in a QLM JTAG chain
+ *
+ * @param qlm    QLM to get
+ * @param lane   Lane in QLM to get
+ * @param name   String name of field
+ *
+ * @return JTAG field value
+ */
+u64 cvmx_qlm_jtag_get(int qlm, int lane, const char *name);
+
+/**
+ * Set a field in a QLM JTAG chain
+ *
+ * @param qlm    QLM to set
+ * @param lane   Lane in QLM to set, or -1 for all lanes
+ * @param name   String name of field
+ * @param value  Value of the field
+ */
+void cvmx_qlm_jtag_set(int qlm, int lane, const char *name, u64 value);
+
+/**
+ * Errata G-16094: QLM Gen2 Equalizer Default Setting Change.
+ * CN68XX pass 1.x and CN66XX pass 1.x QLM tweak. This function tweaks the
+ * JTAG setting for a QLMs to run better at 5 and 6.25Ghz.
+ */
+void __cvmx_qlm_speed_tweak(void);
+
+/**
+ * Errata G-16174: QLM Gen2 PCIe IDLE DAC change.
+ * CN68XX pass 1.x, CN66XX pass 1.x and CN63XX pass 1.0-2.2 QLM tweak.
+ * This function tweaks the JTAG setting for a QLMs for PCIe to run better.
+ */
+void __cvmx_qlm_pcie_idle_dac_tweak(void);
+
+void __cvmx_qlm_pcie_cfg_rxd_set_tweak(int qlm, int lane);
+
+/**
+ * Get the speed (Gbaud) of the QLM in Mhz.
+ *
+ * @param qlm    QLM to examine
+ *
+ * @return Speed in Mhz
+ */
+int cvmx_qlm_get_gbaud_mhz(int qlm);
+/**
+ * Get the speed (Gbaud) of the QLM in Mhz on specific node.
+ *
+ * @param node   Target QLM node
+ * @param qlm    QLM to examine
+ *
+ * @return Speed in Mhz
+ */
+int cvmx_qlm_get_gbaud_mhz_node(int node, int qlm);
+
+enum cvmx_qlm_mode {
+	CVMX_QLM_MODE_DISABLED = -1,
+	CVMX_QLM_MODE_SGMII = 1,
+	CVMX_QLM_MODE_XAUI,
+	CVMX_QLM_MODE_RXAUI,
+	CVMX_QLM_MODE_PCIE,	/* gen3 / gen2 / gen1 */
+	CVMX_QLM_MODE_PCIE_1X2, /* 1x2 gen2 / gen1 */
+	CVMX_QLM_MODE_PCIE_2X1, /* 2x1 gen2 / gen1 */
+	CVMX_QLM_MODE_PCIE_1X1, /* 1x1 gen2 / gen1 */
+	CVMX_QLM_MODE_SRIO_1X4, /* 1x4 short / long */
+	CVMX_QLM_MODE_SRIO_2X2, /* 2x2 short / long */
+	CVMX_QLM_MODE_SRIO_4X1, /* 4x1 short / long */
+	CVMX_QLM_MODE_ILK,
+	CVMX_QLM_MODE_QSGMII,
+	CVMX_QLM_MODE_SGMII_SGMII,
+	CVMX_QLM_MODE_SGMII_DISABLED,
+	CVMX_QLM_MODE_DISABLED_SGMII,
+	CVMX_QLM_MODE_SGMII_QSGMII,
+	CVMX_QLM_MODE_QSGMII_QSGMII,
+	CVMX_QLM_MODE_QSGMII_DISABLED,
+	CVMX_QLM_MODE_DISABLED_QSGMII,
+	CVMX_QLM_MODE_QSGMII_SGMII,
+	CVMX_QLM_MODE_RXAUI_1X2,
+	CVMX_QLM_MODE_SATA_2X1,
+	CVMX_QLM_MODE_XLAUI,
+	CVMX_QLM_MODE_XFI,
+	CVMX_QLM_MODE_10G_KR,
+	CVMX_QLM_MODE_40G_KR4,
+	CVMX_QLM_MODE_PCIE_1X8, /* 1x8 gen3 / gen2 / gen1 */
+	CVMX_QLM_MODE_RGMII_SGMII,
+	CVMX_QLM_MODE_RGMII_XFI,
+	CVMX_QLM_MODE_RGMII_10G_KR,
+	CVMX_QLM_MODE_RGMII_RXAUI,
+	CVMX_QLM_MODE_RGMII_XAUI,
+	CVMX_QLM_MODE_RGMII_XLAUI,
+	CVMX_QLM_MODE_RGMII_40G_KR4,
+	CVMX_QLM_MODE_MIXED,		/* BGX2 is mixed mode, DLM5(SGMII) & DLM6(XFI) */
+	CVMX_QLM_MODE_SGMII_2X1,	/* Configure BGX2 separate for DLM5 & DLM6 */
+	CVMX_QLM_MODE_10G_KR_1X2,	/* Configure BGX2 separate for DLM5 & DLM6 */
+	CVMX_QLM_MODE_XFI_1X2,		/* Configure BGX2 separate for DLM5 & DLM6 */
+	CVMX_QLM_MODE_RGMII_SGMII_1X1,	/* Configure BGX2, applies to DLM5 */
+	CVMX_QLM_MODE_RGMII_SGMII_2X1,	/* Configure BGX2, applies to DLM6 */
+	CVMX_QLM_MODE_RGMII_10G_KR_1X1, /* Configure BGX2, applies to DLM6 */
+	CVMX_QLM_MODE_RGMII_XFI_1X1,	/* Configure BGX2, applies to DLM6 */
+	CVMX_QLM_MODE_SDL,		/* RMAC Pipe */
+	CVMX_QLM_MODE_CPRI,		/* RMAC */
+	CVMX_QLM_MODE_OCI
+};
+
+enum cvmx_gmx_inf_mode {
+	CVMX_GMX_INF_MODE_DISABLED = 0,
+	CVMX_GMX_INF_MODE_SGMII = 1,  /* Other interface can be SGMII or QSGMII */
+	CVMX_GMX_INF_MODE_QSGMII = 2, /* Other interface can be SGMII or QSGMII */
+	CVMX_GMX_INF_MODE_RXAUI = 3,  /* Only interface 0, interface 1 must be DISABLED */
+};
+
+/**
+ * Eye diagram captures are stored in the following structure
+ */
+typedef struct {
+	int width;	   /* Width in the x direction (time) */
+	int height;	   /* Height in the y direction (voltage) */
+	u32 data[64][128]; /* Error count at location, saturates as max */
+} cvmx_qlm_eye_t;
+
+/**
+ * These apply to DLM1 and DLM2 if its not in SATA mode
+ * Manual refers to lanes as follows:
+ *  DML 0 lane 0 == GSER0 lane 0
+ *  DML 0 lane 1 == GSER0 lane 1
+ *  DML 1 lane 2 == GSER1 lane 0
+ *  DML 1 lane 3 == GSER1 lane 1
+ *  DML 2 lane 4 == GSER2 lane 0
+ *  DML 2 lane 5 == GSER2 lane 1
+ */
+enum cvmx_pemx_cfg_mode {
+	CVMX_PEM_MD_GEN2_2LANE = 0, /* Valid for PEM0(DLM1), PEM1(DLM2) */
+	CVMX_PEM_MD_GEN2_1LANE = 1, /* Valid for PEM0(DLM1.0), PEM1(DLM1.1,DLM2.0), PEM2(DLM2.1) */
+	CVMX_PEM_MD_GEN2_4LANE = 2, /* Valid for PEM0(DLM1-2) */
+	/* Reserved */
+	CVMX_PEM_MD_GEN1_2LANE = 4, /* Valid for PEM0(DLM1), PEM1(DLM2) */
+	CVMX_PEM_MD_GEN1_1LANE = 5, /* Valid for PEM0(DLM1.0), PEM1(DLM1.1,DLM2.0), PEM2(DLM2.1) */
+	CVMX_PEM_MD_GEN1_4LANE = 6, /* Valid for PEM0(DLM1-2) */
+	/* Reserved */
+};
+
+/*
+ * Read QLM and return mode.
+ */
+enum cvmx_qlm_mode cvmx_qlm_get_mode(int qlm);
+enum cvmx_qlm_mode cvmx_qlm_get_mode_cn78xx(int node, int qlm);
+enum cvmx_qlm_mode cvmx_qlm_get_dlm_mode(int dlm_mode, int interface);
+void __cvmx_qlm_set_mult(int qlm, int baud_mhz, int old_multiplier);
+
+void cvmx_qlm_display_registers(int qlm);
+
+int cvmx_qlm_measure_clock(int qlm);
+
+/**
+ * Measure the reference clock of a QLM on a multi-node setup
+ *
+ * @param node   node to measure
+ * @param qlm    QLM to measure
+ *
+ * @return Clock rate in Hz
+ */
+int cvmx_qlm_measure_clock_node(int node, int qlm);
+
+/*
+ * Perform RX equalization on a QLM
+ *
+ * @param node	Node the QLM is on
+ * @param qlm	QLM to perform RX equalization on
+ * @param lane	Lane to use, or -1 for all lanes
+ *
+ * @return Zero on success, negative if any lane failed RX equalization
+ */
+int __cvmx_qlm_rx_equalization(int node, int qlm, int lane);
+
+/**
+ * Errata GSER-27882 -GSER 10GBASE-KR Transmit Equalizer
+ * Training may not update PHY Tx Taps. This function is not static
+ * so we can share it with BGX KR
+ *
+ * @param node	Node to apply errata workaround
+ * @param qlm	QLM to apply errata workaround
+ * @param lane	Lane to apply the errata
+ */
+int cvmx_qlm_gser_errata_27882(int node, int qlm, int lane);
+
+void cvmx_qlm_gser_errata_25992(int node, int qlm);
+
+#ifdef CVMX_DUMP_GSER
+/**
+ * Dump GSER configuration for node 0
+ */
+int cvmx_dump_gser_config(unsigned int gser);
+/**
+ * Dump GSER status for node 0
+ */
+int cvmx_dump_gser_status(unsigned int gser);
+/**
+ * Dump GSER configuration
+ */
+int cvmx_dump_gser_config_node(unsigned int node, unsigned int gser);
+/**
+ * Dump GSER status
+ */
+int cvmx_dump_gser_status_node(unsigned int node, unsigned int gser);
+#endif
+
+int cvmx_qlm_eye_display(int node, int qlm, int qlm_lane, int format, const cvmx_qlm_eye_t *eye);
+
+void cvmx_prbs_process_cmd(int node, int qlm, int mode);
+
+#endif /* __CVMX_QLM_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-regs.h b/arch/mips/mach-octeon/include/mach/cvmx-regs.h
index b84fc9f..9e86be8 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-regs.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-regs.h
@@ -9,6 +9,7 @@
 #include <linux/bitfield.h>
 #include <linux/bitops.h>
 #include <linux/io.h>
+#include <mach/cvmx-address.h>
 
 /* General defines */
 #define CVMX_MAX_CORES		48
@@ -26,48 +27,117 @@
 
 #define MAX_CORE_TADS		8
 
-#define CAST_ULL(v)		((unsigned long long)(v))
 #define CASTPTR(type, v)	((type *)(long)(v))
+#define CAST64(v)		((long long)(long)(v))
 
 /* Regs */
-#define CVMX_CIU_PP_RST		0x0001010000000100ULL
 #define CVMX_CIU3_NMI		0x0001010000000160ULL
-#define CVMX_CIU_FUSE		0x00010100000001a0ULL
-#define CVMX_CIU_NMI		0x0001070000000718ULL
 
 #define CVMX_MIO_BOOT_LOC_CFGX(x) (0x0001180000000080ULL + ((x) & 1) * 8)
-#define MIO_BOOT_LOC_CFG_BASE		GENMASK_ULL(27, 3)
-#define MIO_BOOT_LOC_CFG_EN		BIT_ULL(31)
+#define MIO_BOOT_LOC_CFG_BASE	GENMASK_ULL(27, 3)
+#define MIO_BOOT_LOC_CFG_EN	BIT_ULL(31)
 
 #define CVMX_MIO_BOOT_LOC_ADR	0x0001180000000090ULL
-#define MIO_BOOT_LOC_ADR_ADR		GENMASK_ULL(7, 3)
+#define MIO_BOOT_LOC_ADR_ADR	GENMASK_ULL(7, 3)
 
 #define CVMX_MIO_BOOT_LOC_DAT	0x0001180000000098ULL
 
 #define CVMX_MIO_FUS_DAT2	0x0001180000001410ULL
-#define MIO_FUS_DAT2_NOCRYPTO		BIT_ULL(26)
-#define MIO_FUS_DAT2_NOMUL		BIT_ULL(27)
-#define MIO_FUS_DAT2_DORM_CRYPTO	BIT_ULL(34)
+#define MIO_FUS_DAT2_NOCRYPTO	BIT_ULL(26)
+#define MIO_FUS_DAT2_NOMUL	BIT_ULL(27)
+#define MIO_FUS_DAT2_DORM_CRYPTO BIT_ULL(34)
 
 #define CVMX_MIO_FUS_RCMD	0x0001180000001500ULL
-#define MIO_FUS_RCMD_ADDR		GENMASK_ULL(7, 0)
-#define MIO_FUS_RCMD_PEND		BIT_ULL(12)
-#define MIO_FUS_RCMD_DAT		GENMASK_ULL(23, 16)
+#define MIO_FUS_RCMD_ADDR	GENMASK_ULL(7, 0)
+#define MIO_FUS_RCMD_PEND	BIT_ULL(12)
+#define MIO_FUS_RCMD_DAT	GENMASK_ULL(23, 16)
 
 #define CVMX_RNM_CTL_STATUS	0x0001180040000000ULL
-#define RNM_CTL_STATUS_EER_VAL		BIT_ULL(9)
+#define RNM_CTL_STATUS_EER_VAL	BIT_ULL(9)
+
+#define CVMX_IOBDMA_ORDERED_IO_ADDR 0xffffffffffffa200ull
 
 /* turn the variable name into a string */
 #define CVMX_TMP_STR(x)		CVMX_TMP_STR2(x)
 #define CVMX_TMP_STR2(x)	#x
 
+#define CVMX_RDHWR(result, regstr)					\
+	asm volatile("rdhwr %[rt],$" CVMX_TMP_STR(regstr) : [rt] "=d"(result))
 #define CVMX_RDHWRNV(result, regstr)					\
-	asm volatile ("rdhwr %[rt],$" CVMX_TMP_STR(regstr) : [rt] "=d" (result))
+	asm("rdhwr %[rt],$" CVMX_TMP_STR(regstr) : [rt] "=d"(result))
+#define CVMX_POP(result, input)						\
+	asm("pop %[rd],%[rs]" : [rd] "=d"(result) : [rs] "d"(input))
 
-#define CVMX_SYNCW					\
-	asm volatile ("syncw\nsyncw\n" : : : "memory")
+#define CVMX_SYNC   asm volatile("sync\n" : : : "memory")
+#define CVMX_SYNCW  asm volatile("syncw\nsyncw\n" : : : "memory")
+#define CVMX_SYNCS  asm volatile("syncs\n" : : : "memory")
+#define CVMX_SYNCWS asm volatile("syncws\n" : : : "memory")
+
+#define CVMX_CACHE_LINE_SIZE	128			   // In bytes
+#define CVMX_CACHE_LINE_MASK	(CVMX_CACHE_LINE_SIZE - 1) // In bytes
+#define CVMX_CACHE_LINE_ALIGNED __aligned(CVMX_CACHE_LINE_SIZE)
+
+#define CVMX_SYNCIOBDMA		asm volatile("synciobdma" : : : "memory")
+
+#define CVMX_MF_CHORD(dest)	CVMX_RDHWR(dest, 30)
+
+/*
+ * The macros cvmx_likely and cvmx_unlikely use the
+ * __builtin_expect GCC operation to control branch
+ * probabilities for a conditional. For example, an "if"
+ * statement in the code that will almost always be
+ * executed should be written as "if (cvmx_likely(...))".
+ * If the "else" section of an if statement is more
+ * probable, use "if (cvmx_unlikey(...))".
+ */
+#define cvmx_likely(x)	 __builtin_expect(!!(x), 1)
+#define cvmx_unlikely(x) __builtin_expect(!!(x), 0)
+
+#define CVMX_WAIT_FOR_FIELD64(address, type, field, op, value, to_us)	\
+	({								\
+		int result;						\
+		do {							\
+			u64 done = get_timer(0);			\
+			type c;						\
+			while (1) {					\
+				c.u64 = csr_rd(address);		\
+				if ((c.s.field)op(value)) {		\
+					result = 0;			\
+					break;				\
+				} else if (get_timer(done) > ((to_us) / 1000)) { \
+					result = -1;			\
+					break;				\
+				} else					\
+					udelay(100);			\
+			}						\
+		} while (0);						\
+		result;							\
+	})
+
+#define CVMX_WAIT_FOR_FIELD64_NODE(node, address, type, field, op, value, to_us) \
+	({								\
+		int result;						\
+		do {							\
+			u64 done = get_timer(0);			\
+			type c;						\
+			while (1) {					\
+				c.u64 = csr_rd(address);		\
+				if ((c.s.field)op(value)) {		\
+					result = 0;			\
+					break;				\
+				} else if (get_timer(done) > ((to_us) / 1000)) { \
+					result = -1;			\
+					break;				\
+				} else					\
+					udelay(100);			\
+			}						\
+		} while (0);						\
+		result;							\
+	})
 
 /* ToDo: Currently only node = 0 supported */
+#define cvmx_get_node_num()	0
+
 static inline u64 csr_rd_node(int node, u64 addr)
 {
 	void __iomem *base;
@@ -76,11 +146,24 @@
 	return ioread64(base);
 }
 
+static inline u32 csr_rd32_node(int node, u64 addr)
+{
+	void __iomem *base;
+
+	base = ioremap_nocache(addr, 0x100);
+	return ioread32(base);
+}
+
 static inline u64 csr_rd(u64 addr)
 {
 	return csr_rd_node(0, addr);
 }
 
+static inline u32 csr_rd32(u64 addr)
+{
+	return csr_rd32_node(0, addr);
+}
+
 static inline void csr_wr_node(int node, u64 addr, u64 val)
 {
 	void __iomem *base;
@@ -89,11 +172,24 @@
 	iowrite64(val, base);
 }
 
+static inline void csr_wr32_node(int node, u64 addr, u32 val)
+{
+	void __iomem *base;
+
+	base = ioremap_nocache(addr, 0x100);
+	iowrite32(val, base);
+}
+
 static inline void csr_wr(u64 addr, u64 val)
 {
 	csr_wr_node(0, addr, val);
 }
 
+static inline void csr_wr32(u64 addr, u32 val)
+{
+	csr_wr32_node(0, addr, val);
+}
+
 /*
  * We need to use the volatile access here, otherwise the IO accessor
  * functions might swap the bytes
@@ -103,21 +199,173 @@
 	return *(volatile u64 *)addr;
 }
 
+static inline s64 cvmx_read64_int64(u64 addr)
+{
+	return *(volatile s64 *)addr;
+}
+
 static inline void cvmx_write64_uint64(u64 addr, u64 val)
 {
 	*(volatile u64 *)addr = val;
 }
 
+static inline void cvmx_write64_int64(u64 addr, s64 val)
+{
+	*(volatile s64 *)addr = val;
+}
+
 static inline u32 cvmx_read64_uint32(u64 addr)
 {
 	return *(volatile u32 *)addr;
 }
 
+static inline s32 cvmx_read64_int32(u64 addr)
+{
+	return *(volatile s32 *)addr;
+}
+
 static inline void cvmx_write64_uint32(u64 addr, u32 val)
 {
 	*(volatile u32 *)addr = val;
 }
 
+static inline void cvmx_write64_int32(u64 addr, s32 val)
+{
+	*(volatile s32 *)addr = val;
+}
+
+static inline void cvmx_write64_int16(u64 addr, s16 val)
+{
+	*(volatile s16 *)addr = val;
+}
+
+static inline void cvmx_write64_uint16(u64 addr, u16 val)
+{
+	*(volatile u16 *)addr = val;
+}
+
+static inline void cvmx_write64_int8(u64 addr, int8_t val)
+{
+	*(volatile int8_t *)addr = val;
+}
+
+static inline void cvmx_write64_uint8(u64 addr, u8 val)
+{
+	*(volatile u8 *)addr = val;
+}
+
+static inline s16 cvmx_read64_int16(u64 addr)
+{
+	return *(volatile s16 *)addr;
+}
+
+static inline u16 cvmx_read64_uint16(u64 addr)
+{
+	return *(volatile u16 *)addr;
+}
+
+static inline int8_t cvmx_read64_int8(u64 addr)
+{
+	return *(volatile int8_t *)addr;
+}
+
+static inline u8 cvmx_read64_uint8(u64 addr)
+{
+	return *(volatile u8 *)addr;
+}
+
+static inline void cvmx_send_single(u64 data)
+{
+	cvmx_write64_uint64(CVMX_IOBDMA_ORDERED_IO_ADDR, data);
+}
+
+/**
+ * Perform a 64-bit write to an IO address
+ *
+ * @param io_addr	I/O address to write to
+ * @param val		64-bit value to write
+ */
+static inline void cvmx_write_io(u64 io_addr, u64 val)
+{
+	cvmx_write64_uint64(io_addr, val);
+}
+
+/**
+ * Builds a memory address for I/O based on the Major and Sub DID.
+ *
+ * @param major_did 5 bit major did
+ * @param sub_did   3 bit sub did
+ * @return I/O base address
+ */
+static inline u64 cvmx_build_io_address(u64 major_did, u64 sub_did)
+{
+	return ((0x1ull << 48) | (major_did << 43) | (sub_did << 40));
+}
+
+/**
+ * Builds a bit mask given the required size in bits.
+ *
+ * @param bits   Number of bits in the mask
+ * @return The mask
+ */
+static inline u64 cvmx_build_mask(u64 bits)
+{
+	if (bits == 64)
+		return -1;
+
+	return ~((~0x0ull) << bits);
+}
+
+/**
+ * Extract bits out of a number
+ *
+ * @param input  Number to extract from
+ * @param lsb    Starting bit, least significant (0-63)
+ * @param width  Width in bits (1-64)
+ *
+ * @return Extracted number
+ */
+static inline u64 cvmx_bit_extract(u64 input, int lsb, int width)
+{
+	u64 result = input >> lsb;
+
+	result &= cvmx_build_mask(width);
+
+	return result;
+}
+
+/**
+ * Perform mask and shift to place the supplied value into
+ * the supplied bit rage.
+ *
+ * Example: cvmx_build_bits(39,24,value)
+ * <pre>
+ * 6       5       4       3       3       2       1
+ * 3       5       7       9       1       3       5       7      0
+ * +-------+-------+-------+-------+-------+-------+-------+------+
+ * 000000000000000000000000___________value000000000000000000000000
+ * </pre>
+ *
+ * @param high_bit Highest bit value can occupy (inclusive) 0-63
+ * @param low_bit  Lowest bit value can occupy inclusive 0-high_bit
+ * @param value    Value to use
+ * @return Value masked and shifted
+ */
+static inline u64 cvmx_build_bits(u64 high_bit, u64 low_bit, u64 value)
+{
+	return ((value & cvmx_build_mask(high_bit - low_bit + 1)) << low_bit);
+}
+
+static inline u64 cvmx_mask_to_localaddr(u64 addr)
+{
+	return (addr & 0xffffffffff);
+}
+
+static inline u64 cvmx_addr_on_node(u64 node, u64 addr)
+{
+	return (node << 40) | cvmx_mask_to_localaddr(addr);
+}
+
 static inline void *cvmx_phys_to_ptr(u64 addr)
 {
 	return (void *)CKSEG0ADDR(addr);
@@ -141,4 +389,53 @@
 	return core_num;
 }
 
+/**
+ * Node-local number of the core on which the program is currently running.
+ *
+ * @return core number on local node
+ */
+static inline unsigned int cvmx_get_local_core_num(void)
+{
+	unsigned int core_num, core_mask;
+
+	CVMX_RDHWRNV(core_num, 0);
+	/* note that MAX_CORES may not be power of 2 */
+	core_mask = (1 << CVMX_NODE_NO_SHIFT) - 1;
+
+	return core_num & core_mask;
+}
+
+/**
+ * Returns the number of bits set in the provided value.
+ * Simple wrapper for POP instruction.
+ *
+ * @param val    32 bit value to count set bits in
+ *
+ * @return Number of bits set
+ */
+static inline u32 cvmx_pop(u32 val)
+{
+	u32 pop;
+
+	CVMX_POP(pop, val);
+
+	return pop;
+}
+
+#define cvmx_read_csr_node(node, addr)	     csr_rd(addr)
+#define cvmx_write_csr_node(node, addr, val) csr_wr(addr, val)
+
+#define cvmx_printf  printf
+#define cvmx_vprintf vprintf
+
+#if defined(DEBUG)
+void cvmx_warn(const char *format, ...) __printf(1, 2);
+#else
+void cvmx_warn(const char *format, ...);
+#endif
+
+#define cvmx_warn_if(expression, format, ...)				\
+	if (expression)							\
+		cvmx_warn(format, ##__VA_ARGS__)
+
 #endif /* __CVMX_REGS_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-rst-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-rst-defs.h
new file mode 100644
index 0000000..943e160
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-rst-defs.h
@@ -0,0 +1,77 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_RST_DEFS_H__
+#define __CVMX_RST_DEFS_H__
+
+#define CVMX_RST_CTLX(offset)	    (0x0001180006001640ull + ((offset) & 3) * 8)
+#define CVMX_RST_SOFT_PRSTX(offset) (0x00011800060016C0ull + ((offset) & 3) * 8)
+
+/**
+ * cvmx_rst_ctl#
+ */
+union cvmx_rst_ctlx {
+	u64 u64;
+	struct cvmx_rst_ctlx_s {
+		u64 reserved_10_63 : 54;
+		u64 prst_link : 1;
+		u64 rst_done : 1;
+		u64 rst_link : 1;
+		u64 host_mode : 1;
+		u64 reserved_4_5 : 2;
+		u64 rst_drv : 1;
+		u64 rst_rcv : 1;
+		u64 rst_chip : 1;
+		u64 rst_val : 1;
+	} s;
+	struct cvmx_rst_ctlx_s cn70xx;
+	struct cvmx_rst_ctlx_s cn70xxp1;
+	struct cvmx_rst_ctlx_s cn73xx;
+	struct cvmx_rst_ctlx_s cn78xx;
+	struct cvmx_rst_ctlx_s cn78xxp1;
+	struct cvmx_rst_ctlx_s cnf75xx;
+};
+
+typedef union cvmx_rst_ctlx cvmx_rst_ctlx_t;
+
+/**
+ * cvmx_rst_soft_prst#
+ */
+union cvmx_rst_soft_prstx {
+	u64 u64;
+	struct cvmx_rst_soft_prstx_s {
+		u64 reserved_1_63 : 63;
+		u64 soft_prst : 1;
+	} s;
+	struct cvmx_rst_soft_prstx_s cn70xx;
+	struct cvmx_rst_soft_prstx_s cn70xxp1;
+	struct cvmx_rst_soft_prstx_s cn73xx;
+	struct cvmx_rst_soft_prstx_s cn78xx;
+	struct cvmx_rst_soft_prstx_s cn78xxp1;
+	struct cvmx_rst_soft_prstx_s cnf75xx;
+};
+
+typedef union cvmx_rst_soft_prstx cvmx_rst_soft_prstx_t;
+
+/**
+ * cvmx_rst_soft_rst
+ */
+union cvmx_rst_soft_rst {
+	u64 u64;
+	struct cvmx_rst_soft_rst_s {
+		u64 reserved_1_63 : 63;
+		u64 soft_rst : 1;
+	} s;
+	struct cvmx_rst_soft_rst_s cn70xx;
+	struct cvmx_rst_soft_rst_s cn70xxp1;
+	struct cvmx_rst_soft_rst_s cn73xx;
+	struct cvmx_rst_soft_rst_s cn78xx;
+	struct cvmx_rst_soft_rst_s cn78xxp1;
+	struct cvmx_rst_soft_rst_s cnf75xx;
+};
+
+typedef union cvmx_rst_soft_rst cvmx_rst_soft_rst_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-sata-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-sata-defs.h
new file mode 100644
index 0000000..77af0e3
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-sata-defs.h
@@ -0,0 +1,311 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_SATA_DEFS_H__
+#define __CVMX_SATA_DEFS_H__
+
+#define CVMX_SATA_UCTL_CTL	   (0x000118006C000000ull)
+#define CVMX_SATA_UCTL_SHIM_CFG	   (0x000118006C0000E8ull)
+#define CVMX_SATA_UCTL_BIST_STATUS (0x000118006C000008ull)
+
+#define CVMX_SATA_UAHC_GBL_PI	    (0x00016C000000000Cull)
+#define CVMX_SATA_UAHC_GBL_TIMER1MS (0x00016C00000000E0ull)
+#define CVMX_SATA_UAHC_GBL_CAP	    (0x00016C0000000000ull)
+
+#define CVMX_SATA_UAHC_PX_CMD(offset)  (0x00016C0000000118ull + ((offset) & 1) * 128)
+#define CVMX_SATA_UAHC_PX_SCTL(offset) (0x00016C000000012Cull + ((offset) & 1) * 128)
+#define CVMX_SATA_UAHC_PX_SERR(offset) (0x00016C0000000130ull + ((offset) & 1) * 128)
+#define CVMX_SATA_UAHC_PX_IS(offset)   (0x00016C0000000110ull + ((offset) & 1) * 128)
+#define CVMX_SATA_UAHC_PX_SSTS(offset) (0x00016C0000000128ull + ((offset) & 1) * 128)
+#define CVMX_SATA_UAHC_PX_TFD(offset)  (0x00016C0000000120ull + ((offset) & 1) * 128)
+
+/**
+ * cvmx_sata_uctl_ctl
+ *
+ * This register controls clocks, resets, power, and BIST for the SATA.
+ *
+ * Accessible always.
+ *
+ * Reset by IOI reset.
+ */
+union cvmx_sata_uctl_ctl {
+	u64 u64;
+	struct cvmx_sata_uctl_ctl_s {
+		u64 clear_bist : 1;
+		u64 start_bist : 1;
+		u64 reserved_31_61 : 31;
+		u64 a_clk_en : 1;
+		u64 a_clk_byp_sel : 1;
+		u64 a_clkdiv_rst : 1;
+		u64 reserved_27_27 : 1;
+		u64 a_clkdiv_sel : 3;
+		u64 reserved_5_23 : 19;
+		u64 csclk_en : 1;
+		u64 reserved_2_3 : 2;
+		u64 sata_uahc_rst : 1;
+		u64 sata_uctl_rst : 1;
+	} s;
+	struct cvmx_sata_uctl_ctl_s cn70xx;
+	struct cvmx_sata_uctl_ctl_s cn70xxp1;
+	struct cvmx_sata_uctl_ctl_s cn73xx;
+};
+
+typedef union cvmx_sata_uctl_ctl cvmx_sata_uctl_ctl_t;
+
+/**
+ * cvmx_sata_uctl_bist_status
+ *
+ * Results from BIST runs of SATA's memories.
+ * Wait for NDONE==0, then look at defect indication.
+ *
+ * Accessible always.
+ *
+ * Reset by IOI reset.
+ */
+union cvmx_sata_uctl_bist_status {
+	u64 u64;
+	struct cvmx_sata_uctl_bist_status_s {
+		u64 reserved_42_63 : 22;
+		u64 uctl_xm_r_bist_ndone : 1;
+		u64 uctl_xm_w_bist_ndone : 1;
+		u64 reserved_36_39 : 4;
+		u64 uahc_p0_rxram_bist_ndone : 1;
+		u64 uahc_p1_rxram_bist_ndone : 1;
+		u64 uahc_p0_txram_bist_ndone : 1;
+		u64 uahc_p1_txram_bist_ndone : 1;
+		u64 reserved_10_31 : 22;
+		u64 uctl_xm_r_bist_status : 1;
+		u64 uctl_xm_w_bist_status : 1;
+		u64 reserved_4_7 : 4;
+		u64 uahc_p0_rxram_bist_status : 1;
+		u64 uahc_p1_rxram_bist_status : 1;
+		u64 uahc_p0_txram_bist_status : 1;
+		u64 uahc_p1_txram_bist_status : 1;
+	} s;
+	struct cvmx_sata_uctl_bist_status_s cn70xx;
+	struct cvmx_sata_uctl_bist_status_s cn70xxp1;
+	struct cvmx_sata_uctl_bist_status_s cn73xx;
+};
+
+typedef union cvmx_sata_uctl_bist_status cvmx_sata_uctl_bist_status_t;
+
+/**
+ * cvmx_sata_uctl_shim_cfg
+ *
+ * This register allows configuration of various shim (UCTL) features.
+ *
+ * Fields XS_NCB_OOB_* are captured when there are no outstanding OOB errors indicated in INTSTAT
+ * and a new OOB error arrives.
+ *
+ * Fields XS_BAD_DMA_* are captured when there are no outstanding DMA errors indicated in INTSTAT
+ * and a new DMA error arrives.
+ *
+ * Accessible only when SATA_UCTL_CTL[A_CLK_EN].
+ *
+ * Reset by IOI reset or SATA_UCTL_CTL[SATA_UCTL_RST].
+ */
+union cvmx_sata_uctl_shim_cfg {
+	u64 u64;
+	struct cvmx_sata_uctl_shim_cfg_s {
+		u64 xs_ncb_oob_wrn : 1;
+		u64 reserved_60_62 : 3;
+		u64 xs_ncb_oob_osrc : 12;
+		u64 xm_bad_dma_wrn : 1;
+		u64 reserved_44_46 : 3;
+		u64 xm_bad_dma_type : 4;
+		u64 reserved_14_39 : 26;
+		u64 dma_read_cmd : 2;
+		u64 reserved_11_11 : 1;
+		u64 dma_write_cmd : 1;
+		u64 dma_endian_mode : 2;
+		u64 reserved_2_7 : 6;
+		u64 csr_endian_mode : 2;
+	} s;
+	struct cvmx_sata_uctl_shim_cfg_cn70xx {
+		u64 xs_ncb_oob_wrn : 1;
+		u64 reserved_57_62 : 6;
+		u64 xs_ncb_oob_osrc : 9;
+		u64 xm_bad_dma_wrn : 1;
+		u64 reserved_44_46 : 3;
+		u64 xm_bad_dma_type : 4;
+		u64 reserved_13_39 : 27;
+		u64 dma_read_cmd : 1;
+		u64 reserved_10_11 : 2;
+		u64 dma_endian_mode : 2;
+		u64 reserved_2_7 : 6;
+		u64 csr_endian_mode : 2;
+	} cn70xx;
+	struct cvmx_sata_uctl_shim_cfg_cn70xx cn70xxp1;
+	struct cvmx_sata_uctl_shim_cfg_s cn73xx;
+};
+
+typedef union cvmx_sata_uctl_shim_cfg cvmx_sata_uctl_shim_cfg_t;
+
+/**
+ * cvmx_sata_uahc_gbl_cap
+ *
+ * See AHCI specification v1.3 section 3.1
+ *
+ */
+union cvmx_sata_uahc_gbl_cap {
+	u32 u32;
+	struct cvmx_sata_uahc_gbl_cap_s {
+		u32 s64a : 1;
+		u32 sncq : 1;
+		u32 ssntf : 1;
+		u32 smps : 1;
+		u32 sss : 1;
+		u32 salp : 1;
+		u32 sal : 1;
+		u32 sclo : 1;
+		u32 iss : 4;
+		u32 snzo : 1;
+		u32 sam : 1;
+		u32 spm : 1;
+		u32 fbss : 1;
+		u32 pmd : 1;
+		u32 ssc : 1;
+		u32 psc : 1;
+		u32 ncs : 5;
+		u32 cccs : 1;
+		u32 ems : 1;
+		u32 sxs : 1;
+		u32 np : 5;
+	} s;
+	struct cvmx_sata_uahc_gbl_cap_s cn70xx;
+	struct cvmx_sata_uahc_gbl_cap_s cn70xxp1;
+	struct cvmx_sata_uahc_gbl_cap_s cn73xx;
+};
+
+typedef union cvmx_sata_uahc_gbl_cap cvmx_sata_uahc_gbl_cap_t;
+
+/**
+ * cvmx_sata_uahc_p#_sctl
+ */
+union cvmx_sata_uahc_px_sctl {
+	u32 u32;
+	struct cvmx_sata_uahc_px_sctl_s {
+		u32 reserved_10_31 : 22;
+		u32 ipm : 2;
+		u32 reserved_6_7 : 2;
+		u32 spd : 2;
+		u32 reserved_3_3 : 1;
+		u32 det : 3;
+	} s;
+	struct cvmx_sata_uahc_px_sctl_s cn70xx;
+	struct cvmx_sata_uahc_px_sctl_s cn70xxp1;
+	struct cvmx_sata_uahc_px_sctl_s cn73xx;
+};
+
+typedef union cvmx_sata_uahc_px_sctl cvmx_sata_uahc_px_sctl_t;
+
+/**
+ * cvmx_sata_uahc_p#_cmd
+ */
+union cvmx_sata_uahc_px_cmd {
+	u32 u32;
+	struct cvmx_sata_uahc_px_cmd_s {
+		u32 icc : 4;
+		u32 asp : 1;
+		u32 alpe : 1;
+		u32 dlae : 1;
+		u32 atapi : 1;
+		u32 apste : 1;
+		u32 fbscp : 1;
+		u32 esp : 1;
+		u32 cpd : 1;
+		u32 mpsp : 1;
+		u32 hpcp : 1;
+		u32 pma : 1;
+		u32 cps : 1;
+		u32 cr : 1;
+		u32 fr : 1;
+		u32 mpss : 1;
+		u32 ccs : 5;
+		u32 reserved_5_7 : 3;
+		u32 fre : 1;
+		u32 clo : 1;
+		u32 pod : 1;
+		u32 sud : 1;
+		u32 st : 1;
+	} s;
+	struct cvmx_sata_uahc_px_cmd_s cn70xx;
+	struct cvmx_sata_uahc_px_cmd_s cn70xxp1;
+	struct cvmx_sata_uahc_px_cmd_s cn73xx;
+};
+
+typedef union cvmx_sata_uahc_px_cmd cvmx_sata_uahc_px_cmd_t;
+
+/**
+ * cvmx_sata_uahc_gbl_pi
+ *
+ * See AHCI specification v1.3 section 3.1.
+ *
+ */
+union cvmx_sata_uahc_gbl_pi {
+	u32 u32;
+	struct cvmx_sata_uahc_gbl_pi_s {
+		u32 reserved_2_31 : 30;
+		u32 pi : 2;
+	} s;
+	struct cvmx_sata_uahc_gbl_pi_s cn70xx;
+	struct cvmx_sata_uahc_gbl_pi_s cn70xxp1;
+	struct cvmx_sata_uahc_gbl_pi_s cn73xx;
+};
+
+typedef union cvmx_sata_uahc_gbl_pi cvmx_sata_uahc_gbl_pi_t;
+
+/**
+ * cvmx_sata_uahc_p#_ssts
+ */
+union cvmx_sata_uahc_px_ssts {
+	u32 u32;
+	struct cvmx_sata_uahc_px_ssts_s {
+		u32 reserved_12_31 : 20;
+		u32 ipm : 4;
+		u32 spd : 4;
+		u32 det : 4;
+	} s;
+	struct cvmx_sata_uahc_px_ssts_s cn70xx;
+	struct cvmx_sata_uahc_px_ssts_s cn70xxp1;
+	struct cvmx_sata_uahc_px_ssts_s cn73xx;
+};
+
+typedef union cvmx_sata_uahc_px_ssts cvmx_sata_uahc_px_ssts_t;
+
+/**
+ * cvmx_sata_uahc_p#_tfd
+ */
+union cvmx_sata_uahc_px_tfd {
+	u32 u32;
+	struct cvmx_sata_uahc_px_tfd_s {
+		u32 reserved_16_31 : 16;
+		u32 tferr : 8;
+		u32 sts : 8;
+	} s;
+	struct cvmx_sata_uahc_px_tfd_s cn70xx;
+	struct cvmx_sata_uahc_px_tfd_s cn70xxp1;
+	struct cvmx_sata_uahc_px_tfd_s cn73xx;
+};
+
+typedef union cvmx_sata_uahc_px_tfd cvmx_sata_uahc_px_tfd_t;
+
+/**
+ * cvmx_sata_uahc_gbl_timer1ms
+ */
+union cvmx_sata_uahc_gbl_timer1ms {
+	u32 u32;
+	struct cvmx_sata_uahc_gbl_timer1ms_s {
+		u32 reserved_20_31 : 12;
+		u32 timv : 20;
+	} s;
+	struct cvmx_sata_uahc_gbl_timer1ms_s cn70xx;
+	struct cvmx_sata_uahc_gbl_timer1ms_s cn70xxp1;
+	struct cvmx_sata_uahc_gbl_timer1ms_s cn73xx;
+};
+
+typedef union cvmx_sata_uahc_gbl_timer1ms cvmx_sata_uahc_gbl_timer1ms_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-scratch.h b/arch/mips/mach-octeon/include/mach/cvmx-scratch.h
new file mode 100644
index 0000000..d567a84
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-scratch.h
@@ -0,0 +1,113 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * This file provides support for the processor local scratch memory.
+ * Scratch memory is byte addressable - all addresses are byte addresses.
+ */
+
+#ifndef __CVMX_SCRATCH_H__
+#define __CVMX_SCRATCH_H__
+
+/* Note: This define must be a long, not a long long in order to compile
+	without warnings for both 32bit and 64bit. */
+#define CVMX_SCRATCH_BASE (-32768l) /* 0xffffffffffff8000 */
+
+/* Scratch line for LMTST/LMTDMA on Octeon3 models */
+#ifdef CVMX_CAVIUM_OCTEON3
+#define CVMX_PKO_LMTLINE 2ull
+#endif
+
+/**
+ * Reads an 8 bit value from the processor local scratchpad memory.
+ *
+ * @param address byte address to read from
+ *
+ * @return value read
+ */
+static inline u8 cvmx_scratch_read8(u64 address)
+{
+	return *CASTPTR(volatile u8, CVMX_SCRATCH_BASE + address);
+}
+
+/**
+ * Reads a 16 bit value from the processor local scratchpad memory.
+ *
+ * @param address byte address to read from
+ *
+ * @return value read
+ */
+static inline u16 cvmx_scratch_read16(u64 address)
+{
+	return *CASTPTR(volatile u16, CVMX_SCRATCH_BASE + address);
+}
+
+/**
+ * Reads a 32 bit value from the processor local scratchpad memory.
+ *
+ * @param address byte address to read from
+ *
+ * @return value read
+ */
+static inline u32 cvmx_scratch_read32(u64 address)
+{
+	return *CASTPTR(volatile u32, CVMX_SCRATCH_BASE + address);
+}
+
+/**
+ * Reads a 64 bit value from the processor local scratchpad memory.
+ *
+ * @param address byte address to read from
+ *
+ * @return value read
+ */
+static inline u64 cvmx_scratch_read64(u64 address)
+{
+	return *CASTPTR(volatile u64, CVMX_SCRATCH_BASE + address);
+}
+
+/**
+ * Writes an 8 bit value to the processor local scratchpad memory.
+ *
+ * @param address byte address to write to
+ * @param value   value to write
+ */
+static inline void cvmx_scratch_write8(u64 address, u64 value)
+{
+	*CASTPTR(volatile u8, CVMX_SCRATCH_BASE + address) = (u8)value;
+}
+
+/**
+ * Writes a 32 bit value to the processor local scratchpad memory.
+ *
+ * @param address byte address to write to
+ * @param value   value to write
+ */
+static inline void cvmx_scratch_write16(u64 address, u64 value)
+{
+	*CASTPTR(volatile u16, CVMX_SCRATCH_BASE + address) = (u16)value;
+}
+
+/**
+ * Writes a 16 bit value to the processor local scratchpad memory.
+ *
+ * @param address byte address to write to
+ * @param value   value to write
+ */
+static inline void cvmx_scratch_write32(u64 address, u64 value)
+{
+	*CASTPTR(volatile u32, CVMX_SCRATCH_BASE + address) = (u32)value;
+}
+
+/**
+ * Writes a 64 bit value to the processor local scratchpad memory.
+ *
+ * @param address byte address to write to
+ * @param value   value to write
+ */
+static inline void cvmx_scratch_write64(u64 address, u64 value)
+{
+	*CASTPTR(volatile u64, CVMX_SCRATCH_BASE + address) = value;
+}
+
+#endif /* __CVMX_SCRATCH_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-sli-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-sli-defs.h
new file mode 100644
index 0000000..221ed1b
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-sli-defs.h
@@ -0,0 +1,6548 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon sli.
+ */
+
+#ifndef __CVMX_SLI_DEFS_H__
+#define __CVMX_SLI_DEFS_H__
+
+#define CVMX_SLI_BIST_STATUS CVMX_SLI_BIST_STATUS_FUNC()
+static inline u64 CVMX_SLI_BIST_STATUS_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000580ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000580ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000028580ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000028580ull;
+	}
+	return 0x0000000000028580ull;
+}
+
+#define CVMX_SLI_CIU_INT_ENB (0x00011F0000027110ull)
+#define CVMX_SLI_CIU_INT_SUM (0x00011F0000027100ull)
+static inline u64 CVMX_SLI_CTL_PORTX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000050ull + (offset) * 16;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010050ull + (offset) * 16;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000050ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000006E0ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000286E0ull + (offset) * 16;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000286E0ull + (offset) * 16;
+	}
+	return 0x00000000000286E0ull + (offset) * 16;
+}
+
+#define CVMX_SLI_CTL_STATUS CVMX_SLI_CTL_STATUS_FUNC()
+static inline u64 CVMX_SLI_CTL_STATUS_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000570ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000570ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000028570ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000028570ull;
+	}
+	return 0x0000000000028570ull;
+}
+
+#define CVMX_SLI_DATA_OUT_CNT CVMX_SLI_DATA_OUT_CNT_FUNC()
+static inline u64 CVMX_SLI_DATA_OUT_CNT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000005F0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000005F0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000285F0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000285F0ull;
+	}
+	return 0x00000000000285F0ull;
+}
+
+#define CVMX_SLI_DBG_DATA   (0x0000000000000310ull)
+#define CVMX_SLI_DBG_SELECT (0x0000000000000300ull)
+static inline u64 CVMX_SLI_DMAX_CNT(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000400ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000400ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000028400ull + (offset) * 16;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000028400ull + (offset) * 16;
+	}
+	return 0x0000000000028400ull + (offset) * 16;
+}
+
+static inline u64 CVMX_SLI_DMAX_INT_LEVEL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000003E0ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000003E0ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000283E0ull + (offset) * 16;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000283E0ull + (offset) * 16;
+	}
+	return 0x00000000000283E0ull + (offset) * 16;
+}
+
+static inline u64 CVMX_SLI_DMAX_TIM(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000420ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000420ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000028420ull + (offset) * 16;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000028420ull + (offset) * 16;
+	}
+	return 0x0000000000028420ull + (offset) * 16;
+}
+
+#define CVMX_SLI_INT_ENB_CIU	       (0x0000000000003CD0ull)
+#define CVMX_SLI_INT_ENB_PORTX(offset) (0x0000000000000340ull + ((offset) & 3) * 16)
+#define CVMX_SLI_INT_SUM	       (0x0000000000000330ull)
+#define CVMX_SLI_LAST_WIN_RDATA0       (0x0000000000000600ull)
+#define CVMX_SLI_LAST_WIN_RDATA1       (0x0000000000000610ull)
+#define CVMX_SLI_LAST_WIN_RDATA2       (0x00000000000006C0ull)
+#define CVMX_SLI_LAST_WIN_RDATA3       (0x00000000000006D0ull)
+#define CVMX_SLI_MACX_PFX_DMA_VF_INT(offset, block_id)                                             \
+	(0x0000000000027280ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_MACX_PFX_DMA_VF_INT_ENB(offset, block_id)                                         \
+	(0x0000000000027500ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_MACX_PFX_FLR_VF_INT(offset, block_id)                                             \
+	(0x0000000000027400ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_MACX_PFX_INT_ENB(offset, block_id)                                                \
+	(0x0000000000027080ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_MACX_PFX_INT_SUM(offset, block_id)                                                \
+	(0x0000000000027000ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_MACX_PFX_MBOX_INT(offset, block_id)                                               \
+	(0x0000000000027380ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_MACX_PFX_PKT_VF_INT(offset, block_id)                                             \
+	(0x0000000000027300ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_MACX_PFX_PKT_VF_INT_ENB(offset, block_id)                                         \
+	(0x0000000000027580ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_MACX_PFX_PP_VF_INT(offset, block_id)                                              \
+	(0x0000000000027200ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_MACX_PFX_PP_VF_INT_ENB(offset, block_id)                                          \
+	(0x0000000000027480ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_MAC_CREDIT_CNT CVMX_SLI_MAC_CREDIT_CNT_FUNC()
+static inline u64 CVMX_SLI_MAC_CREDIT_CNT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003D70ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003D70ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000023D70ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000023D70ull;
+	}
+	return 0x0000000000023D70ull;
+}
+
+#define CVMX_SLI_MAC_CREDIT_CNT2 CVMX_SLI_MAC_CREDIT_CNT2_FUNC()
+static inline u64 CVMX_SLI_MAC_CREDIT_CNT2_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000013E10ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003E10ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000023E10ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000023E10ull;
+	}
+	return 0x0000000000023E10ull;
+}
+
+#define CVMX_SLI_MAC_NUMBER CVMX_SLI_MAC_NUMBER_FUNC()
+static inline u64 CVMX_SLI_MAC_NUMBER_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003E00ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003E00ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000020050ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000020050ull;
+	}
+	return 0x0000000000020050ull;
+}
+
+#define CVMX_SLI_MEM_ACCESS_CTL CVMX_SLI_MEM_ACCESS_CTL_FUNC()
+static inline u64 CVMX_SLI_MEM_ACCESS_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000002F0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000002F0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000282F0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000282F0ull;
+	}
+	return 0x00000000000282F0ull;
+}
+
+static inline u64 CVMX_SLI_MEM_ACCESS_SUBIDX(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000000E0ull + (offset) * 16 - 16 * 12;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000000E0ull + (offset) * 16 - 16 * 12;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000280E0ull + (offset) * 16 - 16 * 12;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000280E0ull + (offset) * 16 - 16 * 12;
+	}
+	return 0x00000000000280E0ull + (offset) * 16 - 16 * 12;
+}
+
+#define CVMX_SLI_MEM_CTL CVMX_SLI_MEM_CTL_FUNC()
+static inline u64 CVMX_SLI_MEM_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000005E0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000285E0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000285E0ull;
+	}
+	return 0x00000000000285E0ull;
+}
+
+#define CVMX_SLI_MEM_INT_SUM CVMX_SLI_MEM_INT_SUM_FUNC()
+static inline u64 CVMX_SLI_MEM_INT_SUM_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000005D0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000285D0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000285D0ull;
+	}
+	return 0x00000000000285D0ull;
+}
+
+static inline u64 CVMX_SLI_MSIXX_TABLE_ADDR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000006000ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000000000ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000000ull + (offset) * 16;
+	}
+	return 0x0000000000000000ull + (offset) * 16;
+}
+
+static inline u64 CVMX_SLI_MSIXX_TABLE_DATA(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000006008ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000000008ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000008ull + (offset) * 16;
+	}
+	return 0x0000000000000008ull + (offset) * 16;
+}
+
+#define CVMX_SLI_MSIX_MACX_PF_TABLE_ADDR(offset) (0x0000000000007C00ull + ((offset) & 3) * 16)
+#define CVMX_SLI_MSIX_MACX_PF_TABLE_DATA(offset) (0x0000000000007C08ull + ((offset) & 3) * 16)
+#define CVMX_SLI_MSIX_PBA0			 CVMX_SLI_MSIX_PBA0_FUNC()
+static inline u64 CVMX_SLI_MSIX_PBA0_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000007000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000001000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000001000ull;
+	}
+	return 0x0000000000001000ull;
+}
+
+#define CVMX_SLI_MSIX_PBA1 CVMX_SLI_MSIX_PBA1_FUNC()
+static inline u64 CVMX_SLI_MSIX_PBA1_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000007010ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000001008ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000001008ull;
+	}
+	return 0x0000000000001008ull;
+}
+
+#define CVMX_SLI_MSI_ENB0 (0x0000000000003C50ull)
+#define CVMX_SLI_MSI_ENB1 (0x0000000000003C60ull)
+#define CVMX_SLI_MSI_ENB2 (0x0000000000003C70ull)
+#define CVMX_SLI_MSI_ENB3 (0x0000000000003C80ull)
+#define CVMX_SLI_MSI_RCV0 CVMX_SLI_MSI_RCV0_FUNC()
+static inline u64 CVMX_SLI_MSI_RCV0_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003C10ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003C10ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000023C10ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000023C10ull;
+	}
+	return 0x0000000000023C10ull;
+}
+
+#define CVMX_SLI_MSI_RCV1 CVMX_SLI_MSI_RCV1_FUNC()
+static inline u64 CVMX_SLI_MSI_RCV1_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003C20ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003C20ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000023C20ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000023C20ull;
+	}
+	return 0x0000000000023C20ull;
+}
+
+#define CVMX_SLI_MSI_RCV2 CVMX_SLI_MSI_RCV2_FUNC()
+static inline u64 CVMX_SLI_MSI_RCV2_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003C30ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003C30ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000023C30ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000023C30ull;
+	}
+	return 0x0000000000023C30ull;
+}
+
+#define CVMX_SLI_MSI_RCV3 CVMX_SLI_MSI_RCV3_FUNC()
+static inline u64 CVMX_SLI_MSI_RCV3_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003C40ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003C40ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000023C40ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000023C40ull;
+	}
+	return 0x0000000000023C40ull;
+}
+
+#define CVMX_SLI_MSI_RD_MAP CVMX_SLI_MSI_RD_MAP_FUNC()
+static inline u64 CVMX_SLI_MSI_RD_MAP_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003CA0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003CA0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000023CA0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000023CA0ull;
+	}
+	return 0x0000000000023CA0ull;
+}
+
+#define CVMX_SLI_MSI_W1C_ENB0 (0x0000000000003CF0ull)
+#define CVMX_SLI_MSI_W1C_ENB1 (0x0000000000003D00ull)
+#define CVMX_SLI_MSI_W1C_ENB2 (0x0000000000003D10ull)
+#define CVMX_SLI_MSI_W1C_ENB3 (0x0000000000003D20ull)
+#define CVMX_SLI_MSI_W1S_ENB0 (0x0000000000003D30ull)
+#define CVMX_SLI_MSI_W1S_ENB1 (0x0000000000003D40ull)
+#define CVMX_SLI_MSI_W1S_ENB2 (0x0000000000003D50ull)
+#define CVMX_SLI_MSI_W1S_ENB3 (0x0000000000003D60ull)
+#define CVMX_SLI_MSI_WR_MAP   CVMX_SLI_MSI_WR_MAP_FUNC()
+static inline u64 CVMX_SLI_MSI_WR_MAP_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003C90ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003C90ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000023C90ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000023C90ull;
+	}
+	return 0x0000000000023C90ull;
+}
+
+#define CVMX_SLI_NQM_RSP_ERR_SND_DBG (0x00011F0000028800ull)
+#define CVMX_SLI_PCIE_MSI_RCV	     CVMX_SLI_PCIE_MSI_RCV_FUNC()
+static inline u64 CVMX_SLI_PCIE_MSI_RCV_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003CB0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003CB0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000023CB0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000023CB0ull;
+	}
+	return 0x0000000000023CB0ull;
+}
+
+#define CVMX_SLI_PCIE_MSI_RCV_B1 CVMX_SLI_PCIE_MSI_RCV_B1_FUNC()
+static inline u64 CVMX_SLI_PCIE_MSI_RCV_B1_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000650ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000650ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000028650ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000028650ull;
+	}
+	return 0x0000000000028650ull;
+}
+
+#define CVMX_SLI_PCIE_MSI_RCV_B2 CVMX_SLI_PCIE_MSI_RCV_B2_FUNC()
+static inline u64 CVMX_SLI_PCIE_MSI_RCV_B2_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000660ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000660ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000028660ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000028660ull;
+	}
+	return 0x0000000000028660ull;
+}
+
+#define CVMX_SLI_PCIE_MSI_RCV_B3 CVMX_SLI_PCIE_MSI_RCV_B3_FUNC()
+static inline u64 CVMX_SLI_PCIE_MSI_RCV_B3_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000670ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000670ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000028670ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000028670ull;
+	}
+	return 0x0000000000028670ull;
+}
+
+static inline u64 CVMX_SLI_PKTX_CNTS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000002400ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000002400ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000100B0ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000100B0ull + (offset) * 0x20000ull;
+	}
+	return 0x00000000000100B0ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_SLI_PKTX_ERROR_INFO(offset) (0x00000000000100C0ull + ((offset) & 63) * 0x20000ull)
+static inline u64 CVMX_SLI_PKTX_INPUT_CONTROL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000004000ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000010000ull + (offset) * 0x20000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010000ull + (offset) * 0x20000ull;
+	}
+	return 0x0000000000010000ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_SLI_PKTX_INSTR_BADDR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000002800ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000002800ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000010010ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010010ull + (offset) * 0x20000ull;
+	}
+	return 0x0000000000010010ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_SLI_PKTX_INSTR_BAOFF_DBELL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000002C00ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000002C00ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000010020ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010020ull + (offset) * 0x20000ull;
+	}
+	return 0x0000000000010020ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_SLI_PKTX_INSTR_FIFO_RSIZE(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003000ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003000ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000010030ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010030ull + (offset) * 0x20000ull;
+	}
+	return 0x0000000000010030ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_SLI_PKTX_INSTR_HEADER(offset) (0x0000000000003400ull + ((offset) & 31) * 16)
+static inline u64 CVMX_SLI_PKTX_INT_LEVELS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000004400ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000100A0ull + (offset) * 0x20000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000100A0ull + (offset) * 0x20000ull;
+	}
+	return 0x00000000000100A0ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_SLI_PKTX_IN_BP(offset)    (0x0000000000003800ull + ((offset) & 31) * 16)
+#define CVMX_SLI_PKTX_MBOX_INT(offset) (0x0000000000010210ull + ((offset) & 63) * 0x20000ull)
+static inline u64 CVMX_SLI_PKTX_OUTPUT_CONTROL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000004800ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000010050ull + (offset) * 0x20000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010050ull + (offset) * 0x20000ull;
+	}
+	return 0x0000000000010050ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_SLI_PKTX_OUT_SIZE(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000C00ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000C00ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000010060ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010060ull + (offset) * 0x20000ull;
+	}
+	return 0x0000000000010060ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_SLI_PKTX_PF_VF_MBOX_SIGX(offset, block_id)                                            \
+	(0x0000000000010200ull + (((offset) & 1) + ((block_id) & 63) * 0x4000ull) * 8)
+static inline u64 CVMX_SLI_PKTX_SLIST_BADDR(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000001400ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000001400ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000010070ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010070ull + (offset) * 0x20000ull;
+	}
+	return 0x0000000000010070ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_SLI_PKTX_SLIST_BAOFF_DBELL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000001800ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000001800ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000010080ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010080ull + (offset) * 0x20000ull;
+	}
+	return 0x0000000000010080ull + (offset) * 0x20000ull;
+}
+
+static inline u64 CVMX_SLI_PKTX_SLIST_FIFO_RSIZE(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000001C00ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000001C00ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000010090ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010090ull + (offset) * 0x20000ull;
+	}
+	return 0x0000000000010090ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_SLI_PKTX_VF_INT_SUM(offset) (0x00000000000100D0ull + ((offset) & 63) * 0x20000ull)
+#define CVMX_SLI_PKTX_VF_SIG(offset)	 (0x0000000000004C00ull + ((offset) & 63) * 16)
+#define CVMX_SLI_PKT_BIST_STATUS	 (0x0000000000029220ull)
+#define CVMX_SLI_PKT_CNT_INT		 CVMX_SLI_PKT_CNT_INT_FUNC()
+static inline u64 CVMX_SLI_PKT_CNT_INT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000001130ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000001130ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000029130ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000029130ull;
+	}
+	return 0x0000000000029130ull;
+}
+
+#define CVMX_SLI_PKT_CNT_INT_ENB   (0x0000000000001150ull)
+#define CVMX_SLI_PKT_CTL	   (0x0000000000001220ull)
+#define CVMX_SLI_PKT_DATA_OUT_ES   (0x00000000000010B0ull)
+#define CVMX_SLI_PKT_DATA_OUT_NS   (0x00000000000010A0ull)
+#define CVMX_SLI_PKT_DATA_OUT_ROR  (0x0000000000001090ull)
+#define CVMX_SLI_PKT_DPADDR	   (0x0000000000001080ull)
+#define CVMX_SLI_PKT_GBL_CONTROL   (0x0000000000029210ull)
+#define CVMX_SLI_PKT_INPUT_CONTROL (0x0000000000001170ull)
+#define CVMX_SLI_PKT_INSTR_ENB	   (0x0000000000001000ull)
+#define CVMX_SLI_PKT_INSTR_RD_SIZE (0x00000000000011A0ull)
+#define CVMX_SLI_PKT_INSTR_SIZE	   (0x0000000000001020ull)
+#define CVMX_SLI_PKT_INT	   CVMX_SLI_PKT_INT_FUNC()
+static inline u64 CVMX_SLI_PKT_INT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000001160ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000029160ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000029160ull;
+	}
+	return 0x0000000000029160ull;
+}
+
+#define CVMX_SLI_PKT_INT_LEVELS (0x0000000000001120ull)
+#define CVMX_SLI_PKT_IN_BP	(0x0000000000001210ull)
+static inline u64 CVMX_SLI_PKT_IN_DONEX_CNTS(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000002000ull + (offset) * 16;
+
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000002000ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000010040ull + (offset) * 0x20000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000010040ull + (offset) * 0x20000ull;
+	}
+	return 0x0000000000010040ull + (offset) * 0x20000ull;
+}
+
+#define CVMX_SLI_PKT_IN_INSTR_COUNTS CVMX_SLI_PKT_IN_INSTR_COUNTS_FUNC()
+static inline u64 CVMX_SLI_PKT_IN_INSTR_COUNTS_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000001200ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000001200ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000029200ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000029200ull;
+	}
+	return 0x0000000000029200ull;
+}
+
+#define CVMX_SLI_PKT_IN_INT CVMX_SLI_PKT_IN_INT_FUNC()
+static inline u64 CVMX_SLI_PKT_IN_INT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000001150ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000029150ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000029150ull;
+	}
+	return 0x0000000000029150ull;
+}
+
+#define CVMX_SLI_PKT_IN_JABBER	  (0x0000000000029170ull)
+#define CVMX_SLI_PKT_IN_PCIE_PORT (0x00000000000011B0ull)
+#define CVMX_SLI_PKT_IPTR	  (0x0000000000001070ull)
+#define CVMX_SLI_PKT_MAC0_SIG0	  (0x0000000000001300ull)
+#define CVMX_SLI_PKT_MAC0_SIG1	  (0x0000000000001310ull)
+#define CVMX_SLI_PKT_MAC1_SIG0	  (0x0000000000001320ull)
+#define CVMX_SLI_PKT_MAC1_SIG1	  (0x0000000000001330ull)
+#define CVMX_SLI_PKT_MACX_PFX_RINFO(offset, block_id)                                              \
+	(0x0000000000029030ull + (((offset) & 1) + ((block_id) & 3) * 0x2ull) * 16)
+#define CVMX_SLI_PKT_MACX_RINFO(offset) (0x0000000000001030ull + ((offset) & 3) * 16)
+#define CVMX_SLI_PKT_MEM_CTL		CVMX_SLI_PKT_MEM_CTL_FUNC()
+static inline u64 CVMX_SLI_PKT_MEM_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000001120ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000029120ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000029120ull;
+	}
+	return 0x0000000000029120ull;
+}
+
+#define CVMX_SLI_PKT_OUTPUT_WMARK CVMX_SLI_PKT_OUTPUT_WMARK_FUNC()
+static inline u64 CVMX_SLI_PKT_OUTPUT_WMARK_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000001180ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000001180ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000029180ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000029180ull;
+	}
+	return 0x0000000000029180ull;
+}
+
+#define CVMX_SLI_PKT_OUT_BMODE	    (0x00000000000010D0ull)
+#define CVMX_SLI_PKT_OUT_BP_EN	    (0x0000000000001240ull)
+#define CVMX_SLI_PKT_OUT_BP_EN2_W1C (0x0000000000029290ull)
+#define CVMX_SLI_PKT_OUT_BP_EN2_W1S (0x0000000000029270ull)
+#define CVMX_SLI_PKT_OUT_BP_EN_W1C  (0x0000000000029280ull)
+#define CVMX_SLI_PKT_OUT_BP_EN_W1S  (0x0000000000029260ull)
+#define CVMX_SLI_PKT_OUT_ENB	    (0x0000000000001010ull)
+#define CVMX_SLI_PKT_PCIE_PORT	    (0x00000000000010E0ull)
+#define CVMX_SLI_PKT_PKIND_VALID    (0x0000000000029190ull)
+#define CVMX_SLI_PKT_PORT_IN_RST    (0x00000000000011F0ull)
+#define CVMX_SLI_PKT_RING_RST	    CVMX_SLI_PKT_RING_RST_FUNC()
+static inline u64 CVMX_SLI_PKT_RING_RST_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000011E0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000291E0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000291E0ull;
+	}
+	return 0x00000000000291E0ull;
+}
+
+#define CVMX_SLI_PKT_SLIST_ES  (0x0000000000001050ull)
+#define CVMX_SLI_PKT_SLIST_NS  (0x0000000000001040ull)
+#define CVMX_SLI_PKT_SLIST_ROR (0x0000000000001030ull)
+#define CVMX_SLI_PKT_TIME_INT  CVMX_SLI_PKT_TIME_INT_FUNC()
+static inline u64 CVMX_SLI_PKT_TIME_INT_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000001140ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000001140ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000029140ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000029140ull;
+	}
+	return 0x0000000000029140ull;
+}
+
+#define CVMX_SLI_PKT_TIME_INT_ENB    (0x0000000000001160ull)
+#define CVMX_SLI_PORTX_PKIND(offset) (0x0000000000000800ull + ((offset) & 31) * 16)
+#define CVMX_SLI_PP_PKT_CSR_CONTROL  (0x00011F00000282D0ull)
+#define CVMX_SLI_S2C_END_MERGE	     CVMX_SLI_S2C_END_MERGE_FUNC()
+static inline u64 CVMX_SLI_S2C_END_MERGE_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00011F0000015000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00011F0000025000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00011F0000025000ull;
+	}
+	return 0x00011F0000025000ull;
+}
+
+static inline u64 CVMX_SLI_S2M_PORTX_CTL(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003D80ull + (offset) * 16;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000003D80ull + (offset) * 16;
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000013D80ull + (offset) * 16;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000003D80ull + (offset) * 16;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000023D80ull + (offset) * 16;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000023D80ull + (offset) * 16;
+	}
+	return 0x0000000000023D80ull + (offset) * 16;
+}
+
+#define CVMX_SLI_SCRATCH_1 CVMX_SLI_SCRATCH_1_FUNC()
+static inline u64 CVMX_SLI_SCRATCH_1_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000003C0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000003C0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000283C0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000283C0ull;
+	}
+	return 0x00000000000283C0ull;
+}
+
+#define CVMX_SLI_SCRATCH_2 CVMX_SLI_SCRATCH_2_FUNC()
+static inline u64 CVMX_SLI_SCRATCH_2_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000003D0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000003D0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000283D0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000283D0ull;
+	}
+	return 0x00000000000283D0ull;
+}
+
+#define CVMX_SLI_STATE1 CVMX_SLI_STATE1_FUNC()
+static inline u64 CVMX_SLI_STATE1_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000620ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000620ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000028620ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000028620ull;
+	}
+	return 0x0000000000028620ull;
+}
+
+#define CVMX_SLI_STATE2 CVMX_SLI_STATE2_FUNC()
+static inline u64 CVMX_SLI_STATE2_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000630ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000630ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000028630ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000028630ull;
+	}
+	return 0x0000000000028630ull;
+}
+
+#define CVMX_SLI_STATE3 CVMX_SLI_STATE3_FUNC()
+static inline u64 CVMX_SLI_STATE3_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000640ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000640ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000028640ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000028640ull;
+	}
+	return 0x0000000000028640ull;
+}
+
+#define CVMX_SLI_TX_PIPE    (0x0000000000001230ull)
+#define CVMX_SLI_WINDOW_CTL CVMX_SLI_WINDOW_CTL_FUNC()
+static inline u64 CVMX_SLI_WINDOW_CTL_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000002E0ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00000000000002E0ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00000000000282E0ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00000000000282E0ull;
+	}
+	return 0x00000000000282E0ull;
+}
+
+#define CVMX_SLI_WIN_RD_ADDR CVMX_SLI_WIN_RD_ADDR_FUNC()
+static inline u64 CVMX_SLI_WIN_RD_ADDR_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000010ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000010ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000020010ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000020010ull;
+	}
+	return 0x0000000000020010ull;
+}
+
+#define CVMX_SLI_WIN_RD_DATA CVMX_SLI_WIN_RD_DATA_FUNC()
+static inline u64 CVMX_SLI_WIN_RD_DATA_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000040ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000040ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000020040ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000020040ull;
+	}
+	return 0x0000000000020040ull;
+}
+
+#define CVMX_SLI_WIN_WR_ADDR CVMX_SLI_WIN_WR_ADDR_FUNC()
+static inline u64 CVMX_SLI_WIN_WR_ADDR_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000000ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000000ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000020000ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000020000ull;
+	}
+	return 0x0000000000020000ull;
+}
+
+#define CVMX_SLI_WIN_WR_DATA CVMX_SLI_WIN_WR_DATA_FUNC()
+static inline u64 CVMX_SLI_WIN_WR_DATA_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000020ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000020ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000020020ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000020020ull;
+	}
+	return 0x0000000000020020ull;
+}
+
+#define CVMX_SLI_WIN_WR_MASK CVMX_SLI_WIN_WR_MASK_FUNC()
+static inline u64 CVMX_SLI_WIN_WR_MASK_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000030ull;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0000000000000030ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0000000000020030ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000020030ull;
+	}
+	return 0x0000000000020030ull;
+}
+
+/**
+ * cvmx_sli_bist_status
+ *
+ * This register contains results from BIST runs of MAC's memories: 0 = pass (or BIST in
+ * progress/never run), 1 = fail.
+ */
+union cvmx_sli_bist_status {
+	u64 u64;
+	struct cvmx_sli_bist_status_s {
+		u64 reserved_32_63 : 32;
+		u64 ncb_req : 1;
+		u64 n2p0_c : 1;
+		u64 n2p0_o : 1;
+		u64 n2p1_c : 1;
+		u64 n2p1_o : 1;
+		u64 cpl_p0 : 1;
+		u64 cpl_p1 : 1;
+		u64 reserved_19_24 : 6;
+		u64 p2n0_c0 : 1;
+		u64 p2n0_c1 : 1;
+		u64 p2n0_n : 1;
+		u64 p2n0_p0 : 1;
+		u64 p2n0_p1 : 1;
+		u64 p2n1_c0 : 1;
+		u64 p2n1_c1 : 1;
+		u64 p2n1_n : 1;
+		u64 p2n1_p0 : 1;
+		u64 p2n1_p1 : 1;
+		u64 reserved_6_8 : 3;
+		u64 dsi1_1 : 1;
+		u64 dsi1_0 : 1;
+		u64 dsi0_1 : 1;
+		u64 dsi0_0 : 1;
+		u64 msi : 1;
+		u64 ncb_cmd : 1;
+	} s;
+	struct cvmx_sli_bist_status_cn61xx {
+		u64 reserved_31_63 : 33;
+		u64 n2p0_c : 1;
+		u64 n2p0_o : 1;
+		u64 reserved_27_28 : 2;
+		u64 cpl_p0 : 1;
+		u64 cpl_p1 : 1;
+		u64 reserved_19_24 : 6;
+		u64 p2n0_c0 : 1;
+		u64 p2n0_c1 : 1;
+		u64 p2n0_n : 1;
+		u64 p2n0_p0 : 1;
+		u64 p2n0_p1 : 1;
+		u64 p2n1_c0 : 1;
+		u64 p2n1_c1 : 1;
+		u64 p2n1_n : 1;
+		u64 p2n1_p0 : 1;
+		u64 p2n1_p1 : 1;
+		u64 reserved_6_8 : 3;
+		u64 dsi1_1 : 1;
+		u64 dsi1_0 : 1;
+		u64 dsi0_1 : 1;
+		u64 dsi0_0 : 1;
+		u64 msi : 1;
+		u64 ncb_cmd : 1;
+	} cn61xx;
+	struct cvmx_sli_bist_status_cn63xx {
+		u64 reserved_31_63 : 33;
+		u64 n2p0_c : 1;
+		u64 n2p0_o : 1;
+		u64 n2p1_c : 1;
+		u64 n2p1_o : 1;
+		u64 cpl_p0 : 1;
+		u64 cpl_p1 : 1;
+		u64 reserved_19_24 : 6;
+		u64 p2n0_c0 : 1;
+		u64 p2n0_c1 : 1;
+		u64 p2n0_n : 1;
+		u64 p2n0_p0 : 1;
+		u64 p2n0_p1 : 1;
+		u64 p2n1_c0 : 1;
+		u64 p2n1_c1 : 1;
+		u64 p2n1_n : 1;
+		u64 p2n1_p0 : 1;
+		u64 p2n1_p1 : 1;
+		u64 reserved_6_8 : 3;
+		u64 dsi1_1 : 1;
+		u64 dsi1_0 : 1;
+		u64 dsi0_1 : 1;
+		u64 dsi0_0 : 1;
+		u64 msi : 1;
+		u64 ncb_cmd : 1;
+	} cn63xx;
+	struct cvmx_sli_bist_status_cn63xx cn63xxp1;
+	struct cvmx_sli_bist_status_cn61xx cn66xx;
+	struct cvmx_sli_bist_status_s cn68xx;
+	struct cvmx_sli_bist_status_s cn68xxp1;
+	struct cvmx_sli_bist_status_cn70xx {
+		u64 reserved_31_63 : 33;
+		u64 n2p0_c : 1;
+		u64 n2p0_o : 1;
+		u64 reserved_27_28 : 2;
+		u64 cpl_p0 : 1;
+		u64 cpl_p1 : 1;
+		u64 reserved_19_24 : 6;
+		u64 p2n0_c0 : 1;
+		u64 reserved_17_17 : 1;
+		u64 p2n0_n : 1;
+		u64 p2n0_p0 : 1;
+		u64 reserved_14_14 : 1;
+		u64 p2n1_c0 : 1;
+		u64 reserved_12_12 : 1;
+		u64 p2n1_n : 1;
+		u64 p2n1_p0 : 1;
+		u64 reserved_6_9 : 4;
+		u64 dsi1_1 : 1;
+		u64 dsi1_0 : 1;
+		u64 dsi0_1 : 1;
+		u64 dsi0_0 : 1;
+		u64 msi : 1;
+		u64 ncb_cmd : 1;
+	} cn70xx;
+	struct cvmx_sli_bist_status_cn70xx cn70xxp1;
+	struct cvmx_sli_bist_status_s cn73xx;
+	struct cvmx_sli_bist_status_s cn78xx;
+	struct cvmx_sli_bist_status_s cn78xxp1;
+	struct cvmx_sli_bist_status_cn61xx cnf71xx;
+	struct cvmx_sli_bist_status_s cnf75xx;
+};
+
+typedef union cvmx_sli_bist_status cvmx_sli_bist_status_t;
+
+/**
+ * cvmx_sli_ciu_int_enb
+ *
+ * Interrupt enable register for a given SLI_CIU_INT_SUM register.
+ *
+ */
+union cvmx_sli_ciu_int_enb {
+	u64 u64;
+	struct cvmx_sli_ciu_int_enb_s {
+		u64 reserved_51_63 : 13;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 m3p0_pppf_err : 1;
+		u64 m3p0_pktpf_err : 1;
+		u64 m3p0_dmapf_err : 1;
+		u64 m2p0_pppf_err : 1;
+		u64 m2p0_ppvf_err : 1;
+		u64 m2p0_pktpf_err : 1;
+		u64 m2p0_pktvf_err : 1;
+		u64 m2p0_dmapf_err : 1;
+		u64 m2p0_dmavf_err : 1;
+		u64 m1p0_pppf_err : 1;
+		u64 m1p0_pktpf_err : 1;
+		u64 m1p0_dmapf_err : 1;
+		u64 m0p1_pppf_err : 1;
+		u64 m0p1_ppvf_err : 1;
+		u64 m0p1_pktpf_err : 1;
+		u64 m0p1_pktvf_err : 1;
+		u64 m0p1_dmapf_err : 1;
+		u64 m0p1_dmavf_err : 1;
+		u64 m0p0_pppf_err : 1;
+		u64 m0p0_ppvf_err : 1;
+		u64 m0p0_pktpf_err : 1;
+		u64 m0p0_pktvf_err : 1;
+		u64 m0p0_dmapf_err : 1;
+		u64 m0p0_dmavf_err : 1;
+		u64 m2v0_flr : 1;
+		u64 m2p0_flr : 1;
+		u64 reserved_5_8 : 4;
+		u64 m0v1_flr : 1;
+		u64 m0p1_flr : 1;
+		u64 m0v0_flr : 1;
+		u64 m0p0_flr : 1;
+		u64 rml_to : 1;
+	} s;
+	struct cvmx_sli_ciu_int_enb_s cn73xx;
+	struct cvmx_sli_ciu_int_enb_s cn78xx;
+	struct cvmx_sli_ciu_int_enb_s cnf75xx;
+};
+
+typedef union cvmx_sli_ciu_int_enb cvmx_sli_ciu_int_enb_t;
+
+/**
+ * cvmx_sli_ciu_int_sum
+ *
+ * The fields in this register are set when an interrupt condition occurs; write 1 to clear.
+ * A bit set in this register will send and interrupt to CIU
+ */
+union cvmx_sli_ciu_int_sum {
+	u64 u64;
+	struct cvmx_sli_ciu_int_sum_s {
+		u64 reserved_51_63 : 13;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 m3p0_pppf_err : 1;
+		u64 m3p0_pktpf_err : 1;
+		u64 m3p0_dmapf_err : 1;
+		u64 m2p0_pppf_err : 1;
+		u64 m2p0_ppvf_err : 1;
+		u64 m2p0_pktpf_err : 1;
+		u64 m2p0_pktvf_err : 1;
+		u64 m2p0_dmapf_err : 1;
+		u64 m2p0_dmavf_err : 1;
+		u64 m1p0_pppf_err : 1;
+		u64 m1p0_pktpf_err : 1;
+		u64 m1p0_dmapf_err : 1;
+		u64 m0p1_pppf_err : 1;
+		u64 m0p1_ppvf_err : 1;
+		u64 m0p1_pktpf_err : 1;
+		u64 m0p1_pktvf_err : 1;
+		u64 m0p1_dmapf_err : 1;
+		u64 m0p1_dmavf_err : 1;
+		u64 m0p0_pppf_err : 1;
+		u64 m0p0_ppvf_err : 1;
+		u64 m0p0_pktpf_err : 1;
+		u64 m0p0_pktvf_err : 1;
+		u64 m0p0_dmapf_err : 1;
+		u64 m0p0_dmavf_err : 1;
+		u64 m2v0_flr : 1;
+		u64 m2p0_flr : 1;
+		u64 reserved_5_8 : 4;
+		u64 m0v1_flr : 1;
+		u64 m0p1_flr : 1;
+		u64 m0v0_flr : 1;
+		u64 m0p0_flr : 1;
+		u64 rml_to : 1;
+	} s;
+	struct cvmx_sli_ciu_int_sum_s cn73xx;
+	struct cvmx_sli_ciu_int_sum_s cn78xx;
+	struct cvmx_sli_ciu_int_sum_s cnf75xx;
+};
+
+typedef union cvmx_sli_ciu_int_sum cvmx_sli_ciu_int_sum_t;
+
+/**
+ * cvmx_sli_ctl_port#
+ *
+ * These registers contains control information for access to ports. Indexed by SLI_PORT_E.
+ * Note: SLI_CTL_PORT0 controls PF0.
+ */
+union cvmx_sli_ctl_portx {
+	u64 u64;
+	struct cvmx_sli_ctl_portx_s {
+		u64 reserved_22_63 : 42;
+		u64 intd : 1;
+		u64 intc : 1;
+		u64 intb : 1;
+		u64 inta : 1;
+		u64 dis_port : 1;
+		u64 waitl_com : 1;
+		u64 intd_map : 2;
+		u64 intc_map : 2;
+		u64 intb_map : 2;
+		u64 inta_map : 2;
+		u64 ctlp_ro : 1;
+		u64 reserved_6_6 : 1;
+		u64 ptlp_ro : 1;
+		u64 reserved_1_4 : 4;
+		u64 wait_com : 1;
+	} s;
+	struct cvmx_sli_ctl_portx_s cn61xx;
+	struct cvmx_sli_ctl_portx_s cn63xx;
+	struct cvmx_sli_ctl_portx_s cn63xxp1;
+	struct cvmx_sli_ctl_portx_s cn66xx;
+	struct cvmx_sli_ctl_portx_s cn68xx;
+	struct cvmx_sli_ctl_portx_s cn68xxp1;
+	struct cvmx_sli_ctl_portx_cn70xx {
+		u64 reserved_22_63 : 42;
+		u64 intd : 1;
+		u64 intc : 1;
+		u64 intb : 1;
+		u64 inta : 1;
+		u64 dis_port : 1;
+		u64 waitl_com : 1;
+		u64 intd_map : 2;
+		u64 intc_map : 2;
+		u64 intb_map : 2;
+		u64 inta_map : 2;
+		u64 ctlp_ro : 1;
+		u64 reserved_6_6 : 1;
+		u64 ptlp_ro : 1;
+		u64 reserved_4_1 : 4;
+		u64 wait_com : 1;
+	} cn70xx;
+	struct cvmx_sli_ctl_portx_cn70xx cn70xxp1;
+	struct cvmx_sli_ctl_portx_cn73xx {
+		u64 reserved_18_63 : 46;
+		u64 dis_port : 1;
+		u64 waitl_com : 1;
+		u64 reserved_8_15 : 8;
+		u64 ctlp_ro : 1;
+		u64 reserved_6_6 : 1;
+		u64 ptlp_ro : 1;
+		u64 reserved_1_4 : 4;
+		u64 wait_com : 1;
+	} cn73xx;
+	struct cvmx_sli_ctl_portx_cn73xx cn78xx;
+	struct cvmx_sli_ctl_portx_cn73xx cn78xxp1;
+	struct cvmx_sli_ctl_portx_s cnf71xx;
+	struct cvmx_sli_ctl_portx_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_ctl_portx cvmx_sli_ctl_portx_t;
+
+/**
+ * cvmx_sli_ctl_status
+ *
+ * This register contains control and status for SLI. Write operations to this register are not
+ * ordered with write/read operations to the MAC memory space. To ensure that a write has
+ * completed, software must read the register before making an access (i.e. MAC memory space)
+ * that requires the value of this register to be updated.
+ */
+union cvmx_sli_ctl_status {
+	u64 u64;
+	struct cvmx_sli_ctl_status_s {
+		u64 reserved_32_63 : 32;
+		u64 m2s1_ncbi : 4;
+		u64 m2s0_ncbi : 4;
+		u64 oci_id : 4;
+		u64 p1_ntags : 6;
+		u64 p0_ntags : 6;
+		u64 chip_rev : 8;
+	} s;
+	struct cvmx_sli_ctl_status_cn61xx {
+		u64 reserved_14_63 : 50;
+		u64 p0_ntags : 6;
+		u64 chip_rev : 8;
+	} cn61xx;
+	struct cvmx_sli_ctl_status_cn63xx {
+		u64 reserved_20_63 : 44;
+		u64 p1_ntags : 6;
+		u64 p0_ntags : 6;
+		u64 chip_rev : 8;
+	} cn63xx;
+	struct cvmx_sli_ctl_status_cn63xx cn63xxp1;
+	struct cvmx_sli_ctl_status_cn61xx cn66xx;
+	struct cvmx_sli_ctl_status_cn63xx cn68xx;
+	struct cvmx_sli_ctl_status_cn63xx cn68xxp1;
+	struct cvmx_sli_ctl_status_cn63xx cn70xx;
+	struct cvmx_sli_ctl_status_cn63xx cn70xxp1;
+	struct cvmx_sli_ctl_status_cn73xx {
+		u64 reserved_32_63 : 32;
+		u64 m2s1_ncbi : 4;
+		u64 m2s0_ncbi : 4;
+		u64 reserved_20_23 : 4;
+		u64 p1_ntags : 6;
+		u64 p0_ntags : 6;
+		u64 chip_rev : 8;
+	} cn73xx;
+	struct cvmx_sli_ctl_status_s cn78xx;
+	struct cvmx_sli_ctl_status_s cn78xxp1;
+	struct cvmx_sli_ctl_status_cn61xx cnf71xx;
+	struct cvmx_sli_ctl_status_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_ctl_status cvmx_sli_ctl_status_t;
+
+/**
+ * cvmx_sli_data_out_cnt
+ *
+ * This register contains the EXEC data out FIFO count and the data unload counter.
+ *
+ */
+union cvmx_sli_data_out_cnt {
+	u64 u64;
+	struct cvmx_sli_data_out_cnt_s {
+		u64 reserved_44_63 : 20;
+		u64 p1_ucnt : 16;
+		u64 p1_fcnt : 6;
+		u64 p0_ucnt : 16;
+		u64 p0_fcnt : 6;
+	} s;
+	struct cvmx_sli_data_out_cnt_s cn61xx;
+	struct cvmx_sli_data_out_cnt_s cn63xx;
+	struct cvmx_sli_data_out_cnt_s cn63xxp1;
+	struct cvmx_sli_data_out_cnt_s cn66xx;
+	struct cvmx_sli_data_out_cnt_s cn68xx;
+	struct cvmx_sli_data_out_cnt_s cn68xxp1;
+	struct cvmx_sli_data_out_cnt_s cn70xx;
+	struct cvmx_sli_data_out_cnt_s cn70xxp1;
+	struct cvmx_sli_data_out_cnt_s cn73xx;
+	struct cvmx_sli_data_out_cnt_s cn78xx;
+	struct cvmx_sli_data_out_cnt_s cn78xxp1;
+	struct cvmx_sli_data_out_cnt_s cnf71xx;
+	struct cvmx_sli_data_out_cnt_s cnf75xx;
+};
+
+typedef union cvmx_sli_data_out_cnt cvmx_sli_data_out_cnt_t;
+
+/**
+ * cvmx_sli_dbg_data
+ *
+ * SLI_DBG_DATA = SLI Debug Data Register
+ *
+ * Value returned on the debug-data lines from the RSLs
+ */
+union cvmx_sli_dbg_data {
+	u64 u64;
+	struct cvmx_sli_dbg_data_s {
+		u64 reserved_18_63 : 46;
+		u64 dsel_ext : 1;
+		u64 data : 17;
+	} s;
+	struct cvmx_sli_dbg_data_s cn61xx;
+	struct cvmx_sli_dbg_data_s cn63xx;
+	struct cvmx_sli_dbg_data_s cn63xxp1;
+	struct cvmx_sli_dbg_data_s cn66xx;
+	struct cvmx_sli_dbg_data_s cn68xx;
+	struct cvmx_sli_dbg_data_s cn68xxp1;
+	struct cvmx_sli_dbg_data_s cnf71xx;
+};
+
+typedef union cvmx_sli_dbg_data cvmx_sli_dbg_data_t;
+
+/**
+ * cvmx_sli_dbg_select
+ *
+ * SLI_DBG_SELECT = Debug Select Register
+ *
+ * Contains the debug select value last written to the RSLs.
+ */
+union cvmx_sli_dbg_select {
+	u64 u64;
+	struct cvmx_sli_dbg_select_s {
+		u64 reserved_33_63 : 31;
+		u64 adbg_sel : 1;
+		u64 dbg_sel : 32;
+	} s;
+	struct cvmx_sli_dbg_select_s cn61xx;
+	struct cvmx_sli_dbg_select_s cn63xx;
+	struct cvmx_sli_dbg_select_s cn63xxp1;
+	struct cvmx_sli_dbg_select_s cn66xx;
+	struct cvmx_sli_dbg_select_s cn68xx;
+	struct cvmx_sli_dbg_select_s cn68xxp1;
+	struct cvmx_sli_dbg_select_s cnf71xx;
+};
+
+typedef union cvmx_sli_dbg_select cvmx_sli_dbg_select_t;
+
+/**
+ * cvmx_sli_dma#_cnt
+ *
+ * These registers contain the DMA count values.
+ *
+ */
+union cvmx_sli_dmax_cnt {
+	u64 u64;
+	struct cvmx_sli_dmax_cnt_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_sli_dmax_cnt_s cn61xx;
+	struct cvmx_sli_dmax_cnt_s cn63xx;
+	struct cvmx_sli_dmax_cnt_s cn63xxp1;
+	struct cvmx_sli_dmax_cnt_s cn66xx;
+	struct cvmx_sli_dmax_cnt_s cn68xx;
+	struct cvmx_sli_dmax_cnt_s cn68xxp1;
+	struct cvmx_sli_dmax_cnt_s cn70xx;
+	struct cvmx_sli_dmax_cnt_s cn70xxp1;
+	struct cvmx_sli_dmax_cnt_s cn73xx;
+	struct cvmx_sli_dmax_cnt_s cn78xx;
+	struct cvmx_sli_dmax_cnt_s cn78xxp1;
+	struct cvmx_sli_dmax_cnt_s cnf71xx;
+	struct cvmx_sli_dmax_cnt_s cnf75xx;
+};
+
+typedef union cvmx_sli_dmax_cnt cvmx_sli_dmax_cnt_t;
+
+/**
+ * cvmx_sli_dma#_int_level
+ *
+ * These registers contain the thresholds for DMA count and timer interrupts.
+ *
+ */
+union cvmx_sli_dmax_int_level {
+	u64 u64;
+	struct cvmx_sli_dmax_int_level_s {
+		u64 time : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_sli_dmax_int_level_s cn61xx;
+	struct cvmx_sli_dmax_int_level_s cn63xx;
+	struct cvmx_sli_dmax_int_level_s cn63xxp1;
+	struct cvmx_sli_dmax_int_level_s cn66xx;
+	struct cvmx_sli_dmax_int_level_s cn68xx;
+	struct cvmx_sli_dmax_int_level_s cn68xxp1;
+	struct cvmx_sli_dmax_int_level_s cn70xx;
+	struct cvmx_sli_dmax_int_level_s cn70xxp1;
+	struct cvmx_sli_dmax_int_level_s cn73xx;
+	struct cvmx_sli_dmax_int_level_s cn78xx;
+	struct cvmx_sli_dmax_int_level_s cn78xxp1;
+	struct cvmx_sli_dmax_int_level_s cnf71xx;
+	struct cvmx_sli_dmax_int_level_s cnf75xx;
+};
+
+typedef union cvmx_sli_dmax_int_level cvmx_sli_dmax_int_level_t;
+
+/**
+ * cvmx_sli_dma#_tim
+ *
+ * These registers contain the DMA timer values.
+ *
+ */
+union cvmx_sli_dmax_tim {
+	u64 u64;
+	struct cvmx_sli_dmax_tim_s {
+		u64 reserved_32_63 : 32;
+		u64 tim : 32;
+	} s;
+	struct cvmx_sli_dmax_tim_s cn61xx;
+	struct cvmx_sli_dmax_tim_s cn63xx;
+	struct cvmx_sli_dmax_tim_s cn63xxp1;
+	struct cvmx_sli_dmax_tim_s cn66xx;
+	struct cvmx_sli_dmax_tim_s cn68xx;
+	struct cvmx_sli_dmax_tim_s cn68xxp1;
+	struct cvmx_sli_dmax_tim_s cn70xx;
+	struct cvmx_sli_dmax_tim_s cn70xxp1;
+	struct cvmx_sli_dmax_tim_s cn73xx;
+	struct cvmx_sli_dmax_tim_s cn78xx;
+	struct cvmx_sli_dmax_tim_s cn78xxp1;
+	struct cvmx_sli_dmax_tim_s cnf71xx;
+	struct cvmx_sli_dmax_tim_s cnf75xx;
+};
+
+typedef union cvmx_sli_dmax_tim cvmx_sli_dmax_tim_t;
+
+/**
+ * cvmx_sli_int_enb_ciu
+ *
+ * Used to enable the various interrupting conditions of SLI
+ *
+ */
+union cvmx_sli_int_enb_ciu {
+	u64 u64;
+	struct cvmx_sli_int_enb_ciu_s {
+		u64 reserved_62_63 : 2;
+		u64 pipe_err : 1;
+		u64 ill_pad : 1;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_29_31 : 3;
+		u64 mio_int2 : 1;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 reserved_18_19 : 2;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} s;
+	struct cvmx_sli_int_enb_ciu_cn61xx {
+		u64 reserved_61_63 : 3;
+		u64 ill_pad : 1;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_28_31 : 4;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 reserved_18_19 : 2;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn61xx;
+	struct cvmx_sli_int_enb_ciu_cn63xx {
+		u64 reserved_61_63 : 3;
+		u64 ill_pad : 1;
+		u64 reserved_58_59 : 2;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_18_31 : 14;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn63xx;
+	struct cvmx_sli_int_enb_ciu_cn63xx cn63xxp1;
+	struct cvmx_sli_int_enb_ciu_cn61xx cn66xx;
+	struct cvmx_sli_int_enb_ciu_cn68xx {
+		u64 reserved_62_63 : 2;
+		u64 pipe_err : 1;
+		u64 ill_pad : 1;
+		u64 reserved_58_59 : 2;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 reserved_51_51 : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_18_31 : 14;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn68xx;
+	struct cvmx_sli_int_enb_ciu_cn68xx cn68xxp1;
+	struct cvmx_sli_int_enb_ciu_cn70xx {
+		u64 reserved_63_61 : 3;
+		u64 ill_pad : 1;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_47_38 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_31_29 : 3;
+		u64 mio_int2 : 1;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 reserved_19_18 : 2;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_7_6 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn70xx;
+	struct cvmx_sli_int_enb_ciu_cn70xx cn70xxp1;
+	struct cvmx_sli_int_enb_ciu_cn61xx cnf71xx;
+};
+
+typedef union cvmx_sli_int_enb_ciu cvmx_sli_int_enb_ciu_t;
+
+/**
+ * cvmx_sli_int_enb_port#
+ *
+ * When a field in this register is set, and a corresponding interrupt condition asserts in
+ * SLI_INT_SUM, an interrupt is generated. Interrupts can be sent to PCIe0 or PCIe1.
+ */
+union cvmx_sli_int_enb_portx {
+	u64 u64;
+	struct cvmx_sli_int_enb_portx_s {
+		u64 reserved_62_63 : 2;
+		u64 pipe_err : 1;
+		u64 ill_pad : 1;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_30_31 : 2;
+		u64 mac2_int : 1;
+		u64 reserved_28_28 : 1;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 mac1_int : 1;
+		u64 mac0_int : 1;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 mio_int3 : 1;
+		u64 reserved_6_6 : 1;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} s;
+	struct cvmx_sli_int_enb_portx_cn61xx {
+		u64 reserved_61_63 : 3;
+		u64 ill_pad : 1;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_28_31 : 4;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 mac1_int : 1;
+		u64 mac0_int : 1;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn61xx;
+	struct cvmx_sli_int_enb_portx_cn63xx {
+		u64 reserved_61_63 : 3;
+		u64 ill_pad : 1;
+		u64 reserved_58_59 : 2;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_20_31 : 12;
+		u64 mac1_int : 1;
+		u64 mac0_int : 1;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn63xx;
+	struct cvmx_sli_int_enb_portx_cn63xx cn63xxp1;
+	struct cvmx_sli_int_enb_portx_cn61xx cn66xx;
+	struct cvmx_sli_int_enb_portx_cn68xx {
+		u64 reserved_62_63 : 2;
+		u64 pipe_err : 1;
+		u64 ill_pad : 1;
+		u64 reserved_58_59 : 2;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 reserved_51_51 : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_20_31 : 12;
+		u64 mac1_int : 1;
+		u64 mac0_int : 1;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn68xx;
+	struct cvmx_sli_int_enb_portx_cn68xx cn68xxp1;
+	struct cvmx_sli_int_enb_portx_cn70xx {
+		u64 reserved_63_61 : 3;
+		u64 ill_pad : 1;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_47_38 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_31_30 : 2;
+		u64 mac2_int : 1;
+		u64 mio_int2 : 1;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 mac1_int : 1;
+		u64 mac0_int : 1;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_7_6 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn70xx;
+	struct cvmx_sli_int_enb_portx_cn70xx cn70xxp1;
+	struct cvmx_sli_int_enb_portx_cn78xxp1 {
+		u64 reserved_60_63 : 4;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 reserved_50_51 : 2;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_29_31 : 3;
+		u64 vf_err : 1;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 reserved_18_19 : 2;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 mio_int3 : 1;
+		u64 mio_int2 : 1;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 reserved_1_3 : 3;
+		u64 rml_to : 1;
+	} cn78xxp1;
+	struct cvmx_sli_int_enb_portx_cn61xx cnf71xx;
+};
+
+typedef union cvmx_sli_int_enb_portx cvmx_sli_int_enb_portx_t;
+
+/**
+ * cvmx_sli_int_sum
+ *
+ * The fields in this register are set when an interrupt condition occurs; write 1 to clear. All
+ * fields of the register are valid when a PF reads the register. Not available to VFs, and
+ * writes by the
+ * VF do not modify the register.
+ */
+union cvmx_sli_int_sum {
+	u64 u64;
+	struct cvmx_sli_int_sum_s {
+		u64 reserved_62_63 : 2;
+		u64 pipe_err : 1;
+		u64 ill_pad : 1;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_30_31 : 2;
+		u64 mac2_int : 1;
+		u64 reserved_28_28 : 1;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 mac1_int : 1;
+		u64 mac0_int : 1;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 mio_int3 : 1;
+		u64 reserved_6_6 : 1;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} s;
+	struct cvmx_sli_int_sum_cn61xx {
+		u64 reserved_61_63 : 3;
+		u64 ill_pad : 1;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_28_31 : 4;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 mac1_int : 1;
+		u64 mac0_int : 1;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn61xx;
+	struct cvmx_sli_int_sum_cn63xx {
+		u64 reserved_61_63 : 3;
+		u64 ill_pad : 1;
+		u64 reserved_58_59 : 2;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_20_31 : 12;
+		u64 mac1_int : 1;
+		u64 mac0_int : 1;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn63xx;
+	struct cvmx_sli_int_sum_cn63xx cn63xxp1;
+	struct cvmx_sli_int_sum_cn61xx cn66xx;
+	struct cvmx_sli_int_sum_cn68xx {
+		u64 reserved_62_63 : 2;
+		u64 pipe_err : 1;
+		u64 ill_pad : 1;
+		u64 reserved_58_59 : 2;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 reserved_51_51 : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_20_31 : 12;
+		u64 mac1_int : 1;
+		u64 mac0_int : 1;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn68xx;
+	struct cvmx_sli_int_sum_cn68xx cn68xxp1;
+	struct cvmx_sli_int_sum_cn70xx {
+		u64 reserved_61_63 : 3;
+		u64 ill_pad : 1;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 pin_bp : 1;
+		u64 pout_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_30_31 : 2;
+		u64 mac2_int : 1;
+		u64 mio_int2 : 1;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 mac1_int : 1;
+		u64 mac0_int : 1;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 iob2big : 1;
+		u64 bar0_to : 1;
+		u64 reserved_1_1 : 1;
+		u64 rml_to : 1;
+	} cn70xx;
+	struct cvmx_sli_int_sum_cn70xx cn70xxp1;
+	struct cvmx_sli_int_sum_cn78xxp1 {
+		u64 reserved_60_63 : 4;
+		u64 sprt3_err : 1;
+		u64 sprt2_err : 1;
+		u64 sprt1_err : 1;
+		u64 sprt0_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 reserved_50_51 : 2;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+		u64 reserved_38_47 : 10;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_29_31 : 3;
+		u64 vf_err : 1;
+		u64 m3_un_wi : 1;
+		u64 m3_un_b0 : 1;
+		u64 m3_up_wi : 1;
+		u64 m3_up_b0 : 1;
+		u64 m2_un_wi : 1;
+		u64 m2_un_b0 : 1;
+		u64 m2_up_wi : 1;
+		u64 m2_up_b0 : 1;
+		u64 reserved_18_19 : 2;
+		u64 mio_int1 : 1;
+		u64 mio_int0 : 1;
+		u64 m1_un_wi : 1;
+		u64 m1_un_b0 : 1;
+		u64 m1_up_wi : 1;
+		u64 m1_up_b0 : 1;
+		u64 m0_un_wi : 1;
+		u64 m0_un_b0 : 1;
+		u64 m0_up_wi : 1;
+		u64 m0_up_b0 : 1;
+		u64 mio_int3 : 1;
+		u64 mio_int2 : 1;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 reserved_1_3 : 3;
+		u64 rml_to : 1;
+	} cn78xxp1;
+	struct cvmx_sli_int_sum_cn61xx cnf71xx;
+};
+
+typedef union cvmx_sli_int_sum cvmx_sli_int_sum_t;
+
+/**
+ * cvmx_sli_last_win_rdata0
+ *
+ * The data from the last initiated window read by MAC 0.
+ *
+ */
+union cvmx_sli_last_win_rdata0 {
+	u64 u64;
+	struct cvmx_sli_last_win_rdata0_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_last_win_rdata0_s cn61xx;
+	struct cvmx_sli_last_win_rdata0_s cn63xx;
+	struct cvmx_sli_last_win_rdata0_s cn63xxp1;
+	struct cvmx_sli_last_win_rdata0_s cn66xx;
+	struct cvmx_sli_last_win_rdata0_s cn68xx;
+	struct cvmx_sli_last_win_rdata0_s cn68xxp1;
+	struct cvmx_sli_last_win_rdata0_s cn70xx;
+	struct cvmx_sli_last_win_rdata0_s cn70xxp1;
+	struct cvmx_sli_last_win_rdata0_s cnf71xx;
+};
+
+typedef union cvmx_sli_last_win_rdata0 cvmx_sli_last_win_rdata0_t;
+
+/**
+ * cvmx_sli_last_win_rdata1
+ *
+ * The data from the last initiated window read by MAC 1.
+ *
+ */
+union cvmx_sli_last_win_rdata1 {
+	u64 u64;
+	struct cvmx_sli_last_win_rdata1_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_last_win_rdata1_s cn61xx;
+	struct cvmx_sli_last_win_rdata1_s cn63xx;
+	struct cvmx_sli_last_win_rdata1_s cn63xxp1;
+	struct cvmx_sli_last_win_rdata1_s cn66xx;
+	struct cvmx_sli_last_win_rdata1_s cn68xx;
+	struct cvmx_sli_last_win_rdata1_s cn68xxp1;
+	struct cvmx_sli_last_win_rdata1_s cn70xx;
+	struct cvmx_sli_last_win_rdata1_s cn70xxp1;
+	struct cvmx_sli_last_win_rdata1_s cnf71xx;
+};
+
+typedef union cvmx_sli_last_win_rdata1 cvmx_sli_last_win_rdata1_t;
+
+/**
+ * cvmx_sli_last_win_rdata2
+ *
+ * The data from the last initiated window read by MAC 2.
+ *
+ */
+union cvmx_sli_last_win_rdata2 {
+	u64 u64;
+	struct cvmx_sli_last_win_rdata2_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_last_win_rdata2_s cn61xx;
+	struct cvmx_sli_last_win_rdata2_s cn66xx;
+	struct cvmx_sli_last_win_rdata2_s cn70xx;
+	struct cvmx_sli_last_win_rdata2_s cn70xxp1;
+	struct cvmx_sli_last_win_rdata2_s cnf71xx;
+};
+
+typedef union cvmx_sli_last_win_rdata2 cvmx_sli_last_win_rdata2_t;
+
+/**
+ * cvmx_sli_last_win_rdata3
+ *
+ * The data from the last initiated window read by MAC 3.
+ *
+ */
+union cvmx_sli_last_win_rdata3 {
+	u64 u64;
+	struct cvmx_sli_last_win_rdata3_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_last_win_rdata3_s cn61xx;
+	struct cvmx_sli_last_win_rdata3_s cn66xx;
+	struct cvmx_sli_last_win_rdata3_s cn70xx;
+	struct cvmx_sli_last_win_rdata3_s cn70xxp1;
+	struct cvmx_sli_last_win_rdata3_s cnf71xx;
+};
+
+typedef union cvmx_sli_last_win_rdata3 cvmx_sli_last_win_rdata3_t;
+
+/**
+ * cvmx_sli_mac#_pf#_dma_vf_int
+ *
+ * When an error response is received for a VF DMA transaction read, the appropriate VF indexed
+ * bit is set.  The appropriate PF should read the appropriate register.
+ * Indexed by (MAC index) SLI_PORT_E.
+ * This CSR array is valid only for SLI_PORT_E::PEM0 PF0.
+ */
+union cvmx_sli_macx_pfx_dma_vf_int {
+	u64 u64;
+	struct cvmx_sli_macx_pfx_dma_vf_int_s {
+		u64 vf_int : 64;
+	} s;
+	struct cvmx_sli_macx_pfx_dma_vf_int_s cn73xx;
+	struct cvmx_sli_macx_pfx_dma_vf_int_s cn78xx;
+	struct cvmx_sli_macx_pfx_dma_vf_int_s cnf75xx;
+};
+
+typedef union cvmx_sli_macx_pfx_dma_vf_int cvmx_sli_macx_pfx_dma_vf_int_t;
+
+/**
+ * cvmx_sli_mac#_pf#_dma_vf_int_enb
+ *
+ * Indexed by (MAC index) SLI_PORT_E.
+ * This CSR array is valid only for SLI_PORT_E::PEM0 PF0.
+ */
+union cvmx_sli_macx_pfx_dma_vf_int_enb {
+	u64 u64;
+	struct cvmx_sli_macx_pfx_dma_vf_int_enb_s {
+		u64 vf_int_enb : 64;
+	} s;
+	struct cvmx_sli_macx_pfx_dma_vf_int_enb_s cn73xx;
+	struct cvmx_sli_macx_pfx_dma_vf_int_enb_s cn78xx;
+	struct cvmx_sli_macx_pfx_dma_vf_int_enb_s cnf75xx;
+};
+
+typedef union cvmx_sli_macx_pfx_dma_vf_int_enb cvmx_sli_macx_pfx_dma_vf_int_enb_t;
+
+/**
+ * cvmx_sli_mac#_pf#_flr_vf_int
+ *
+ * Indexed by (MAC index) SLI_PORT_E.
+ * This CSR array is valid only for SLI_PORT_E::PEM0 PF0.
+ */
+union cvmx_sli_macx_pfx_flr_vf_int {
+	u64 u64;
+	struct cvmx_sli_macx_pfx_flr_vf_int_s {
+		u64 vf_int : 64;
+	} s;
+	struct cvmx_sli_macx_pfx_flr_vf_int_s cn73xx;
+	struct cvmx_sli_macx_pfx_flr_vf_int_s cn78xx;
+	struct cvmx_sli_macx_pfx_flr_vf_int_s cnf75xx;
+};
+
+typedef union cvmx_sli_macx_pfx_flr_vf_int cvmx_sli_macx_pfx_flr_vf_int_t;
+
+/**
+ * cvmx_sli_mac#_pf#_int_enb
+ *
+ * Interrupt enable register for a given PF SLI_MAC()_PF()_INT_SUM register.
+ * Indexed by (MAC index) SLI_PORT_E.
+ */
+union cvmx_sli_macx_pfx_int_enb {
+	u64 u64;
+	struct cvmx_sli_macx_pfx_int_enb_s {
+		u64 pppf_err : 1;
+		u64 ppvf_err : 1;
+		u64 pktpf_err : 1;
+		u64 pktvf_err : 1;
+		u64 dmapf_err : 1;
+		u64 dmavf_err : 1;
+		u64 vf_mbox : 1;
+		u64 reserved_38_56 : 19;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_12_31 : 20;
+		u64 un_wi : 1;
+		u64 un_b0 : 1;
+		u64 up_wi : 1;
+		u64 up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 reserved_2_3 : 2;
+		u64 mio_int : 1;
+		u64 rml_to : 1;
+	} s;
+	struct cvmx_sli_macx_pfx_int_enb_s cn73xx;
+	struct cvmx_sli_macx_pfx_int_enb_s cn78xx;
+	struct cvmx_sli_macx_pfx_int_enb_s cnf75xx;
+};
+
+typedef union cvmx_sli_macx_pfx_int_enb cvmx_sli_macx_pfx_int_enb_t;
+
+/**
+ * cvmx_sli_mac#_pf#_int_sum
+ *
+ * Interrupt summary register for a given PF. Indexed (MAC index) by SLI_PORT_E.
+ * The fields in this register are set when an interrupt condition occurs; write 1 to clear.
+ */
+union cvmx_sli_macx_pfx_int_sum {
+	u64 u64;
+	struct cvmx_sli_macx_pfx_int_sum_s {
+		u64 pppf_err : 1;
+		u64 ppvf_err : 1;
+		u64 pktpf_err : 1;
+		u64 pktvf_err : 1;
+		u64 dmapf_err : 1;
+		u64 dmavf_err : 1;
+		u64 vf_mbox : 1;
+		u64 reserved_38_56 : 19;
+		u64 dtime : 2;
+		u64 dcnt : 2;
+		u64 dmafi : 2;
+		u64 reserved_12_31 : 20;
+		u64 un_wi : 1;
+		u64 un_b0 : 1;
+		u64 up_wi : 1;
+		u64 up_b0 : 1;
+		u64 reserved_6_7 : 2;
+		u64 ptime : 1;
+		u64 pcnt : 1;
+		u64 reserved_2_3 : 2;
+		u64 mio_int : 1;
+		u64 rml_to : 1;
+	} s;
+	struct cvmx_sli_macx_pfx_int_sum_s cn73xx;
+	struct cvmx_sli_macx_pfx_int_sum_s cn78xx;
+	struct cvmx_sli_macx_pfx_int_sum_s cnf75xx;
+};
+
+typedef union cvmx_sli_macx_pfx_int_sum cvmx_sli_macx_pfx_int_sum_t;
+
+/**
+ * cvmx_sli_mac#_pf#_mbox_int
+ *
+ * When a VF to PF MBOX write occurs the appropriate bit is set.
+ * Indexed by (MAC index) SLI_PORT_E.
+ * This CSR array is valid only for SLI_PORT_E::PEM0 PF0.
+ */
+union cvmx_sli_macx_pfx_mbox_int {
+	u64 u64;
+	struct cvmx_sli_macx_pfx_mbox_int_s {
+		u64 vf_int : 64;
+	} s;
+	struct cvmx_sli_macx_pfx_mbox_int_s cn73xx;
+	struct cvmx_sli_macx_pfx_mbox_int_s cn78xx;
+	struct cvmx_sli_macx_pfx_mbox_int_s cnf75xx;
+};
+
+typedef union cvmx_sli_macx_pfx_mbox_int cvmx_sli_macx_pfx_mbox_int_t;
+
+/**
+ * cvmx_sli_mac#_pf#_pkt_vf_int
+ *
+ * When an error response is received for a VF PP transaction read, a doorbell
+ * overflow for a ring associated with a VF occurs or an illegal memory access from a VF occurs,
+ * the appropriate VF indexed bit is set.  The appropriate PF should read the appropriate
+ * register.
+ * Indexed by (MAC index) SLI_PORT_E.
+ * This CSR array is valid only for SLI_PORT_E::PEM0 PF0.
+ */
+union cvmx_sli_macx_pfx_pkt_vf_int {
+	u64 u64;
+	struct cvmx_sli_macx_pfx_pkt_vf_int_s {
+		u64 vf_int : 64;
+	} s;
+	struct cvmx_sli_macx_pfx_pkt_vf_int_s cn73xx;
+	struct cvmx_sli_macx_pfx_pkt_vf_int_s cn78xx;
+	struct cvmx_sli_macx_pfx_pkt_vf_int_s cnf75xx;
+};
+
+typedef union cvmx_sli_macx_pfx_pkt_vf_int cvmx_sli_macx_pfx_pkt_vf_int_t;
+
+/**
+ * cvmx_sli_mac#_pf#_pkt_vf_int_enb
+ *
+ * Indexed by (MAC index) SLI_PORT_E.
+ * This CSR array is valid only for SLI_PORT_E::PEM0 PF0.
+ */
+union cvmx_sli_macx_pfx_pkt_vf_int_enb {
+	u64 u64;
+	struct cvmx_sli_macx_pfx_pkt_vf_int_enb_s {
+		u64 vf_int_enb : 64;
+	} s;
+	struct cvmx_sli_macx_pfx_pkt_vf_int_enb_s cn73xx;
+	struct cvmx_sli_macx_pfx_pkt_vf_int_enb_s cn78xx;
+	struct cvmx_sli_macx_pfx_pkt_vf_int_enb_s cnf75xx;
+};
+
+typedef union cvmx_sli_macx_pfx_pkt_vf_int_enb cvmx_sli_macx_pfx_pkt_vf_int_enb_t;
+
+/**
+ * cvmx_sli_mac#_pf#_pp_vf_int
+ *
+ * When an error response is received for a VF PP transaction read, the appropriate VF indexed
+ * bit is set.  The appropriate PF should read the appropriate register.
+ * Indexed by (MAC index) SLI_PORT_E.
+ * This CSR array is valid only for SLI_PORT_E::PEM0 PF0.
+ */
+union cvmx_sli_macx_pfx_pp_vf_int {
+	u64 u64;
+	struct cvmx_sli_macx_pfx_pp_vf_int_s {
+		u64 vf_int : 64;
+	} s;
+	struct cvmx_sli_macx_pfx_pp_vf_int_s cn73xx;
+	struct cvmx_sli_macx_pfx_pp_vf_int_s cn78xx;
+	struct cvmx_sli_macx_pfx_pp_vf_int_s cnf75xx;
+};
+
+typedef union cvmx_sli_macx_pfx_pp_vf_int cvmx_sli_macx_pfx_pp_vf_int_t;
+
+/**
+ * cvmx_sli_mac#_pf#_pp_vf_int_enb
+ *
+ * Indexed by (MAC index) SLI_PORT_E.
+ * This CSR array is valid only for SLI_PORT_E::PEM0 PF0.
+ */
+union cvmx_sli_macx_pfx_pp_vf_int_enb {
+	u64 u64;
+	struct cvmx_sli_macx_pfx_pp_vf_int_enb_s {
+		u64 vf_int_enb : 64;
+	} s;
+	struct cvmx_sli_macx_pfx_pp_vf_int_enb_s cn73xx;
+	struct cvmx_sli_macx_pfx_pp_vf_int_enb_s cn78xx;
+	struct cvmx_sli_macx_pfx_pp_vf_int_enb_s cnf75xx;
+};
+
+typedef union cvmx_sli_macx_pfx_pp_vf_int_enb cvmx_sli_macx_pfx_pp_vf_int_enb_t;
+
+/**
+ * cvmx_sli_mac_credit_cnt
+ *
+ * This register contains the number of credits for the MAC port FIFOs used by the SLI. This
+ * value needs to be set before S2M traffic flow starts. A write operation to this register
+ * causes the credit counts in the SLI for the MAC ports to be reset to the value in this
+ * register if the corresponding disable bit in this register is set to 0.
+ */
+union cvmx_sli_mac_credit_cnt {
+	u64 u64;
+	struct cvmx_sli_mac_credit_cnt_s {
+		u64 reserved_54_63 : 10;
+		u64 p1_c_d : 1;
+		u64 p1_n_d : 1;
+		u64 p1_p_d : 1;
+		u64 p0_c_d : 1;
+		u64 p0_n_d : 1;
+		u64 p0_p_d : 1;
+		u64 p1_ccnt : 8;
+		u64 p1_ncnt : 8;
+		u64 p1_pcnt : 8;
+		u64 p0_ccnt : 8;
+		u64 p0_ncnt : 8;
+		u64 p0_pcnt : 8;
+	} s;
+	struct cvmx_sli_mac_credit_cnt_s cn61xx;
+	struct cvmx_sli_mac_credit_cnt_s cn63xx;
+	struct cvmx_sli_mac_credit_cnt_cn63xxp1 {
+		u64 reserved_48_63 : 16;
+		u64 p1_ccnt : 8;
+		u64 p1_ncnt : 8;
+		u64 p1_pcnt : 8;
+		u64 p0_ccnt : 8;
+		u64 p0_ncnt : 8;
+		u64 p0_pcnt : 8;
+	} cn63xxp1;
+	struct cvmx_sli_mac_credit_cnt_s cn66xx;
+	struct cvmx_sli_mac_credit_cnt_s cn68xx;
+	struct cvmx_sli_mac_credit_cnt_s cn68xxp1;
+	struct cvmx_sli_mac_credit_cnt_s cn70xx;
+	struct cvmx_sli_mac_credit_cnt_s cn70xxp1;
+	struct cvmx_sli_mac_credit_cnt_s cn73xx;
+	struct cvmx_sli_mac_credit_cnt_s cn78xx;
+	struct cvmx_sli_mac_credit_cnt_s cn78xxp1;
+	struct cvmx_sli_mac_credit_cnt_s cnf71xx;
+	struct cvmx_sli_mac_credit_cnt_s cnf75xx;
+};
+
+typedef union cvmx_sli_mac_credit_cnt cvmx_sli_mac_credit_cnt_t;
+
+/**
+ * cvmx_sli_mac_credit_cnt2
+ *
+ * This register contains the number of credits for the MAC port FIFOs (for MACs 2 and 3) used by
+ * the SLI. This value must be set before S2M traffic flow starts. A write to this register
+ * causes the credit counts in the SLI for the MAC ports to be reset to the value in this
+ * register.
+ */
+union cvmx_sli_mac_credit_cnt2 {
+	u64 u64;
+	struct cvmx_sli_mac_credit_cnt2_s {
+		u64 reserved_54_63 : 10;
+		u64 p3_c_d : 1;
+		u64 p3_n_d : 1;
+		u64 p3_p_d : 1;
+		u64 p2_c_d : 1;
+		u64 p2_n_d : 1;
+		u64 p2_p_d : 1;
+		u64 p3_ccnt : 8;
+		u64 p3_ncnt : 8;
+		u64 p3_pcnt : 8;
+		u64 p2_ccnt : 8;
+		u64 p2_ncnt : 8;
+		u64 p2_pcnt : 8;
+	} s;
+	struct cvmx_sli_mac_credit_cnt2_s cn61xx;
+	struct cvmx_sli_mac_credit_cnt2_s cn66xx;
+	struct cvmx_sli_mac_credit_cnt2_s cn70xx;
+	struct cvmx_sli_mac_credit_cnt2_s cn70xxp1;
+	struct cvmx_sli_mac_credit_cnt2_s cn73xx;
+	struct cvmx_sli_mac_credit_cnt2_s cn78xx;
+	struct cvmx_sli_mac_credit_cnt2_s cn78xxp1;
+	struct cvmx_sli_mac_credit_cnt2_s cnf71xx;
+	struct cvmx_sli_mac_credit_cnt2_s cnf75xx;
+};
+
+typedef union cvmx_sli_mac_credit_cnt2 cvmx_sli_mac_credit_cnt2_t;
+
+/**
+ * cvmx_sli_mac_number
+ *
+ * When read from a MAC port, this register returns the MAC's port number, otherwise returns zero.
+ *
+ */
+union cvmx_sli_mac_number {
+	u64 u64;
+	struct cvmx_sli_mac_number_s {
+		u64 reserved_9_63 : 55;
+		u64 a_mode : 1;
+		u64 num : 8;
+	} s;
+	struct cvmx_sli_mac_number_s cn61xx;
+	struct cvmx_sli_mac_number_cn63xx {
+		u64 reserved_8_63 : 56;
+		u64 num : 8;
+	} cn63xx;
+	struct cvmx_sli_mac_number_s cn66xx;
+	struct cvmx_sli_mac_number_cn63xx cn68xx;
+	struct cvmx_sli_mac_number_cn63xx cn68xxp1;
+	struct cvmx_sli_mac_number_s cn70xx;
+	struct cvmx_sli_mac_number_s cn70xxp1;
+	struct cvmx_sli_mac_number_s cn73xx;
+	struct cvmx_sli_mac_number_s cn78xx;
+	struct cvmx_sli_mac_number_s cn78xxp1;
+	struct cvmx_sli_mac_number_s cnf71xx;
+	struct cvmx_sli_mac_number_s cnf75xx;
+};
+
+typedef union cvmx_sli_mac_number cvmx_sli_mac_number_t;
+
+/**
+ * cvmx_sli_mem_access_ctl
+ *
+ * This register contains control signals for access to the MAC address space.
+ *
+ */
+union cvmx_sli_mem_access_ctl {
+	u64 u64;
+	struct cvmx_sli_mem_access_ctl_s {
+		u64 reserved_14_63 : 50;
+		u64 max_word : 4;
+		u64 timer : 10;
+	} s;
+	struct cvmx_sli_mem_access_ctl_s cn61xx;
+	struct cvmx_sli_mem_access_ctl_s cn63xx;
+	struct cvmx_sli_mem_access_ctl_s cn63xxp1;
+	struct cvmx_sli_mem_access_ctl_s cn66xx;
+	struct cvmx_sli_mem_access_ctl_s cn68xx;
+	struct cvmx_sli_mem_access_ctl_s cn68xxp1;
+	struct cvmx_sli_mem_access_ctl_s cn70xx;
+	struct cvmx_sli_mem_access_ctl_s cn70xxp1;
+	struct cvmx_sli_mem_access_ctl_s cn73xx;
+	struct cvmx_sli_mem_access_ctl_s cn78xx;
+	struct cvmx_sli_mem_access_ctl_s cn78xxp1;
+	struct cvmx_sli_mem_access_ctl_s cnf71xx;
+	struct cvmx_sli_mem_access_ctl_s cnf75xx;
+};
+
+typedef union cvmx_sli_mem_access_ctl cvmx_sli_mem_access_ctl_t;
+
+/**
+ * cvmx_sli_mem_access_subid#
+ *
+ * These registers contains address index and control bits for access to memory from cores.
+ *
+ */
+union cvmx_sli_mem_access_subidx {
+	u64 u64;
+	struct cvmx_sli_mem_access_subidx_s {
+		u64 reserved_60_63 : 4;
+		u64 pvf : 16;
+		u64 reserved_43_43 : 1;
+		u64 zero : 1;
+		u64 port : 3;
+		u64 nmerge : 1;
+		u64 esr : 2;
+		u64 esw : 2;
+		u64 wtype : 2;
+		u64 rtype : 2;
+		u64 reserved_0_29 : 30;
+	} s;
+	struct cvmx_sli_mem_access_subidx_cn61xx {
+		u64 reserved_43_63 : 21;
+		u64 zero : 1;
+		u64 port : 3;
+		u64 nmerge : 1;
+		u64 esr : 2;
+		u64 esw : 2;
+		u64 wtype : 2;
+		u64 rtype : 2;
+		u64 ba : 30;
+	} cn61xx;
+	struct cvmx_sli_mem_access_subidx_cn61xx cn63xx;
+	struct cvmx_sli_mem_access_subidx_cn61xx cn63xxp1;
+	struct cvmx_sli_mem_access_subidx_cn61xx cn66xx;
+	struct cvmx_sli_mem_access_subidx_cn68xx {
+		u64 reserved_43_63 : 21;
+		u64 zero : 1;
+		u64 port : 3;
+		u64 nmerge : 1;
+		u64 esr : 2;
+		u64 esw : 2;
+		u64 wtype : 2;
+		u64 rtype : 2;
+		u64 ba : 28;
+		u64 reserved_0_1 : 2;
+	} cn68xx;
+	struct cvmx_sli_mem_access_subidx_cn68xx cn68xxp1;
+	struct cvmx_sli_mem_access_subidx_cn61xx cn70xx;
+	struct cvmx_sli_mem_access_subidx_cn61xx cn70xxp1;
+	struct cvmx_sli_mem_access_subidx_cn73xx {
+		u64 reserved_60_63 : 4;
+		u64 pvf : 16;
+		u64 reserved_43_43 : 1;
+		u64 zero : 1;
+		u64 port : 3;
+		u64 nmerge : 1;
+		u64 esr : 2;
+		u64 esw : 2;
+		u64 wtype : 2;
+		u64 rtype : 2;
+		u64 ba : 30;
+	} cn73xx;
+	struct cvmx_sli_mem_access_subidx_cn73xx cn78xx;
+	struct cvmx_sli_mem_access_subidx_cn61xx cn78xxp1;
+	struct cvmx_sli_mem_access_subidx_cn61xx cnf71xx;
+	struct cvmx_sli_mem_access_subidx_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_mem_access_subidx cvmx_sli_mem_access_subidx_t;
+
+/**
+ * cvmx_sli_mem_ctl
+ *
+ * This register controls the ECC of the SLI memories.
+ *
+ */
+union cvmx_sli_mem_ctl {
+	u64 u64;
+	struct cvmx_sli_mem_ctl_s {
+		u64 reserved_27_63 : 37;
+		u64 tlpn1_fs : 2;
+		u64 tlpn1_ecc : 1;
+		u64 tlpp1_fs : 2;
+		u64 tlpp1_ecc : 1;
+		u64 tlpc1_fs : 2;
+		u64 tlpc1_ecc : 1;
+		u64 tlpn0_fs : 2;
+		u64 tlpn0_ecc : 1;
+		u64 tlpp0_fs : 2;
+		u64 tlpp0_ecc : 1;
+		u64 tlpc0_fs : 2;
+		u64 tlpc0_ecc : 1;
+		u64 nppr_fs : 2;
+		u64 nppr_ecc : 1;
+		u64 cpl1_fs : 2;
+		u64 cpl1_ecc : 1;
+		u64 cpl0_fs : 2;
+		u64 cpl0_ecc : 1;
+	} s;
+	struct cvmx_sli_mem_ctl_s cn73xx;
+	struct cvmx_sli_mem_ctl_s cn78xx;
+	struct cvmx_sli_mem_ctl_s cn78xxp1;
+	struct cvmx_sli_mem_ctl_s cnf75xx;
+};
+
+typedef union cvmx_sli_mem_ctl cvmx_sli_mem_ctl_t;
+
+/**
+ * cvmx_sli_mem_int_sum
+ *
+ * Set when an interrupt condition occurs; write one to clear.
+ *
+ */
+union cvmx_sli_mem_int_sum {
+	u64 u64;
+	struct cvmx_sli_mem_int_sum_s {
+		u64 reserved_18_63 : 46;
+		u64 tlpn1_dbe : 1;
+		u64 tlpn1_sbe : 1;
+		u64 tlpp1_dbe : 1;
+		u64 tlpp1_sbe : 1;
+		u64 tlpc1_dbe : 1;
+		u64 tlpc1_sbe : 1;
+		u64 tlpn0_dbe : 1;
+		u64 tlpn0_sbe : 1;
+		u64 tlpp0_dbe : 1;
+		u64 tlpp0_sbe : 1;
+		u64 tlpc0_dbe : 1;
+		u64 tlpc0_sbe : 1;
+		u64 nppr_dbe : 1;
+		u64 nppr_sbe : 1;
+		u64 cpl1_dbe : 1;
+		u64 cpl1_sbe : 1;
+		u64 cpl0_dbe : 1;
+		u64 cpl0_sbe : 1;
+	} s;
+	struct cvmx_sli_mem_int_sum_s cn73xx;
+	struct cvmx_sli_mem_int_sum_s cn78xx;
+	struct cvmx_sli_mem_int_sum_s cn78xxp1;
+	struct cvmx_sli_mem_int_sum_s cnf75xx;
+};
+
+typedef union cvmx_sli_mem_int_sum cvmx_sli_mem_int_sum_t;
+
+/**
+ * cvmx_sli_msi_enb0
+ *
+ * Used to enable the interrupt generation for the bits in the SLI_MSI_RCV0.
+ *
+ */
+union cvmx_sli_msi_enb0 {
+	u64 u64;
+	struct cvmx_sli_msi_enb0_s {
+		u64 enb : 64;
+	} s;
+	struct cvmx_sli_msi_enb0_s cn61xx;
+	struct cvmx_sli_msi_enb0_s cn63xx;
+	struct cvmx_sli_msi_enb0_s cn63xxp1;
+	struct cvmx_sli_msi_enb0_s cn66xx;
+	struct cvmx_sli_msi_enb0_s cn68xx;
+	struct cvmx_sli_msi_enb0_s cn68xxp1;
+	struct cvmx_sli_msi_enb0_s cn70xx;
+	struct cvmx_sli_msi_enb0_s cn70xxp1;
+	struct cvmx_sli_msi_enb0_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_enb0 cvmx_sli_msi_enb0_t;
+
+/**
+ * cvmx_sli_msi_enb1
+ *
+ * Used to enable the interrupt generation for the bits in the SLI_MSI_RCV1.
+ *
+ */
+union cvmx_sli_msi_enb1 {
+	u64 u64;
+	struct cvmx_sli_msi_enb1_s {
+		u64 enb : 64;
+	} s;
+	struct cvmx_sli_msi_enb1_s cn61xx;
+	struct cvmx_sli_msi_enb1_s cn63xx;
+	struct cvmx_sli_msi_enb1_s cn63xxp1;
+	struct cvmx_sli_msi_enb1_s cn66xx;
+	struct cvmx_sli_msi_enb1_s cn68xx;
+	struct cvmx_sli_msi_enb1_s cn68xxp1;
+	struct cvmx_sli_msi_enb1_s cn70xx;
+	struct cvmx_sli_msi_enb1_s cn70xxp1;
+	struct cvmx_sli_msi_enb1_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_enb1 cvmx_sli_msi_enb1_t;
+
+/**
+ * cvmx_sli_msi_enb2
+ *
+ * Used to enable the interrupt generation for the bits in the SLI_MSI_RCV2.
+ *
+ */
+union cvmx_sli_msi_enb2 {
+	u64 u64;
+	struct cvmx_sli_msi_enb2_s {
+		u64 enb : 64;
+	} s;
+	struct cvmx_sli_msi_enb2_s cn61xx;
+	struct cvmx_sli_msi_enb2_s cn63xx;
+	struct cvmx_sli_msi_enb2_s cn63xxp1;
+	struct cvmx_sli_msi_enb2_s cn66xx;
+	struct cvmx_sli_msi_enb2_s cn68xx;
+	struct cvmx_sli_msi_enb2_s cn68xxp1;
+	struct cvmx_sli_msi_enb2_s cn70xx;
+	struct cvmx_sli_msi_enb2_s cn70xxp1;
+	struct cvmx_sli_msi_enb2_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_enb2 cvmx_sli_msi_enb2_t;
+
+/**
+ * cvmx_sli_msi_enb3
+ *
+ * Used to enable the interrupt generation for the bits in the SLI_MSI_RCV3.
+ *
+ */
+union cvmx_sli_msi_enb3 {
+	u64 u64;
+	struct cvmx_sli_msi_enb3_s {
+		u64 enb : 64;
+	} s;
+	struct cvmx_sli_msi_enb3_s cn61xx;
+	struct cvmx_sli_msi_enb3_s cn63xx;
+	struct cvmx_sli_msi_enb3_s cn63xxp1;
+	struct cvmx_sli_msi_enb3_s cn66xx;
+	struct cvmx_sli_msi_enb3_s cn68xx;
+	struct cvmx_sli_msi_enb3_s cn68xxp1;
+	struct cvmx_sli_msi_enb3_s cn70xx;
+	struct cvmx_sli_msi_enb3_s cn70xxp1;
+	struct cvmx_sli_msi_enb3_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_enb3 cvmx_sli_msi_enb3_t;
+
+/**
+ * cvmx_sli_msi_rcv0
+ *
+ * This register contains bits <63:0> of the 256 bits of MSI interrupts.
+ *
+ */
+union cvmx_sli_msi_rcv0 {
+	u64 u64;
+	struct cvmx_sli_msi_rcv0_s {
+		u64 intr : 64;
+	} s;
+	struct cvmx_sli_msi_rcv0_s cn61xx;
+	struct cvmx_sli_msi_rcv0_s cn63xx;
+	struct cvmx_sli_msi_rcv0_s cn63xxp1;
+	struct cvmx_sli_msi_rcv0_s cn66xx;
+	struct cvmx_sli_msi_rcv0_s cn68xx;
+	struct cvmx_sli_msi_rcv0_s cn68xxp1;
+	struct cvmx_sli_msi_rcv0_s cn70xx;
+	struct cvmx_sli_msi_rcv0_s cn70xxp1;
+	struct cvmx_sli_msi_rcv0_s cn73xx;
+	struct cvmx_sli_msi_rcv0_s cn78xx;
+	struct cvmx_sli_msi_rcv0_s cn78xxp1;
+	struct cvmx_sli_msi_rcv0_s cnf71xx;
+	struct cvmx_sli_msi_rcv0_s cnf75xx;
+};
+
+typedef union cvmx_sli_msi_rcv0 cvmx_sli_msi_rcv0_t;
+
+/**
+ * cvmx_sli_msi_rcv1
+ *
+ * This register contains bits <127:64> of the 256 bits of MSI interrupts.
+ *
+ */
+union cvmx_sli_msi_rcv1 {
+	u64 u64;
+	struct cvmx_sli_msi_rcv1_s {
+		u64 intr : 64;
+	} s;
+	struct cvmx_sli_msi_rcv1_s cn61xx;
+	struct cvmx_sli_msi_rcv1_s cn63xx;
+	struct cvmx_sli_msi_rcv1_s cn63xxp1;
+	struct cvmx_sli_msi_rcv1_s cn66xx;
+	struct cvmx_sli_msi_rcv1_s cn68xx;
+	struct cvmx_sli_msi_rcv1_s cn68xxp1;
+	struct cvmx_sli_msi_rcv1_s cn70xx;
+	struct cvmx_sli_msi_rcv1_s cn70xxp1;
+	struct cvmx_sli_msi_rcv1_s cn73xx;
+	struct cvmx_sli_msi_rcv1_s cn78xx;
+	struct cvmx_sli_msi_rcv1_s cn78xxp1;
+	struct cvmx_sli_msi_rcv1_s cnf71xx;
+	struct cvmx_sli_msi_rcv1_s cnf75xx;
+};
+
+typedef union cvmx_sli_msi_rcv1 cvmx_sli_msi_rcv1_t;
+
+/**
+ * cvmx_sli_msi_rcv2
+ *
+ * This register contains bits <191:128> of the 256 bits of MSI interrupts.
+ *
+ */
+union cvmx_sli_msi_rcv2 {
+	u64 u64;
+	struct cvmx_sli_msi_rcv2_s {
+		u64 intr : 64;
+	} s;
+	struct cvmx_sli_msi_rcv2_s cn61xx;
+	struct cvmx_sli_msi_rcv2_s cn63xx;
+	struct cvmx_sli_msi_rcv2_s cn63xxp1;
+	struct cvmx_sli_msi_rcv2_s cn66xx;
+	struct cvmx_sli_msi_rcv2_s cn68xx;
+	struct cvmx_sli_msi_rcv2_s cn68xxp1;
+	struct cvmx_sli_msi_rcv2_s cn70xx;
+	struct cvmx_sli_msi_rcv2_s cn70xxp1;
+	struct cvmx_sli_msi_rcv2_s cn73xx;
+	struct cvmx_sli_msi_rcv2_s cn78xx;
+	struct cvmx_sli_msi_rcv2_s cn78xxp1;
+	struct cvmx_sli_msi_rcv2_s cnf71xx;
+	struct cvmx_sli_msi_rcv2_s cnf75xx;
+};
+
+typedef union cvmx_sli_msi_rcv2 cvmx_sli_msi_rcv2_t;
+
+/**
+ * cvmx_sli_msi_rcv3
+ *
+ * This register contains bits <255:192> of the 256 bits of MSI interrupts.
+ *
+ */
+union cvmx_sli_msi_rcv3 {
+	u64 u64;
+	struct cvmx_sli_msi_rcv3_s {
+		u64 intr : 64;
+	} s;
+	struct cvmx_sli_msi_rcv3_s cn61xx;
+	struct cvmx_sli_msi_rcv3_s cn63xx;
+	struct cvmx_sli_msi_rcv3_s cn63xxp1;
+	struct cvmx_sli_msi_rcv3_s cn66xx;
+	struct cvmx_sli_msi_rcv3_s cn68xx;
+	struct cvmx_sli_msi_rcv3_s cn68xxp1;
+	struct cvmx_sli_msi_rcv3_s cn70xx;
+	struct cvmx_sli_msi_rcv3_s cn70xxp1;
+	struct cvmx_sli_msi_rcv3_s cn73xx;
+	struct cvmx_sli_msi_rcv3_s cn78xx;
+	struct cvmx_sli_msi_rcv3_s cn78xxp1;
+	struct cvmx_sli_msi_rcv3_s cnf71xx;
+	struct cvmx_sli_msi_rcv3_s cnf75xx;
+};
+
+typedef union cvmx_sli_msi_rcv3 cvmx_sli_msi_rcv3_t;
+
+/**
+ * cvmx_sli_msi_rd_map
+ *
+ * This register is used to read the mapping function of the SLI_PCIE_MSI_RCV to SLI_MSI_RCV
+ * registers.
+ */
+union cvmx_sli_msi_rd_map {
+	u64 u64;
+	struct cvmx_sli_msi_rd_map_s {
+		u64 reserved_16_63 : 48;
+		u64 rd_int : 8;
+		u64 msi_int : 8;
+	} s;
+	struct cvmx_sli_msi_rd_map_s cn61xx;
+	struct cvmx_sli_msi_rd_map_s cn63xx;
+	struct cvmx_sli_msi_rd_map_s cn63xxp1;
+	struct cvmx_sli_msi_rd_map_s cn66xx;
+	struct cvmx_sli_msi_rd_map_s cn68xx;
+	struct cvmx_sli_msi_rd_map_s cn68xxp1;
+	struct cvmx_sli_msi_rd_map_s cn70xx;
+	struct cvmx_sli_msi_rd_map_s cn70xxp1;
+	struct cvmx_sli_msi_rd_map_s cn73xx;
+	struct cvmx_sli_msi_rd_map_s cn78xx;
+	struct cvmx_sli_msi_rd_map_s cn78xxp1;
+	struct cvmx_sli_msi_rd_map_s cnf71xx;
+	struct cvmx_sli_msi_rd_map_s cnf75xx;
+};
+
+typedef union cvmx_sli_msi_rd_map cvmx_sli_msi_rd_map_t;
+
+/**
+ * cvmx_sli_msi_w1c_enb0
+ *
+ * Used to clear bits in SLI_MSI_ENB0.
+ *
+ */
+union cvmx_sli_msi_w1c_enb0 {
+	u64 u64;
+	struct cvmx_sli_msi_w1c_enb0_s {
+		u64 clr : 64;
+	} s;
+	struct cvmx_sli_msi_w1c_enb0_s cn61xx;
+	struct cvmx_sli_msi_w1c_enb0_s cn63xx;
+	struct cvmx_sli_msi_w1c_enb0_s cn63xxp1;
+	struct cvmx_sli_msi_w1c_enb0_s cn66xx;
+	struct cvmx_sli_msi_w1c_enb0_s cn68xx;
+	struct cvmx_sli_msi_w1c_enb0_s cn68xxp1;
+	struct cvmx_sli_msi_w1c_enb0_s cn70xx;
+	struct cvmx_sli_msi_w1c_enb0_s cn70xxp1;
+	struct cvmx_sli_msi_w1c_enb0_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_w1c_enb0 cvmx_sli_msi_w1c_enb0_t;
+
+/**
+ * cvmx_sli_msi_w1c_enb1
+ *
+ * Used to clear bits in SLI_MSI_ENB1.
+ *
+ */
+union cvmx_sli_msi_w1c_enb1 {
+	u64 u64;
+	struct cvmx_sli_msi_w1c_enb1_s {
+		u64 clr : 64;
+	} s;
+	struct cvmx_sli_msi_w1c_enb1_s cn61xx;
+	struct cvmx_sli_msi_w1c_enb1_s cn63xx;
+	struct cvmx_sli_msi_w1c_enb1_s cn63xxp1;
+	struct cvmx_sli_msi_w1c_enb1_s cn66xx;
+	struct cvmx_sli_msi_w1c_enb1_s cn68xx;
+	struct cvmx_sli_msi_w1c_enb1_s cn68xxp1;
+	struct cvmx_sli_msi_w1c_enb1_s cn70xx;
+	struct cvmx_sli_msi_w1c_enb1_s cn70xxp1;
+	struct cvmx_sli_msi_w1c_enb1_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_w1c_enb1 cvmx_sli_msi_w1c_enb1_t;
+
+/**
+ * cvmx_sli_msi_w1c_enb2
+ *
+ * Used to clear bits in SLI_MSI_ENB2.
+ *
+ */
+union cvmx_sli_msi_w1c_enb2 {
+	u64 u64;
+	struct cvmx_sli_msi_w1c_enb2_s {
+		u64 clr : 64;
+	} s;
+	struct cvmx_sli_msi_w1c_enb2_s cn61xx;
+	struct cvmx_sli_msi_w1c_enb2_s cn63xx;
+	struct cvmx_sli_msi_w1c_enb2_s cn63xxp1;
+	struct cvmx_sli_msi_w1c_enb2_s cn66xx;
+	struct cvmx_sli_msi_w1c_enb2_s cn68xx;
+	struct cvmx_sli_msi_w1c_enb2_s cn68xxp1;
+	struct cvmx_sli_msi_w1c_enb2_s cn70xx;
+	struct cvmx_sli_msi_w1c_enb2_s cn70xxp1;
+	struct cvmx_sli_msi_w1c_enb2_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_w1c_enb2 cvmx_sli_msi_w1c_enb2_t;
+
+/**
+ * cvmx_sli_msi_w1c_enb3
+ *
+ * Used to clear bits in SLI_MSI_ENB3.
+ *
+ */
+union cvmx_sli_msi_w1c_enb3 {
+	u64 u64;
+	struct cvmx_sli_msi_w1c_enb3_s {
+		u64 clr : 64;
+	} s;
+	struct cvmx_sli_msi_w1c_enb3_s cn61xx;
+	struct cvmx_sli_msi_w1c_enb3_s cn63xx;
+	struct cvmx_sli_msi_w1c_enb3_s cn63xxp1;
+	struct cvmx_sli_msi_w1c_enb3_s cn66xx;
+	struct cvmx_sli_msi_w1c_enb3_s cn68xx;
+	struct cvmx_sli_msi_w1c_enb3_s cn68xxp1;
+	struct cvmx_sli_msi_w1c_enb3_s cn70xx;
+	struct cvmx_sli_msi_w1c_enb3_s cn70xxp1;
+	struct cvmx_sli_msi_w1c_enb3_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_w1c_enb3 cvmx_sli_msi_w1c_enb3_t;
+
+/**
+ * cvmx_sli_msi_w1s_enb0
+ *
+ * Used to set bits in SLI_MSI_ENB0.
+ *
+ */
+union cvmx_sli_msi_w1s_enb0 {
+	u64 u64;
+	struct cvmx_sli_msi_w1s_enb0_s {
+		u64 set : 64;
+	} s;
+	struct cvmx_sli_msi_w1s_enb0_s cn61xx;
+	struct cvmx_sli_msi_w1s_enb0_s cn63xx;
+	struct cvmx_sli_msi_w1s_enb0_s cn63xxp1;
+	struct cvmx_sli_msi_w1s_enb0_s cn66xx;
+	struct cvmx_sli_msi_w1s_enb0_s cn68xx;
+	struct cvmx_sli_msi_w1s_enb0_s cn68xxp1;
+	struct cvmx_sli_msi_w1s_enb0_s cn70xx;
+	struct cvmx_sli_msi_w1s_enb0_s cn70xxp1;
+	struct cvmx_sli_msi_w1s_enb0_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_w1s_enb0 cvmx_sli_msi_w1s_enb0_t;
+
+/**
+ * cvmx_sli_msi_w1s_enb1
+ *
+ * SLI_MSI_W1S_ENB0 = SLI MSI Write 1 To Set Enable1
+ * Used to set bits in SLI_MSI_ENB1.
+ */
+union cvmx_sli_msi_w1s_enb1 {
+	u64 u64;
+	struct cvmx_sli_msi_w1s_enb1_s {
+		u64 set : 64;
+	} s;
+	struct cvmx_sli_msi_w1s_enb1_s cn61xx;
+	struct cvmx_sli_msi_w1s_enb1_s cn63xx;
+	struct cvmx_sli_msi_w1s_enb1_s cn63xxp1;
+	struct cvmx_sli_msi_w1s_enb1_s cn66xx;
+	struct cvmx_sli_msi_w1s_enb1_s cn68xx;
+	struct cvmx_sli_msi_w1s_enb1_s cn68xxp1;
+	struct cvmx_sli_msi_w1s_enb1_s cn70xx;
+	struct cvmx_sli_msi_w1s_enb1_s cn70xxp1;
+	struct cvmx_sli_msi_w1s_enb1_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_w1s_enb1 cvmx_sli_msi_w1s_enb1_t;
+
+/**
+ * cvmx_sli_msi_w1s_enb2
+ *
+ * Used to set bits in SLI_MSI_ENB2.
+ *
+ */
+union cvmx_sli_msi_w1s_enb2 {
+	u64 u64;
+	struct cvmx_sli_msi_w1s_enb2_s {
+		u64 set : 64;
+	} s;
+	struct cvmx_sli_msi_w1s_enb2_s cn61xx;
+	struct cvmx_sli_msi_w1s_enb2_s cn63xx;
+	struct cvmx_sli_msi_w1s_enb2_s cn63xxp1;
+	struct cvmx_sli_msi_w1s_enb2_s cn66xx;
+	struct cvmx_sli_msi_w1s_enb2_s cn68xx;
+	struct cvmx_sli_msi_w1s_enb2_s cn68xxp1;
+	struct cvmx_sli_msi_w1s_enb2_s cn70xx;
+	struct cvmx_sli_msi_w1s_enb2_s cn70xxp1;
+	struct cvmx_sli_msi_w1s_enb2_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_w1s_enb2 cvmx_sli_msi_w1s_enb2_t;
+
+/**
+ * cvmx_sli_msi_w1s_enb3
+ *
+ * Used to set bits in SLI_MSI_ENB3.
+ *
+ */
+union cvmx_sli_msi_w1s_enb3 {
+	u64 u64;
+	struct cvmx_sli_msi_w1s_enb3_s {
+		u64 set : 64;
+	} s;
+	struct cvmx_sli_msi_w1s_enb3_s cn61xx;
+	struct cvmx_sli_msi_w1s_enb3_s cn63xx;
+	struct cvmx_sli_msi_w1s_enb3_s cn63xxp1;
+	struct cvmx_sli_msi_w1s_enb3_s cn66xx;
+	struct cvmx_sli_msi_w1s_enb3_s cn68xx;
+	struct cvmx_sli_msi_w1s_enb3_s cn68xxp1;
+	struct cvmx_sli_msi_w1s_enb3_s cn70xx;
+	struct cvmx_sli_msi_w1s_enb3_s cn70xxp1;
+	struct cvmx_sli_msi_w1s_enb3_s cnf71xx;
+};
+
+typedef union cvmx_sli_msi_w1s_enb3 cvmx_sli_msi_w1s_enb3_t;
+
+/**
+ * cvmx_sli_msi_wr_map
+ *
+ * This register is used to write the mapping function of the SLI_PCIE_MSI_RCV to SLI_MSI_RCV
+ * registers. At reset, the mapping function is one-to-one, that is MSI_INT 1 maps to CIU_INT 1,
+ * 2 to 2, 3 to 3, etc.
+ */
+union cvmx_sli_msi_wr_map {
+	u64 u64;
+	struct cvmx_sli_msi_wr_map_s {
+		u64 reserved_16_63 : 48;
+		u64 ciu_int : 8;
+		u64 msi_int : 8;
+	} s;
+	struct cvmx_sli_msi_wr_map_s cn61xx;
+	struct cvmx_sli_msi_wr_map_s cn63xx;
+	struct cvmx_sli_msi_wr_map_s cn63xxp1;
+	struct cvmx_sli_msi_wr_map_s cn66xx;
+	struct cvmx_sli_msi_wr_map_s cn68xx;
+	struct cvmx_sli_msi_wr_map_s cn68xxp1;
+	struct cvmx_sli_msi_wr_map_s cn70xx;
+	struct cvmx_sli_msi_wr_map_s cn70xxp1;
+	struct cvmx_sli_msi_wr_map_s cn73xx;
+	struct cvmx_sli_msi_wr_map_s cn78xx;
+	struct cvmx_sli_msi_wr_map_s cn78xxp1;
+	struct cvmx_sli_msi_wr_map_s cnf71xx;
+	struct cvmx_sli_msi_wr_map_s cnf75xx;
+};
+
+typedef union cvmx_sli_msi_wr_map cvmx_sli_msi_wr_map_t;
+
+/**
+ * cvmx_sli_msix#_table_addr
+ *
+ * The MSI-X table cannot be burst read or written.
+ *
+ * The combination of all MSI-X Tables contain (64 + 4) entries - one per
+ * ring plus one per PF. (i.e. 64 plus one per valid SLI_MAC()_PF()_INT_SUM
+ * present.)
+ *
+ * The MSI-X table for an individual PF has SLI_PKT_MAC()_PF()_RINFO[TRS]
+ * entries for the rings associated to the PF (up to 64 max) plus one
+ * more table entry for SLI_MAC()_PF()_INT_SUM. The
+ * SLI_MAC()_PF()_INT_SUM-related MSI-X table entry is
+ * always entry SLI_MSIX(SLI_PKT_MAC()_PF()_RINFO[TRS])_TABLE_ADDR and
+ * always present and valid. All earlier SLI_MSIX()_TABLE_ADDR entries
+ * correspond to rings. When SLI_PKT_MAC()_PF()_RINFO[NVFS]=0, SR-IOV
+ * virtual functions cannot be used, and all SLI_PKT_MAC()_PF()_RINFO[TRS]+1
+ * entries in the PF MSI-X table are present and valid for use by the PF.
+ * When SLI_PKT_MAC()_PF()_RINFO[NVFS]!=0, SR-IOV virtual functions may
+ * be used, and the first
+ *   SLI_PKT_MAC()_PF()_RINFO[NVFS]*SLI_PKT_MAC()_PF()_RINFO[RPVF]
+ * entries of the PF MSI-X table are present but not valid, and
+ * should never be accessed by the PF.
+ *
+ * The MSI-X table for an individual VF has SLI_PKT_MAC()_PF()_RINFO[RPVF]
+ * entries (up to 8 max), all valid, one per ring that the VF owns.
+ */
+union cvmx_sli_msixx_table_addr {
+	u64 u64;
+	struct cvmx_sli_msixx_table_addr_s {
+		u64 addr : 64;
+	} s;
+	struct cvmx_sli_msixx_table_addr_s cn73xx;
+	struct cvmx_sli_msixx_table_addr_s cn78xx;
+	struct cvmx_sli_msixx_table_addr_s cn78xxp1;
+	struct cvmx_sli_msixx_table_addr_s cnf75xx;
+};
+
+typedef union cvmx_sli_msixx_table_addr cvmx_sli_msixx_table_addr_t;
+
+/**
+ * cvmx_sli_msix#_table_data
+ *
+ * The MSI-X table cannot be burst read or written. VF/PF access is the same as
+ * described for the SLI_MSIX()_TABLE_ADDR.
+ */
+union cvmx_sli_msixx_table_data {
+	u64 u64;
+	struct cvmx_sli_msixx_table_data_s {
+		u64 reserved_33_63 : 31;
+		u64 vector_ctl : 1;
+		u64 data : 32;
+	} s;
+	struct cvmx_sli_msixx_table_data_s cn73xx;
+	struct cvmx_sli_msixx_table_data_s cn78xx;
+	struct cvmx_sli_msixx_table_data_s cn78xxp1;
+	struct cvmx_sli_msixx_table_data_s cnf75xx;
+};
+
+typedef union cvmx_sli_msixx_table_data cvmx_sli_msixx_table_data_t;
+
+/**
+ * cvmx_sli_msix_mac#_pf_table_addr
+ *
+ * These registers shadow the four physical MSIX PF ERR entries.
+ * Each MAC sees its entry at its own TRS offset.
+ */
+union cvmx_sli_msix_macx_pf_table_addr {
+	u64 u64;
+	struct cvmx_sli_msix_macx_pf_table_addr_s {
+		u64 addr : 64;
+	} s;
+	struct cvmx_sli_msix_macx_pf_table_addr_s cn78xxp1;
+};
+
+typedef union cvmx_sli_msix_macx_pf_table_addr cvmx_sli_msix_macx_pf_table_addr_t;
+
+/**
+ * cvmx_sli_msix_mac#_pf_table_data
+ *
+ * These registers shadow four physical MSIX PF ERR entries.
+ * Each MAC sees its entry at its own TRS offset.
+ */
+union cvmx_sli_msix_macx_pf_table_data {
+	u64 u64;
+	struct cvmx_sli_msix_macx_pf_table_data_s {
+		u64 reserved_33_63 : 31;
+		u64 vector_ctl : 1;
+		u64 data : 32;
+	} s;
+	struct cvmx_sli_msix_macx_pf_table_data_s cn78xxp1;
+};
+
+typedef union cvmx_sli_msix_macx_pf_table_data cvmx_sli_msix_macx_pf_table_data_t;
+
+/**
+ * cvmx_sli_msix_pba0
+ *
+ * The MSI-X pending bit array cannot be burst read.
+ * In SR-IOV mode, a VF will find its pending completion interrupts in bit
+ * positions [(RPVF-1):0]. If RPVF<64, bits [63:RPVF] are returned as zero.
+ *
+ * Each VF can read their own pending completion interrupts based on the ring/VF
+ * configuration. Therefore, a VF sees the PBA as smaller than what is shown below
+ * (unless it owns all 64 entries).  Unassigned bits will return zeros.
+ *
+ * <pre>
+ *    RPVF  Interrupts per VF   Pending bits returned
+ *    ----  -----------------   ---------------------
+ *      0            0          0
+ *      1            1          MSG_PND0
+ *      2            2          MSG_PND1  - MSG_PND0
+ *      4            4          MSG_PND3  - MSG_PND0
+ *      8            8          MSG_PND7  - MSG_PND0
+ * </pre>
+ *
+ * If SLI_PKT_MAC()_PF()_RINFO[TRS]=63 (i.e. 64 total DPI Packet Rings configured), a PF will
+ * find its pending completion interrupts in bit positions [63:0]. When
+ * SLI_PKT_MAC()_PF()_RINFO[TRS]=63,
+ * the PF will find its PCIe error interrupt in SLI_MSIX_PBA1, bit position 0.
+ *
+ * If SLI_PKT_MAC()_PF()_RINFO[TRS]<63 (i.e. 0, 1, 2, 4, or 8 rings configured), a PF will find
+ * its ring pending completion interrupts in bit positions [TNR:0]. It will find its PCIe
+ * error interrupt in bit position [(TNR+1)]. Bits [63:(TNR+2)] are returned as zero.
+ * When SLI_PKT_MAC()_PF()_RINFO[TRS]<63, SLI_MSIX_PBA1 is not used and returns zeros.
+ *
+ * If SR-IOV Mode is off there is no virtual function support, but the PF can configure up to 65
+ * entries (up to 64 DPI Packet Rings plus 1 PF ring) for itself.
+ */
+union cvmx_sli_msix_pba0 {
+	u64 u64;
+	struct cvmx_sli_msix_pba0_s {
+		u64 msg_pnd : 64;
+	} s;
+	struct cvmx_sli_msix_pba0_s cn73xx;
+	struct cvmx_sli_msix_pba0_s cn78xx;
+	struct cvmx_sli_msix_pba0_s cn78xxp1;
+	struct cvmx_sli_msix_pba0_s cnf75xx;
+};
+
+typedef union cvmx_sli_msix_pba0 cvmx_sli_msix_pba0_t;
+
+/**
+ * cvmx_sli_msix_pba1
+ *
+ * The MSI-X pending bit array cannot be burst read.
+ *
+ * PF_PND is assigned to PCIe related errors. The error bit can only be found in PBA1 when
+ * SLI_PKT_MAC()_PF()_RINFO[TRS]=63 (i.e. 64 total DPI Packet Rings configured).
+ *
+ * This register is accessible by the PF. A read by a particular PF only
+ * returns its own pending status. That is, any PF can read this register, but the hardware
+ * ensures
+ * that the PF only sees its own status.
+ */
+union cvmx_sli_msix_pba1 {
+	u64 u64;
+	struct cvmx_sli_msix_pba1_s {
+		u64 reserved_1_63 : 63;
+		u64 pf_pnd : 1;
+	} s;
+	struct cvmx_sli_msix_pba1_s cn73xx;
+	struct cvmx_sli_msix_pba1_s cn78xx;
+	struct cvmx_sli_msix_pba1_s cn78xxp1;
+	struct cvmx_sli_msix_pba1_s cnf75xx;
+};
+
+typedef union cvmx_sli_msix_pba1 cvmx_sli_msix_pba1_t;
+
+/**
+ * cvmx_sli_nqm_rsp_err_snd_dbg
+ *
+ * This register is for diagnostic use only.
+ *
+ */
+union cvmx_sli_nqm_rsp_err_snd_dbg {
+	u64 u64;
+	struct cvmx_sli_nqm_rsp_err_snd_dbg_s {
+		u64 reserved_12_63 : 52;
+		u64 vf_index : 12;
+	} s;
+	struct cvmx_sli_nqm_rsp_err_snd_dbg_s cn73xx;
+	struct cvmx_sli_nqm_rsp_err_snd_dbg_s cn78xx;
+	struct cvmx_sli_nqm_rsp_err_snd_dbg_s cnf75xx;
+};
+
+typedef union cvmx_sli_nqm_rsp_err_snd_dbg cvmx_sli_nqm_rsp_err_snd_dbg_t;
+
+/**
+ * cvmx_sli_pcie_msi_rcv
+ *
+ * This is the register where MSI write operations are directed from the MAC.
+ *
+ */
+union cvmx_sli_pcie_msi_rcv {
+	u64 u64;
+	struct cvmx_sli_pcie_msi_rcv_s {
+		u64 reserved_8_63 : 56;
+		u64 intr : 8;
+	} s;
+	struct cvmx_sli_pcie_msi_rcv_s cn61xx;
+	struct cvmx_sli_pcie_msi_rcv_s cn63xx;
+	struct cvmx_sli_pcie_msi_rcv_s cn63xxp1;
+	struct cvmx_sli_pcie_msi_rcv_s cn66xx;
+	struct cvmx_sli_pcie_msi_rcv_s cn68xx;
+	struct cvmx_sli_pcie_msi_rcv_s cn68xxp1;
+	struct cvmx_sli_pcie_msi_rcv_s cn70xx;
+	struct cvmx_sli_pcie_msi_rcv_s cn70xxp1;
+	struct cvmx_sli_pcie_msi_rcv_s cn73xx;
+	struct cvmx_sli_pcie_msi_rcv_s cn78xx;
+	struct cvmx_sli_pcie_msi_rcv_s cn78xxp1;
+	struct cvmx_sli_pcie_msi_rcv_s cnf71xx;
+	struct cvmx_sli_pcie_msi_rcv_s cnf75xx;
+};
+
+typedef union cvmx_sli_pcie_msi_rcv cvmx_sli_pcie_msi_rcv_t;
+
+/**
+ * cvmx_sli_pcie_msi_rcv_b1
+ *
+ * This register is where MSI write operations are directed from the MAC. This register can be
+ * used by the PCIe and SRIO MACs.
+ */
+union cvmx_sli_pcie_msi_rcv_b1 {
+	u64 u64;
+	struct cvmx_sli_pcie_msi_rcv_b1_s {
+		u64 reserved_16_63 : 48;
+		u64 intr : 8;
+		u64 reserved_0_7 : 8;
+	} s;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn61xx;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn63xx;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn63xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn66xx;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn68xx;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn68xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn70xx;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn70xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn73xx;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn78xx;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cn78xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cnf71xx;
+	struct cvmx_sli_pcie_msi_rcv_b1_s cnf75xx;
+};
+
+typedef union cvmx_sli_pcie_msi_rcv_b1 cvmx_sli_pcie_msi_rcv_b1_t;
+
+/**
+ * cvmx_sli_pcie_msi_rcv_b2
+ *
+ * This register is where MSI write operations are directed from the MAC.  This register can be
+ * used by PCIe and SRIO MACs.
+ */
+union cvmx_sli_pcie_msi_rcv_b2 {
+	u64 u64;
+	struct cvmx_sli_pcie_msi_rcv_b2_s {
+		u64 reserved_24_63 : 40;
+		u64 intr : 8;
+		u64 reserved_0_15 : 16;
+	} s;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn61xx;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn63xx;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn63xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn66xx;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn68xx;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn68xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn70xx;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn70xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn73xx;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn78xx;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cn78xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cnf71xx;
+	struct cvmx_sli_pcie_msi_rcv_b2_s cnf75xx;
+};
+
+typedef union cvmx_sli_pcie_msi_rcv_b2 cvmx_sli_pcie_msi_rcv_b2_t;
+
+/**
+ * cvmx_sli_pcie_msi_rcv_b3
+ *
+ * This register is where MSI write operations are directed from the MAC. This register can be
+ * used by PCIe and SRIO MACs.
+ */
+union cvmx_sli_pcie_msi_rcv_b3 {
+	u64 u64;
+	struct cvmx_sli_pcie_msi_rcv_b3_s {
+		u64 reserved_32_63 : 32;
+		u64 intr : 8;
+		u64 reserved_0_23 : 24;
+	} s;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn61xx;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn63xx;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn63xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn66xx;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn68xx;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn68xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn70xx;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn70xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn73xx;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn78xx;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cn78xxp1;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cnf71xx;
+	struct cvmx_sli_pcie_msi_rcv_b3_s cnf75xx;
+};
+
+typedef union cvmx_sli_pcie_msi_rcv_b3 cvmx_sli_pcie_msi_rcv_b3_t;
+
+/**
+ * cvmx_sli_pkt#_cnts
+ *
+ * This register contains the counters for output rings.
+ *
+ */
+union cvmx_sli_pktx_cnts {
+	u64 u64;
+	struct cvmx_sli_pktx_cnts_s {
+		u64 po_int : 1;
+		u64 pi_int : 1;
+		u64 mbox_int : 1;
+		u64 resend : 1;
+		u64 reserved_54_59 : 6;
+		u64 timer : 22;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_sli_pktx_cnts_cn61xx {
+		u64 reserved_54_63 : 10;
+		u64 timer : 22;
+		u64 cnt : 32;
+	} cn61xx;
+	struct cvmx_sli_pktx_cnts_cn61xx cn63xx;
+	struct cvmx_sli_pktx_cnts_cn61xx cn63xxp1;
+	struct cvmx_sli_pktx_cnts_cn61xx cn66xx;
+	struct cvmx_sli_pktx_cnts_cn61xx cn68xx;
+	struct cvmx_sli_pktx_cnts_cn61xx cn68xxp1;
+	struct cvmx_sli_pktx_cnts_cn70xx {
+		u64 reserved_63_54 : 10;
+		u64 timer : 22;
+		u64 cnt : 32;
+	} cn70xx;
+	struct cvmx_sli_pktx_cnts_cn70xx cn70xxp1;
+	struct cvmx_sli_pktx_cnts_s cn73xx;
+	struct cvmx_sli_pktx_cnts_s cn78xx;
+	struct cvmx_sli_pktx_cnts_cn78xxp1 {
+		u64 po_int : 1;
+		u64 pi_int : 1;
+		u64 reserved_61_54 : 8;
+		u64 timer : 22;
+		u64 cnt : 32;
+	} cn78xxp1;
+	struct cvmx_sli_pktx_cnts_cn61xx cnf71xx;
+	struct cvmx_sli_pktx_cnts_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_cnts cvmx_sli_pktx_cnts_t;
+
+/**
+ * cvmx_sli_pkt#_error_info
+ *
+ * The fields in this register are set when an error conditions occur and can be cleared.
+ * These fields are for information purpose only and do NOT generate interrupts.
+ */
+union cvmx_sli_pktx_error_info {
+	u64 u64;
+	struct cvmx_sli_pktx_error_info_s {
+		u64 reserved_8_63 : 56;
+		u64 osize_err : 1;
+		u64 nobdell_err : 1;
+		u64 pins_err : 1;
+		u64 pop_err : 1;
+		u64 pdi_err : 1;
+		u64 pgl_err : 1;
+		u64 psldbof : 1;
+		u64 pidbof : 1;
+	} s;
+	struct cvmx_sli_pktx_error_info_s cn73xx;
+	struct cvmx_sli_pktx_error_info_s cn78xx;
+	struct cvmx_sli_pktx_error_info_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_error_info cvmx_sli_pktx_error_info_t;
+
+/**
+ * cvmx_sli_pkt#_in_bp
+ *
+ * "SLI_PKT[0..31]_IN_BP = SLI Packet ring# Input Backpressure
+ * The counters and thresholds for input packets to apply backpressure to processing of the
+ * packets."
+ */
+union cvmx_sli_pktx_in_bp {
+	u64 u64;
+	struct cvmx_sli_pktx_in_bp_s {
+		u64 wmark : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_sli_pktx_in_bp_s cn61xx;
+	struct cvmx_sli_pktx_in_bp_s cn63xx;
+	struct cvmx_sli_pktx_in_bp_s cn63xxp1;
+	struct cvmx_sli_pktx_in_bp_s cn66xx;
+	struct cvmx_sli_pktx_in_bp_s cn70xx;
+	struct cvmx_sli_pktx_in_bp_s cn70xxp1;
+	struct cvmx_sli_pktx_in_bp_s cnf71xx;
+};
+
+typedef union cvmx_sli_pktx_in_bp cvmx_sli_pktx_in_bp_t;
+
+/**
+ * cvmx_sli_pkt#_input_control
+ *
+ * This register is the control for read operations for gather list and instructions.
+ *
+ */
+union cvmx_sli_pktx_input_control {
+	u64 u64;
+	struct cvmx_sli_pktx_input_control_s {
+		u64 reserved_55_63 : 9;
+		u64 rpvf : 7;
+		u64 reserved_31_47 : 17;
+		u64 mac_num : 2;
+		u64 quiet : 1;
+		u64 reserved_27_27 : 1;
+		u64 rdsize : 2;
+		u64 is_64b : 1;
+		u64 rst : 1;
+		u64 enb : 1;
+		u64 pbp_dhi : 13;
+		u64 d_nsr : 1;
+		u64 d_esr : 2;
+		u64 d_ror : 1;
+		u64 use_csr : 1;
+		u64 nsr : 1;
+		u64 esr : 2;
+		u64 ror : 1;
+	} s;
+	struct cvmx_sli_pktx_input_control_cn73xx {
+		u64 reserved_55_63 : 9;
+		u64 rpvf : 7;
+		u64 pvf_num : 16;
+		u64 reserved_31_31 : 1;
+		u64 mac_num : 2;
+		u64 quiet : 1;
+		u64 reserved_27_27 : 1;
+		u64 rdsize : 2;
+		u64 is_64b : 1;
+		u64 rst : 1;
+		u64 enb : 1;
+		u64 pbp_dhi : 13;
+		u64 d_nsr : 1;
+		u64 d_esr : 2;
+		u64 d_ror : 1;
+		u64 use_csr : 1;
+		u64 nsr : 1;
+		u64 esr : 2;
+		u64 ror : 1;
+	} cn73xx;
+	struct cvmx_sli_pktx_input_control_cn73xx cn78xx;
+	struct cvmx_sli_pktx_input_control_cn78xxp1 {
+		u64 reserved_39_63 : 25;
+		u64 vf_num : 7;
+		u64 reserved_31_31 : 1;
+		u64 mac_num : 2;
+		u64 reserved_27_28 : 2;
+		u64 rdsize : 2;
+		u64 is_64b : 1;
+		u64 rst : 1;
+		u64 enb : 1;
+		u64 pbp_dhi : 13;
+		u64 d_nsr : 1;
+		u64 d_esr : 2;
+		u64 d_ror : 1;
+		u64 use_csr : 1;
+		u64 nsr : 1;
+		u64 esr : 2;
+		u64 ror : 1;
+	} cn78xxp1;
+	struct cvmx_sli_pktx_input_control_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_input_control cvmx_sli_pktx_input_control_t;
+
+/**
+ * cvmx_sli_pkt#_instr_baddr
+ *
+ * This register contains the start-of-instruction for input packets. The address must be
+ * addressed-aligned to the size of the instruction.
+ */
+union cvmx_sli_pktx_instr_baddr {
+	u64 u64;
+	struct cvmx_sli_pktx_instr_baddr_s {
+		u64 addr : 61;
+		u64 reserved_0_2 : 3;
+	} s;
+	struct cvmx_sli_pktx_instr_baddr_s cn61xx;
+	struct cvmx_sli_pktx_instr_baddr_s cn63xx;
+	struct cvmx_sli_pktx_instr_baddr_s cn63xxp1;
+	struct cvmx_sli_pktx_instr_baddr_s cn66xx;
+	struct cvmx_sli_pktx_instr_baddr_s cn68xx;
+	struct cvmx_sli_pktx_instr_baddr_s cn68xxp1;
+	struct cvmx_sli_pktx_instr_baddr_s cn70xx;
+	struct cvmx_sli_pktx_instr_baddr_s cn70xxp1;
+	struct cvmx_sli_pktx_instr_baddr_s cn73xx;
+	struct cvmx_sli_pktx_instr_baddr_s cn78xx;
+	struct cvmx_sli_pktx_instr_baddr_s cn78xxp1;
+	struct cvmx_sli_pktx_instr_baddr_s cnf71xx;
+	struct cvmx_sli_pktx_instr_baddr_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_instr_baddr cvmx_sli_pktx_instr_baddr_t;
+
+/**
+ * cvmx_sli_pkt#_instr_baoff_dbell
+ *
+ * This register contains the doorbell and base address offset for the next read.
+ *
+ */
+union cvmx_sli_pktx_instr_baoff_dbell {
+	u64 u64;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s {
+		u64 aoff : 32;
+		u64 dbell : 32;
+	} s;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn61xx;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn63xx;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn63xxp1;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn66xx;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn68xx;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn68xxp1;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn70xx;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn70xxp1;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn73xx;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn78xx;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cn78xxp1;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cnf71xx;
+	struct cvmx_sli_pktx_instr_baoff_dbell_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_instr_baoff_dbell cvmx_sli_pktx_instr_baoff_dbell_t;
+
+/**
+ * cvmx_sli_pkt#_instr_fifo_rsize
+ *
+ * This register contains the FIFO field and ring size for instructions.
+ *
+ */
+union cvmx_sli_pktx_instr_fifo_rsize {
+	u64 u64;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s {
+		u64 max : 9;
+		u64 rrp : 9;
+		u64 wrp : 9;
+		u64 fcnt : 5;
+		u64 rsize : 32;
+	} s;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn61xx;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn63xx;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn63xxp1;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn66xx;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn68xx;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn68xxp1;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn70xx;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn70xxp1;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn73xx;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn78xx;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cn78xxp1;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cnf71xx;
+	struct cvmx_sli_pktx_instr_fifo_rsize_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_instr_fifo_rsize cvmx_sli_pktx_instr_fifo_rsize_t;
+
+/**
+ * cvmx_sli_pkt#_instr_header
+ *
+ * "SLI_PKT[0..31]_INSTR_HEADER = SLI Packet ring# Instruction Header.
+ * VAlues used to build input packet header."
+ */
+union cvmx_sli_pktx_instr_header {
+	u64 u64;
+	struct cvmx_sli_pktx_instr_header_s {
+		u64 reserved_44_63 : 20;
+		u64 pbp : 1;
+		u64 reserved_38_42 : 5;
+		u64 rparmode : 2;
+		u64 reserved_35_35 : 1;
+		u64 rskp_len : 7;
+		u64 rngrpext : 2;
+		u64 rnqos : 1;
+		u64 rngrp : 1;
+		u64 rntt : 1;
+		u64 rntag : 1;
+		u64 use_ihdr : 1;
+		u64 reserved_16_20 : 5;
+		u64 par_mode : 2;
+		u64 reserved_13_13 : 1;
+		u64 skp_len : 7;
+		u64 ngrpext : 2;
+		u64 nqos : 1;
+		u64 ngrp : 1;
+		u64 ntt : 1;
+		u64 ntag : 1;
+	} s;
+	struct cvmx_sli_pktx_instr_header_cn61xx {
+		u64 reserved_44_63 : 20;
+		u64 pbp : 1;
+		u64 reserved_38_42 : 5;
+		u64 rparmode : 2;
+		u64 reserved_35_35 : 1;
+		u64 rskp_len : 7;
+		u64 reserved_26_27 : 2;
+		u64 rnqos : 1;
+		u64 rngrp : 1;
+		u64 rntt : 1;
+		u64 rntag : 1;
+		u64 use_ihdr : 1;
+		u64 reserved_16_20 : 5;
+		u64 par_mode : 2;
+		u64 reserved_13_13 : 1;
+		u64 skp_len : 7;
+		u64 reserved_4_5 : 2;
+		u64 nqos : 1;
+		u64 ngrp : 1;
+		u64 ntt : 1;
+		u64 ntag : 1;
+	} cn61xx;
+	struct cvmx_sli_pktx_instr_header_cn61xx cn63xx;
+	struct cvmx_sli_pktx_instr_header_cn61xx cn63xxp1;
+	struct cvmx_sli_pktx_instr_header_cn61xx cn66xx;
+	struct cvmx_sli_pktx_instr_header_s cn68xx;
+	struct cvmx_sli_pktx_instr_header_cn61xx cn68xxp1;
+	struct cvmx_sli_pktx_instr_header_cn70xx {
+		u64 reserved_44_63 : 20;
+		u64 pbp : 1;
+		u64 reserved_38_42 : 5;
+		u64 rparmode : 2;
+		u64 reserved_35_35 : 1;
+		u64 rskp_len : 7;
+		u64 reserved_27_26 : 2;
+		u64 rnqos : 1;
+		u64 rngrp : 1;
+		u64 rntt : 1;
+		u64 rntag : 1;
+		u64 use_ihdr : 1;
+		u64 reserved_20_16 : 5;
+		u64 par_mode : 2;
+		u64 reserved_13_13 : 1;
+		u64 skp_len : 7;
+		u64 reserved_5_4 : 2;
+		u64 nqos : 1;
+		u64 ngrp : 1;
+		u64 ntt : 1;
+		u64 ntag : 1;
+	} cn70xx;
+	struct cvmx_sli_pktx_instr_header_cn70xx cn70xxp1;
+	struct cvmx_sli_pktx_instr_header_cn61xx cnf71xx;
+};
+
+typedef union cvmx_sli_pktx_instr_header cvmx_sli_pktx_instr_header_t;
+
+/**
+ * cvmx_sli_pkt#_int_levels
+ *
+ * This register contains output-packet interrupt levels.
+ *
+ */
+union cvmx_sli_pktx_int_levels {
+	u64 u64;
+	struct cvmx_sli_pktx_int_levels_s {
+		u64 reserved_54_63 : 10;
+		u64 time : 22;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_sli_pktx_int_levels_s cn73xx;
+	struct cvmx_sli_pktx_int_levels_s cn78xx;
+	struct cvmx_sli_pktx_int_levels_s cn78xxp1;
+	struct cvmx_sli_pktx_int_levels_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_int_levels cvmx_sli_pktx_int_levels_t;
+
+/**
+ * cvmx_sli_pkt#_mbox_int
+ *
+ * This register contains information to service mbox interrupts to the VF
+ * when the PF writes SLI_PKT()_PF_VF_MBOX_SIG(0).
+ */
+union cvmx_sli_pktx_mbox_int {
+	u64 u64;
+	struct cvmx_sli_pktx_mbox_int_s {
+		u64 po_int : 1;
+		u64 pi_int : 1;
+		u64 mbox_int : 1;
+		u64 resend : 1;
+		u64 reserved_1_59 : 59;
+		u64 mbox_en : 1;
+	} s;
+	struct cvmx_sli_pktx_mbox_int_s cn73xx;
+	struct cvmx_sli_pktx_mbox_int_s cn78xx;
+	struct cvmx_sli_pktx_mbox_int_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_mbox_int cvmx_sli_pktx_mbox_int_t;
+
+/**
+ * cvmx_sli_pkt#_out_size
+ *
+ * This register contains the BSIZE and ISIZE for output packet rings.
+ *
+ */
+union cvmx_sli_pktx_out_size {
+	u64 u64;
+	struct cvmx_sli_pktx_out_size_s {
+		u64 reserved_23_63 : 41;
+		u64 isize : 7;
+		u64 bsize : 16;
+	} s;
+	struct cvmx_sli_pktx_out_size_s cn61xx;
+	struct cvmx_sli_pktx_out_size_s cn63xx;
+	struct cvmx_sli_pktx_out_size_s cn63xxp1;
+	struct cvmx_sli_pktx_out_size_s cn66xx;
+	struct cvmx_sli_pktx_out_size_s cn68xx;
+	struct cvmx_sli_pktx_out_size_s cn68xxp1;
+	struct cvmx_sli_pktx_out_size_s cn70xx;
+	struct cvmx_sli_pktx_out_size_s cn70xxp1;
+	struct cvmx_sli_pktx_out_size_cn73xx {
+		u64 reserved_22_63 : 42;
+		u64 isize : 6;
+		u64 bsize : 16;
+	} cn73xx;
+	struct cvmx_sli_pktx_out_size_cn73xx cn78xx;
+	struct cvmx_sli_pktx_out_size_s cn78xxp1;
+	struct cvmx_sli_pktx_out_size_s cnf71xx;
+	struct cvmx_sli_pktx_out_size_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_out_size cvmx_sli_pktx_out_size_t;
+
+/**
+ * cvmx_sli_pkt#_output_control
+ *
+ * This register is the control for read operations for gather list and instructions.
+ *
+ */
+union cvmx_sli_pktx_output_control {
+	u64 u64;
+	struct cvmx_sli_pktx_output_control_s {
+		u64 reserved_14_63 : 50;
+		u64 tenb : 1;
+		u64 cenb : 1;
+		u64 iptr : 1;
+		u64 es : 2;
+		u64 nsr : 1;
+		u64 ror : 1;
+		u64 dptr : 1;
+		u64 bmode : 1;
+		u64 es_p : 2;
+		u64 nsr_p : 1;
+		u64 ror_p : 1;
+		u64 enb : 1;
+	} s;
+	struct cvmx_sli_pktx_output_control_s cn73xx;
+	struct cvmx_sli_pktx_output_control_s cn78xx;
+	struct cvmx_sli_pktx_output_control_s cn78xxp1;
+	struct cvmx_sli_pktx_output_control_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_output_control cvmx_sli_pktx_output_control_t;
+
+/**
+ * cvmx_sli_pkt#_pf_vf_mbox_sig#
+ *
+ * These registers are used for communication of data from the PF to the VF and vice versa.
+ *
+ * There are two registers per ring, SIG(0) and SIG(1). The PF and VF, both, have read and
+ * write access to these registers.
+ *
+ * For PF-to-VF ring interrupts, SLI_PKT(0..63)_MBOX_INT[MBOX_EN] must be set.
+ * When [MBOX_EN] is set, writes from the PF to byte 0 of the SIG(0) register will cause
+ * an interrupt by setting [MBOX_INT] in the corresponding ring address of
+ * SLI_PKT()_MBOX_INT[MBOX_INT],
+ * SLI_PKT_IN_DONE()_CNTS[MBOX_INT], and SLI_PKT()_CNTS[MBOX_INT].
+ *
+ * For VF-to-PF ring interrupt, SLI_MAC()_PF()_INT_ENB[VF_MBOX] must be set.
+ * When [VF_MBOX] is set, write from the VF to byte 0 of the SIG(1) register will cause an
+ * interrupt by setting ring address VF_INT field in corresponding SLI_MAC()_PF()_MBOX_INT
+ * register,
+ * which may cause an interrupt to occur through PF.
+ *
+ * Each PF and VF can only access the rings that it owns as programmed by
+ * SLI_PKT_MAC()_PF()_RINFO.
+ * The signaling is ring-based. If a VF owns more than one ring, it can ignore the other
+ * rings' registers if not needed.
+ */
+union cvmx_sli_pktx_pf_vf_mbox_sigx {
+	u64 u64;
+	struct cvmx_sli_pktx_pf_vf_mbox_sigx_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_pktx_pf_vf_mbox_sigx_s cn73xx;
+	struct cvmx_sli_pktx_pf_vf_mbox_sigx_s cn78xx;
+	struct cvmx_sli_pktx_pf_vf_mbox_sigx_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_pf_vf_mbox_sigx cvmx_sli_pktx_pf_vf_mbox_sigx_t;
+
+/**
+ * cvmx_sli_pkt#_slist_baddr
+ *
+ * This register contains the start of scatter list for output-packet pointers. This address must
+ * be 16-byte aligned.
+ */
+union cvmx_sli_pktx_slist_baddr {
+	u64 u64;
+	struct cvmx_sli_pktx_slist_baddr_s {
+		u64 addr : 60;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_sli_pktx_slist_baddr_s cn61xx;
+	struct cvmx_sli_pktx_slist_baddr_s cn63xx;
+	struct cvmx_sli_pktx_slist_baddr_s cn63xxp1;
+	struct cvmx_sli_pktx_slist_baddr_s cn66xx;
+	struct cvmx_sli_pktx_slist_baddr_s cn68xx;
+	struct cvmx_sli_pktx_slist_baddr_s cn68xxp1;
+	struct cvmx_sli_pktx_slist_baddr_s cn70xx;
+	struct cvmx_sli_pktx_slist_baddr_s cn70xxp1;
+	struct cvmx_sli_pktx_slist_baddr_s cn73xx;
+	struct cvmx_sli_pktx_slist_baddr_s cn78xx;
+	struct cvmx_sli_pktx_slist_baddr_s cn78xxp1;
+	struct cvmx_sli_pktx_slist_baddr_s cnf71xx;
+	struct cvmx_sli_pktx_slist_baddr_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_slist_baddr cvmx_sli_pktx_slist_baddr_t;
+
+/**
+ * cvmx_sli_pkt#_slist_baoff_dbell
+ *
+ * This register contains the doorbell and base-address offset for next read operation.
+ *
+ */
+union cvmx_sli_pktx_slist_baoff_dbell {
+	u64 u64;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s {
+		u64 aoff : 32;
+		u64 dbell : 32;
+	} s;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn61xx;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn63xx;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn63xxp1;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn66xx;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn68xx;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn68xxp1;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn70xx;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn70xxp1;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn73xx;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn78xx;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cn78xxp1;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cnf71xx;
+	struct cvmx_sli_pktx_slist_baoff_dbell_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_slist_baoff_dbell cvmx_sli_pktx_slist_baoff_dbell_t;
+
+/**
+ * cvmx_sli_pkt#_slist_fifo_rsize
+ *
+ * This register contains the number of scatter pointer pairs in the scatter list.
+ *
+ */
+union cvmx_sli_pktx_slist_fifo_rsize {
+	u64 u64;
+	struct cvmx_sli_pktx_slist_fifo_rsize_s {
+		u64 reserved_32_63 : 32;
+		u64 rsize : 32;
+	} s;
+	struct cvmx_sli_pktx_slist_fifo_rsize_s cn61xx;
+	struct cvmx_sli_pktx_slist_fifo_rsize_s cn63xx;
+	struct cvmx_sli_pktx_slist_fifo_rsize_s cn63xxp1;
+	struct cvmx_sli_pktx_slist_fifo_rsize_s cn66xx;
+	struct cvmx_sli_pktx_slist_fifo_rsize_s cn68xx;
+	struct cvmx_sli_pktx_slist_fifo_rsize_s cn68xxp1;
+	struct cvmx_sli_pktx_slist_fifo_rsize_cn70xx {
+		u64 reserved_63_32 : 32;
+		u64 rsize : 32;
+	} cn70xx;
+	struct cvmx_sli_pktx_slist_fifo_rsize_cn70xx cn70xxp1;
+	struct cvmx_sli_pktx_slist_fifo_rsize_cn70xx cn73xx;
+	struct cvmx_sli_pktx_slist_fifo_rsize_cn70xx cn78xx;
+	struct cvmx_sli_pktx_slist_fifo_rsize_cn70xx cn78xxp1;
+	struct cvmx_sli_pktx_slist_fifo_rsize_s cnf71xx;
+	struct cvmx_sli_pktx_slist_fifo_rsize_cn70xx cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_slist_fifo_rsize cvmx_sli_pktx_slist_fifo_rsize_t;
+
+/**
+ * cvmx_sli_pkt#_vf_int_sum
+ *
+ * This register contains summary interrupts bits for a VF. A VF read of this register
+ * for any of its 8 rings will return the same 8-bit summary for packet input, packet
+ * output and mailbox interrupts. If a PF reads this register it will return 0x0.
+ */
+union cvmx_sli_pktx_vf_int_sum {
+	u64 u64;
+	struct cvmx_sli_pktx_vf_int_sum_s {
+		u64 reserved_40_63 : 24;
+		u64 mbox : 8;
+		u64 reserved_24_31 : 8;
+		u64 pkt_out : 8;
+		u64 reserved_8_15 : 8;
+		u64 pkt_in : 8;
+	} s;
+	struct cvmx_sli_pktx_vf_int_sum_s cn73xx;
+	struct cvmx_sli_pktx_vf_int_sum_s cn78xx;
+	struct cvmx_sli_pktx_vf_int_sum_s cnf75xx;
+};
+
+typedef union cvmx_sli_pktx_vf_int_sum cvmx_sli_pktx_vf_int_sum_t;
+
+/**
+ * cvmx_sli_pkt#_vf_sig
+ *
+ * This register is used to signal between PF/VF. These 64 registers are index by VF number.
+ *
+ */
+union cvmx_sli_pktx_vf_sig {
+	u64 u64;
+	struct cvmx_sli_pktx_vf_sig_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_pktx_vf_sig_s cn78xxp1;
+};
+
+typedef union cvmx_sli_pktx_vf_sig cvmx_sli_pktx_vf_sig_t;
+
+/**
+ * cvmx_sli_pkt_bist_status
+ *
+ * This is the built-in self-test (BIST) status register. Each bit is the BIST result of an
+ * individual memory (per bit, 0 = pass and 1 = fail).
+ */
+union cvmx_sli_pkt_bist_status {
+	u64 u64;
+	struct cvmx_sli_pkt_bist_status_s {
+		u64 reserved_22_63 : 42;
+		u64 bist : 22;
+	} s;
+	struct cvmx_sli_pkt_bist_status_s cn73xx;
+	struct cvmx_sli_pkt_bist_status_s cn78xx;
+	struct cvmx_sli_pkt_bist_status_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_bist_status cvmx_sli_pkt_bist_status_t;
+
+/**
+ * cvmx_sli_pkt_cnt_int
+ *
+ * This register specifies which output packet rings are interrupting because of packet counters.
+ * A bit set in this interrupt register will set a corresponding bit in SLI_PKT_INT and can
+ * also cause SLI_MAC()_PF()_INT_SUM[PCNT] to be set if SLI_PKT()_OUTPUT_CONTROL[CENB] is set.
+ * When read by a function, this register informs which rings owned by the function (0 to N,
+ * N as large as 63) have this interrupt pending.
+ */
+union cvmx_sli_pkt_cnt_int {
+	u64 u64;
+	struct cvmx_sli_pkt_cnt_int_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_sli_pkt_cnt_int_cn61xx {
+		u64 reserved_32_63 : 32;
+		u64 port : 32;
+	} cn61xx;
+	struct cvmx_sli_pkt_cnt_int_cn61xx cn63xx;
+	struct cvmx_sli_pkt_cnt_int_cn61xx cn63xxp1;
+	struct cvmx_sli_pkt_cnt_int_cn61xx cn66xx;
+	struct cvmx_sli_pkt_cnt_int_cn61xx cn68xx;
+	struct cvmx_sli_pkt_cnt_int_cn61xx cn68xxp1;
+	struct cvmx_sli_pkt_cnt_int_cn61xx cn70xx;
+	struct cvmx_sli_pkt_cnt_int_cn61xx cn70xxp1;
+	struct cvmx_sli_pkt_cnt_int_cn73xx {
+		u64 ring : 64;
+	} cn73xx;
+	struct cvmx_sli_pkt_cnt_int_cn73xx cn78xx;
+	struct cvmx_sli_pkt_cnt_int_cn73xx cn78xxp1;
+	struct cvmx_sli_pkt_cnt_int_cn61xx cnf71xx;
+	struct cvmx_sli_pkt_cnt_int_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_cnt_int cvmx_sli_pkt_cnt_int_t;
+
+/**
+ * cvmx_sli_pkt_cnt_int_enb
+ *
+ * Enable for the packets rings that are interrupting because of Packet Counters.
+ *
+ */
+union cvmx_sli_pkt_cnt_int_enb {
+	u64 u64;
+	struct cvmx_sli_pkt_cnt_int_enb_s {
+		u64 reserved_32_63 : 32;
+		u64 port : 32;
+	} s;
+	struct cvmx_sli_pkt_cnt_int_enb_s cn61xx;
+	struct cvmx_sli_pkt_cnt_int_enb_s cn63xx;
+	struct cvmx_sli_pkt_cnt_int_enb_s cn63xxp1;
+	struct cvmx_sli_pkt_cnt_int_enb_s cn66xx;
+	struct cvmx_sli_pkt_cnt_int_enb_s cn68xx;
+	struct cvmx_sli_pkt_cnt_int_enb_s cn68xxp1;
+	struct cvmx_sli_pkt_cnt_int_enb_s cn70xx;
+	struct cvmx_sli_pkt_cnt_int_enb_s cn70xxp1;
+	struct cvmx_sli_pkt_cnt_int_enb_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_cnt_int_enb cvmx_sli_pkt_cnt_int_enb_t;
+
+/**
+ * cvmx_sli_pkt_ctl
+ *
+ * Control for packets.
+ *
+ */
+union cvmx_sli_pkt_ctl {
+	u64 u64;
+	struct cvmx_sli_pkt_ctl_s {
+		u64 reserved_5_63 : 59;
+		u64 ring_en : 1;
+		u64 pkt_bp : 4;
+	} s;
+	struct cvmx_sli_pkt_ctl_s cn61xx;
+	struct cvmx_sli_pkt_ctl_s cn63xx;
+	struct cvmx_sli_pkt_ctl_s cn63xxp1;
+	struct cvmx_sli_pkt_ctl_s cn66xx;
+	struct cvmx_sli_pkt_ctl_s cn68xx;
+	struct cvmx_sli_pkt_ctl_s cn68xxp1;
+	struct cvmx_sli_pkt_ctl_s cn70xx;
+	struct cvmx_sli_pkt_ctl_s cn70xxp1;
+	struct cvmx_sli_pkt_ctl_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_ctl cvmx_sli_pkt_ctl_t;
+
+/**
+ * cvmx_sli_pkt_data_out_es
+ *
+ * The Endian Swap for writing Data Out.
+ *
+ */
+union cvmx_sli_pkt_data_out_es {
+	u64 u64;
+	struct cvmx_sli_pkt_data_out_es_s {
+		u64 es : 64;
+	} s;
+	struct cvmx_sli_pkt_data_out_es_s cn61xx;
+	struct cvmx_sli_pkt_data_out_es_s cn63xx;
+	struct cvmx_sli_pkt_data_out_es_s cn63xxp1;
+	struct cvmx_sli_pkt_data_out_es_s cn66xx;
+	struct cvmx_sli_pkt_data_out_es_s cn68xx;
+	struct cvmx_sli_pkt_data_out_es_s cn68xxp1;
+	struct cvmx_sli_pkt_data_out_es_s cn70xx;
+	struct cvmx_sli_pkt_data_out_es_s cn70xxp1;
+	struct cvmx_sli_pkt_data_out_es_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_data_out_es cvmx_sli_pkt_data_out_es_t;
+
+/**
+ * cvmx_sli_pkt_data_out_ns
+ *
+ * The NS field for the TLP when writing packet data.
+ *
+ */
+union cvmx_sli_pkt_data_out_ns {
+	u64 u64;
+	struct cvmx_sli_pkt_data_out_ns_s {
+		u64 reserved_32_63 : 32;
+		u64 nsr : 32;
+	} s;
+	struct cvmx_sli_pkt_data_out_ns_s cn61xx;
+	struct cvmx_sli_pkt_data_out_ns_s cn63xx;
+	struct cvmx_sli_pkt_data_out_ns_s cn63xxp1;
+	struct cvmx_sli_pkt_data_out_ns_s cn66xx;
+	struct cvmx_sli_pkt_data_out_ns_s cn68xx;
+	struct cvmx_sli_pkt_data_out_ns_s cn68xxp1;
+	struct cvmx_sli_pkt_data_out_ns_s cn70xx;
+	struct cvmx_sli_pkt_data_out_ns_s cn70xxp1;
+	struct cvmx_sli_pkt_data_out_ns_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_data_out_ns cvmx_sli_pkt_data_out_ns_t;
+
+/**
+ * cvmx_sli_pkt_data_out_ror
+ *
+ * The ROR field for the TLP when writing Packet Data.
+ *
+ */
+union cvmx_sli_pkt_data_out_ror {
+	u64 u64;
+	struct cvmx_sli_pkt_data_out_ror_s {
+		u64 reserved_32_63 : 32;
+		u64 ror : 32;
+	} s;
+	struct cvmx_sli_pkt_data_out_ror_s cn61xx;
+	struct cvmx_sli_pkt_data_out_ror_s cn63xx;
+	struct cvmx_sli_pkt_data_out_ror_s cn63xxp1;
+	struct cvmx_sli_pkt_data_out_ror_s cn66xx;
+	struct cvmx_sli_pkt_data_out_ror_s cn68xx;
+	struct cvmx_sli_pkt_data_out_ror_s cn68xxp1;
+	struct cvmx_sli_pkt_data_out_ror_s cn70xx;
+	struct cvmx_sli_pkt_data_out_ror_s cn70xxp1;
+	struct cvmx_sli_pkt_data_out_ror_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_data_out_ror cvmx_sli_pkt_data_out_ror_t;
+
+/**
+ * cvmx_sli_pkt_dpaddr
+ *
+ * Used to detemine address and attributes for packet data writes.
+ *
+ */
+union cvmx_sli_pkt_dpaddr {
+	u64 u64;
+	struct cvmx_sli_pkt_dpaddr_s {
+		u64 reserved_32_63 : 32;
+		u64 dptr : 32;
+	} s;
+	struct cvmx_sli_pkt_dpaddr_s cn61xx;
+	struct cvmx_sli_pkt_dpaddr_s cn63xx;
+	struct cvmx_sli_pkt_dpaddr_s cn63xxp1;
+	struct cvmx_sli_pkt_dpaddr_s cn66xx;
+	struct cvmx_sli_pkt_dpaddr_s cn68xx;
+	struct cvmx_sli_pkt_dpaddr_s cn68xxp1;
+	struct cvmx_sli_pkt_dpaddr_s cn70xx;
+	struct cvmx_sli_pkt_dpaddr_s cn70xxp1;
+	struct cvmx_sli_pkt_dpaddr_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_dpaddr cvmx_sli_pkt_dpaddr_t;
+
+/**
+ * cvmx_sli_pkt_gbl_control
+ *
+ * This register contains control bits that affect all packet rings.
+ *
+ */
+union cvmx_sli_pkt_gbl_control {
+	u64 u64;
+	struct cvmx_sli_pkt_gbl_control_s {
+		u64 reserved_32_63 : 32;
+		u64 qtime : 16;
+		u64 reserved_14_15 : 2;
+		u64 bpkind : 6;
+		u64 reserved_4_7 : 4;
+		u64 pkpfval : 1;
+		u64 bpflr_d : 1;
+		u64 noptr_d : 1;
+		u64 picnt_d : 1;
+	} s;
+	struct cvmx_sli_pkt_gbl_control_s cn73xx;
+	struct cvmx_sli_pkt_gbl_control_s cn78xx;
+	struct cvmx_sli_pkt_gbl_control_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_gbl_control cvmx_sli_pkt_gbl_control_t;
+
+/**
+ * cvmx_sli_pkt_in_bp
+ *
+ * Which input rings have backpressure applied.
+ *
+ */
+union cvmx_sli_pkt_in_bp {
+	u64 u64;
+	struct cvmx_sli_pkt_in_bp_s {
+		u64 reserved_32_63 : 32;
+		u64 bp : 32;
+	} s;
+	struct cvmx_sli_pkt_in_bp_s cn61xx;
+	struct cvmx_sli_pkt_in_bp_s cn63xx;
+	struct cvmx_sli_pkt_in_bp_s cn63xxp1;
+	struct cvmx_sli_pkt_in_bp_s cn66xx;
+	struct cvmx_sli_pkt_in_bp_s cn70xx;
+	struct cvmx_sli_pkt_in_bp_s cn70xxp1;
+	struct cvmx_sli_pkt_in_bp_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_in_bp cvmx_sli_pkt_in_bp_t;
+
+/**
+ * cvmx_sli_pkt_in_done#_cnts
+ *
+ * This register contains counters for instructions completed on input rings.
+ *
+ */
+union cvmx_sli_pkt_in_donex_cnts {
+	u64 u64;
+	struct cvmx_sli_pkt_in_donex_cnts_s {
+		u64 po_int : 1;
+		u64 pi_int : 1;
+		u64 mbox_int : 1;
+		u64 resend : 1;
+		u64 reserved_49_59 : 11;
+		u64 cint_enb : 1;
+		u64 wmark : 16;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_sli_pkt_in_donex_cnts_cn61xx {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} cn61xx;
+	struct cvmx_sli_pkt_in_donex_cnts_cn61xx cn63xx;
+	struct cvmx_sli_pkt_in_donex_cnts_cn61xx cn63xxp1;
+	struct cvmx_sli_pkt_in_donex_cnts_cn61xx cn66xx;
+	struct cvmx_sli_pkt_in_donex_cnts_cn61xx cn68xx;
+	struct cvmx_sli_pkt_in_donex_cnts_cn61xx cn68xxp1;
+	struct cvmx_sli_pkt_in_donex_cnts_cn70xx {
+		u64 reserved_63_32 : 32;
+		u64 cnt : 32;
+	} cn70xx;
+	struct cvmx_sli_pkt_in_donex_cnts_cn70xx cn70xxp1;
+	struct cvmx_sli_pkt_in_donex_cnts_s cn73xx;
+	struct cvmx_sli_pkt_in_donex_cnts_s cn78xx;
+	struct cvmx_sli_pkt_in_donex_cnts_cn78xxp1 {
+		u64 po_int : 1;
+		u64 pi_int : 1;
+		u64 reserved_61_49 : 13;
+		u64 cint_enb : 1;
+		u64 wmark : 16;
+		u64 cnt : 32;
+	} cn78xxp1;
+	struct cvmx_sli_pkt_in_donex_cnts_cn61xx cnf71xx;
+	struct cvmx_sli_pkt_in_donex_cnts_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_in_donex_cnts cvmx_sli_pkt_in_donex_cnts_t;
+
+/**
+ * cvmx_sli_pkt_in_instr_counts
+ *
+ * This register contains keeps track of the number of instructions read into the FIFO and
+ * packets sent to PKI. This register is PF-only.
+ */
+union cvmx_sli_pkt_in_instr_counts {
+	u64 u64;
+	struct cvmx_sli_pkt_in_instr_counts_s {
+		u64 wr_cnt : 32;
+		u64 rd_cnt : 32;
+	} s;
+	struct cvmx_sli_pkt_in_instr_counts_s cn61xx;
+	struct cvmx_sli_pkt_in_instr_counts_s cn63xx;
+	struct cvmx_sli_pkt_in_instr_counts_s cn63xxp1;
+	struct cvmx_sli_pkt_in_instr_counts_s cn66xx;
+	struct cvmx_sli_pkt_in_instr_counts_s cn68xx;
+	struct cvmx_sli_pkt_in_instr_counts_s cn68xxp1;
+	struct cvmx_sli_pkt_in_instr_counts_s cn70xx;
+	struct cvmx_sli_pkt_in_instr_counts_s cn70xxp1;
+	struct cvmx_sli_pkt_in_instr_counts_s cn73xx;
+	struct cvmx_sli_pkt_in_instr_counts_s cn78xx;
+	struct cvmx_sli_pkt_in_instr_counts_s cn78xxp1;
+	struct cvmx_sli_pkt_in_instr_counts_s cnf71xx;
+	struct cvmx_sli_pkt_in_instr_counts_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_in_instr_counts cvmx_sli_pkt_in_instr_counts_t;
+
+/**
+ * cvmx_sli_pkt_in_int
+ *
+ * This register specifies which input packets rings are interrupting because of done counts.
+ * A bit set in this interrupt register will set a corresponding bit in SLI_PKT_INT which
+ * can cause a MSI-X interrupt.  When read by a function, this register informs which rings
+ * owned by the function (0 to N, N as large as 63) have this interrupt pending.
+ * SLI_PKT_IN_INT conditions can cause MSI-X interrupts, but do not cause any
+ * SLI_MAC()_PF()_INT_SUM
+ * bit to set, and cannot cause INTA/B/C/D nor MSI interrupts.
+ */
+union cvmx_sli_pkt_in_int {
+	u64 u64;
+	struct cvmx_sli_pkt_in_int_s {
+		u64 ring : 64;
+	} s;
+	struct cvmx_sli_pkt_in_int_s cn73xx;
+	struct cvmx_sli_pkt_in_int_s cn78xx;
+	struct cvmx_sli_pkt_in_int_s cn78xxp1;
+	struct cvmx_sli_pkt_in_int_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_in_int cvmx_sli_pkt_in_int_t;
+
+/**
+ * cvmx_sli_pkt_in_jabber
+ *
+ * Register to set limit on SLI packet input packet sizes.
+ *
+ */
+union cvmx_sli_pkt_in_jabber {
+	u64 u64;
+	struct cvmx_sli_pkt_in_jabber_s {
+		u64 reserved_32_63 : 32;
+		u64 size : 32;
+	} s;
+	struct cvmx_sli_pkt_in_jabber_s cn73xx;
+	struct cvmx_sli_pkt_in_jabber_s cn78xx;
+	struct cvmx_sli_pkt_in_jabber_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_in_jabber cvmx_sli_pkt_in_jabber_t;
+
+/**
+ * cvmx_sli_pkt_in_pcie_port
+ *
+ * Assigns Packet Input rings to MAC ports.
+ *
+ */
+union cvmx_sli_pkt_in_pcie_port {
+	u64 u64;
+	struct cvmx_sli_pkt_in_pcie_port_s {
+		u64 pp : 64;
+	} s;
+	struct cvmx_sli_pkt_in_pcie_port_s cn61xx;
+	struct cvmx_sli_pkt_in_pcie_port_s cn63xx;
+	struct cvmx_sli_pkt_in_pcie_port_s cn63xxp1;
+	struct cvmx_sli_pkt_in_pcie_port_s cn66xx;
+	struct cvmx_sli_pkt_in_pcie_port_s cn68xx;
+	struct cvmx_sli_pkt_in_pcie_port_s cn68xxp1;
+	struct cvmx_sli_pkt_in_pcie_port_s cn70xx;
+	struct cvmx_sli_pkt_in_pcie_port_s cn70xxp1;
+	struct cvmx_sli_pkt_in_pcie_port_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_in_pcie_port cvmx_sli_pkt_in_pcie_port_t;
+
+/**
+ * cvmx_sli_pkt_input_control
+ *
+ * Control for reads for gather list and instructions.
+ *
+ */
+union cvmx_sli_pkt_input_control {
+	u64 u64;
+	struct cvmx_sli_pkt_input_control_s {
+		u64 prd_erst : 1;
+		u64 prd_rds : 7;
+		u64 gii_erst : 1;
+		u64 gii_rds : 7;
+		u64 reserved_41_47 : 7;
+		u64 prc_idle : 1;
+		u64 reserved_24_39 : 16;
+		u64 pin_rst : 1;
+		u64 pkt_rr : 1;
+		u64 pbp_dhi : 13;
+		u64 d_nsr : 1;
+		u64 d_esr : 2;
+		u64 d_ror : 1;
+		u64 use_csr : 1;
+		u64 nsr : 1;
+		u64 esr : 2;
+		u64 ror : 1;
+	} s;
+	struct cvmx_sli_pkt_input_control_s cn61xx;
+	struct cvmx_sli_pkt_input_control_cn63xx {
+		u64 reserved_23_63 : 41;
+		u64 pkt_rr : 1;
+		u64 pbp_dhi : 13;
+		u64 d_nsr : 1;
+		u64 d_esr : 2;
+		u64 d_ror : 1;
+		u64 use_csr : 1;
+		u64 nsr : 1;
+		u64 esr : 2;
+		u64 ror : 1;
+	} cn63xx;
+	struct cvmx_sli_pkt_input_control_cn63xx cn63xxp1;
+	struct cvmx_sli_pkt_input_control_s cn66xx;
+	struct cvmx_sli_pkt_input_control_s cn68xx;
+	struct cvmx_sli_pkt_input_control_s cn68xxp1;
+	struct cvmx_sli_pkt_input_control_s cn70xx;
+	struct cvmx_sli_pkt_input_control_s cn70xxp1;
+	struct cvmx_sli_pkt_input_control_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_input_control cvmx_sli_pkt_input_control_t;
+
+/**
+ * cvmx_sli_pkt_instr_enb
+ *
+ * Multi-ring instruction input enable register. This register is PF-only.
+ *
+ */
+union cvmx_sli_pkt_instr_enb {
+	u64 u64;
+	struct cvmx_sli_pkt_instr_enb_s {
+		u64 enb : 64;
+	} s;
+	struct cvmx_sli_pkt_instr_enb_cn61xx {
+		u64 reserved_32_63 : 32;
+		u64 enb : 32;
+	} cn61xx;
+	struct cvmx_sli_pkt_instr_enb_cn61xx cn63xx;
+	struct cvmx_sli_pkt_instr_enb_cn61xx cn63xxp1;
+	struct cvmx_sli_pkt_instr_enb_cn61xx cn66xx;
+	struct cvmx_sli_pkt_instr_enb_cn61xx cn68xx;
+	struct cvmx_sli_pkt_instr_enb_cn61xx cn68xxp1;
+	struct cvmx_sli_pkt_instr_enb_cn61xx cn70xx;
+	struct cvmx_sli_pkt_instr_enb_cn61xx cn70xxp1;
+	struct cvmx_sli_pkt_instr_enb_s cn78xxp1;
+	struct cvmx_sli_pkt_instr_enb_cn61xx cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_instr_enb cvmx_sli_pkt_instr_enb_t;
+
+/**
+ * cvmx_sli_pkt_instr_rd_size
+ *
+ * The number of instruction allowed to be read at one time.
+ *
+ */
+union cvmx_sli_pkt_instr_rd_size {
+	u64 u64;
+	struct cvmx_sli_pkt_instr_rd_size_s {
+		u64 rdsize : 64;
+	} s;
+	struct cvmx_sli_pkt_instr_rd_size_s cn61xx;
+	struct cvmx_sli_pkt_instr_rd_size_s cn63xx;
+	struct cvmx_sli_pkt_instr_rd_size_s cn63xxp1;
+	struct cvmx_sli_pkt_instr_rd_size_s cn66xx;
+	struct cvmx_sli_pkt_instr_rd_size_s cn68xx;
+	struct cvmx_sli_pkt_instr_rd_size_s cn68xxp1;
+	struct cvmx_sli_pkt_instr_rd_size_s cn70xx;
+	struct cvmx_sli_pkt_instr_rd_size_s cn70xxp1;
+	struct cvmx_sli_pkt_instr_rd_size_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_instr_rd_size cvmx_sli_pkt_instr_rd_size_t;
+
+/**
+ * cvmx_sli_pkt_instr_size
+ *
+ * Determines if instructions are 64 or 32 byte in size for a Packet-ring.
+ *
+ */
+union cvmx_sli_pkt_instr_size {
+	u64 u64;
+	struct cvmx_sli_pkt_instr_size_s {
+		u64 reserved_32_63 : 32;
+		u64 is_64b : 32;
+	} s;
+	struct cvmx_sli_pkt_instr_size_s cn61xx;
+	struct cvmx_sli_pkt_instr_size_s cn63xx;
+	struct cvmx_sli_pkt_instr_size_s cn63xxp1;
+	struct cvmx_sli_pkt_instr_size_s cn66xx;
+	struct cvmx_sli_pkt_instr_size_s cn68xx;
+	struct cvmx_sli_pkt_instr_size_s cn68xxp1;
+	struct cvmx_sli_pkt_instr_size_s cn70xx;
+	struct cvmx_sli_pkt_instr_size_s cn70xxp1;
+	struct cvmx_sli_pkt_instr_size_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_instr_size cvmx_sli_pkt_instr_size_t;
+
+/**
+ * cvmx_sli_pkt_int
+ *
+ * This register combines the SLI_PKT_CNT_INT, SLI_PKT_TIME_INT or SLI_PKT_IN_INT interrupt
+ * registers. When read by a function, this register informs which rings owned by the function
+ * (0 to N, N as large as 63) have an interrupt pending.
+ */
+union cvmx_sli_pkt_int {
+	u64 u64;
+	struct cvmx_sli_pkt_int_s {
+		u64 ring : 64;
+	} s;
+	struct cvmx_sli_pkt_int_s cn73xx;
+	struct cvmx_sli_pkt_int_s cn78xx;
+	struct cvmx_sli_pkt_int_s cn78xxp1;
+	struct cvmx_sli_pkt_int_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_int cvmx_sli_pkt_int_t;
+
+/**
+ * cvmx_sli_pkt_int_levels
+ *
+ * SLI_PKT_INT_LEVELS = SLI's Packet Interrupt Levels
+ * Output packet interrupt levels.
+ */
+union cvmx_sli_pkt_int_levels {
+	u64 u64;
+	struct cvmx_sli_pkt_int_levels_s {
+		u64 reserved_54_63 : 10;
+		u64 time : 22;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_sli_pkt_int_levels_s cn61xx;
+	struct cvmx_sli_pkt_int_levels_s cn63xx;
+	struct cvmx_sli_pkt_int_levels_s cn63xxp1;
+	struct cvmx_sli_pkt_int_levels_s cn66xx;
+	struct cvmx_sli_pkt_int_levels_s cn68xx;
+	struct cvmx_sli_pkt_int_levels_s cn68xxp1;
+	struct cvmx_sli_pkt_int_levels_s cn70xx;
+	struct cvmx_sli_pkt_int_levels_s cn70xxp1;
+	struct cvmx_sli_pkt_int_levels_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_int_levels cvmx_sli_pkt_int_levels_t;
+
+/**
+ * cvmx_sli_pkt_iptr
+ *
+ * Controls using the Info-Pointer to store length and data.
+ *
+ */
+union cvmx_sli_pkt_iptr {
+	u64 u64;
+	struct cvmx_sli_pkt_iptr_s {
+		u64 reserved_32_63 : 32;
+		u64 iptr : 32;
+	} s;
+	struct cvmx_sli_pkt_iptr_s cn61xx;
+	struct cvmx_sli_pkt_iptr_s cn63xx;
+	struct cvmx_sli_pkt_iptr_s cn63xxp1;
+	struct cvmx_sli_pkt_iptr_s cn66xx;
+	struct cvmx_sli_pkt_iptr_s cn68xx;
+	struct cvmx_sli_pkt_iptr_s cn68xxp1;
+	struct cvmx_sli_pkt_iptr_s cn70xx;
+	struct cvmx_sli_pkt_iptr_s cn70xxp1;
+	struct cvmx_sli_pkt_iptr_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_iptr cvmx_sli_pkt_iptr_t;
+
+/**
+ * cvmx_sli_pkt_mac#_pf#_rinfo
+ *
+ * This register sets the total number and starting number of rings for a given MAC and PF
+ * combination. Indexed by (MAC index) SLI_PORT_E. In SR-IOV mode, SLI_PKT_MAC()_PF()_RINFO[RPVF]
+ * and SLI_PKT_MAC()_PF()_RINFO[NVFS] must be non zero and determine which rings the PFs and
+ * VFs own.
+ *
+ * An individual VF will own SLI_PKT_MAC()_PF()_RINFO[RPVF] number of rings.
+ *
+ * A PF will own the rings starting from ((SLI_PKT_MAC()_PF()_RINFO[SRN] +
+ * (SLI_PKT_MAC()_PF()_RINFO[RPVF] * SLI_PKT_MAC()_PF()_RINFO[NVFS]))
+ * to (SLI_PKT_MAC()_PF()_RINFO[SRN] + (SLI_PKT_MAC()_PF()_RINFO[TRS] -
+ * 1)). SLI_PKT()_INPUT_CONTROL[PVF_NUM] must be written to values that
+ * correlate with the fields in this register.
+ *
+ * e.g. Given:
+ * _ SLI_PKT_MAC0_PF0_RINFO[SRN] = 32,
+ * _ SLI_PKT_MAC0_PF0_RINFO[TRS] = 32,
+ * _ SLI_PKT_MAC0_PF0_RINFO[RPVF] = 4,
+ * _ SLI_PKT_MAC0_PF0_RINFO[NVFS] = 7:
+ * _ rings owned by VF1: 32,33,34,35
+ * _ rings owned by VF2: 36,37,38,39
+ * _ rings owned by VF3: 40,41,42,43
+ * _ rings owned by VF4: 44,45,46,47
+ * _ rings owned by VF5: 48,49,50,51
+ * _ rings owned by VF6: 52,53,54,55
+ * _ rings owned by VF7: 56,57,58,59
+ * _ rings owned by PF:  60,61,62,63
+ */
+union cvmx_sli_pkt_macx_pfx_rinfo {
+	u64 u64;
+	struct cvmx_sli_pkt_macx_pfx_rinfo_s {
+		u64 reserved_55_63 : 9;
+		u64 nvfs : 7;
+		u64 reserved_40_47 : 8;
+		u64 rpvf : 8;
+		u64 reserved_24_31 : 8;
+		u64 trs : 8;
+		u64 reserved_7_15 : 9;
+		u64 srn : 7;
+	} s;
+	struct cvmx_sli_pkt_macx_pfx_rinfo_s cn73xx;
+	struct cvmx_sli_pkt_macx_pfx_rinfo_s cn78xx;
+	struct cvmx_sli_pkt_macx_pfx_rinfo_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_macx_pfx_rinfo cvmx_sli_pkt_macx_pfx_rinfo_t;
+
+/**
+ * cvmx_sli_pkt_mac#_rinfo
+ *
+ * This register sets the total number and starting number of rings used by the MAC.
+ * This register is PF-only.
+ */
+union cvmx_sli_pkt_macx_rinfo {
+	u64 u64;
+	struct cvmx_sli_pkt_macx_rinfo_s {
+		u64 reserved_40_63 : 24;
+		u64 rpvf : 8;
+		u64 reserved_24_31 : 8;
+		u64 trs : 8;
+		u64 reserved_7_15 : 9;
+		u64 srn : 7;
+	} s;
+	struct cvmx_sli_pkt_macx_rinfo_s cn78xxp1;
+};
+
+typedef union cvmx_sli_pkt_macx_rinfo cvmx_sli_pkt_macx_rinfo_t;
+
+/**
+ * cvmx_sli_pkt_mac0_sig0
+ *
+ * This register is used to signal between PF/VF. This register can be R/W by the PF from MAC0
+ * and any VF.
+ */
+union cvmx_sli_pkt_mac0_sig0 {
+	u64 u64;
+	struct cvmx_sli_pkt_mac0_sig0_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_pkt_mac0_sig0_s cn78xxp1;
+};
+
+typedef union cvmx_sli_pkt_mac0_sig0 cvmx_sli_pkt_mac0_sig0_t;
+
+/**
+ * cvmx_sli_pkt_mac0_sig1
+ *
+ * This register is used to signal between PF/VF. This register can be R/W by the PF from MAC0
+ * and any VF.
+ */
+union cvmx_sli_pkt_mac0_sig1 {
+	u64 u64;
+	struct cvmx_sli_pkt_mac0_sig1_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_pkt_mac0_sig1_s cn78xxp1;
+};
+
+typedef union cvmx_sli_pkt_mac0_sig1 cvmx_sli_pkt_mac0_sig1_t;
+
+/**
+ * cvmx_sli_pkt_mac1_sig0
+ *
+ * This register is used to signal between PF/VF. This register can be R/W by the PF from MAC1
+ * and any VF.
+ */
+union cvmx_sli_pkt_mac1_sig0 {
+	u64 u64;
+	struct cvmx_sli_pkt_mac1_sig0_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_pkt_mac1_sig0_s cn78xxp1;
+};
+
+typedef union cvmx_sli_pkt_mac1_sig0 cvmx_sli_pkt_mac1_sig0_t;
+
+/**
+ * cvmx_sli_pkt_mac1_sig1
+ *
+ * This register is used to signal between PF/VF. This register can be R/W by the PF from MAC1
+ * and any VF.
+ */
+union cvmx_sli_pkt_mac1_sig1 {
+	u64 u64;
+	struct cvmx_sli_pkt_mac1_sig1_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_pkt_mac1_sig1_s cn78xxp1;
+};
+
+typedef union cvmx_sli_pkt_mac1_sig1 cvmx_sli_pkt_mac1_sig1_t;
+
+/**
+ * cvmx_sli_pkt_mem_ctl
+ *
+ * This register controls the ECC of the SLI packet memories.
+ *
+ */
+union cvmx_sli_pkt_mem_ctl {
+	u64 u64;
+	struct cvmx_sli_pkt_mem_ctl_s {
+		u64 reserved_48_63 : 16;
+		u64 msix_mbox_fs : 2;
+		u64 msix_mbox_ecc : 1;
+		u64 reserved_36_44 : 9;
+		u64 pos_fs : 2;
+		u64 pos_ecc : 1;
+		u64 pinm_fs : 2;
+		u64 pinm_ecc : 1;
+		u64 pind_fs : 2;
+		u64 pind_ecc : 1;
+		u64 point_fs : 2;
+		u64 point_ecc : 1;
+		u64 slist_fs : 2;
+		u64 slist_ecc : 1;
+		u64 pop1_fs : 2;
+		u64 pop1_ecc : 1;
+		u64 pop0_fs : 2;
+		u64 pop0_ecc : 1;
+		u64 pfp_fs : 2;
+		u64 pfp_ecc : 1;
+		u64 pbn_fs : 2;
+		u64 pbn_ecc : 1;
+		u64 pdf_fs : 2;
+		u64 pdf_ecc : 1;
+		u64 psf_fs : 2;
+		u64 psf_ecc : 1;
+		u64 poi_fs : 2;
+		u64 poi_ecc : 1;
+	} s;
+	struct cvmx_sli_pkt_mem_ctl_cn73xx {
+		u64 reserved_48_63 : 16;
+		u64 msix_mbox_fs : 2;
+		u64 msix_mbox_ecc : 1;
+		u64 msix_data_fs : 2;
+		u64 msix_data_ecc : 1;
+		u64 msix_addr_fs : 2;
+		u64 msix_addr_ecc : 1;
+		u64 pof_fs : 2;
+		u64 pof_ecc : 1;
+		u64 pos_fs : 2;
+		u64 pos_ecc : 1;
+		u64 pinm_fs : 2;
+		u64 pinm_ecc : 1;
+		u64 pind_fs : 2;
+		u64 pind_ecc : 1;
+		u64 point_fs : 2;
+		u64 point_ecc : 1;
+		u64 slist_fs : 2;
+		u64 slist_ecc : 1;
+		u64 pop1_fs : 2;
+		u64 pop1_ecc : 1;
+		u64 pop0_fs : 2;
+		u64 pop0_ecc : 1;
+		u64 pfp_fs : 2;
+		u64 pfp_ecc : 1;
+		u64 pbn_fs : 2;
+		u64 pbn_ecc : 1;
+		u64 pdf_fs : 2;
+		u64 pdf_ecc : 1;
+		u64 psf_fs : 2;
+		u64 psf_ecc : 1;
+		u64 poi_fs : 2;
+		u64 poi_ecc : 1;
+	} cn73xx;
+	struct cvmx_sli_pkt_mem_ctl_cn73xx cn78xx;
+	struct cvmx_sli_pkt_mem_ctl_cn78xxp1 {
+		u64 reserved_44_63 : 20;
+		u64 msid_fs : 2;
+		u64 msia_fs : 2;
+		u64 msi_ecc : 1;
+		u64 posi_fs : 2;
+		u64 posi_ecc : 1;
+		u64 pos_fs : 2;
+		u64 pos_ecc : 1;
+		u64 pinm_fs : 2;
+		u64 pinm_ecc : 1;
+		u64 pind_fs : 2;
+		u64 pind_ecc : 1;
+		u64 point_fs : 2;
+		u64 point_ecc : 1;
+		u64 slist_fs : 2;
+		u64 slist_ecc : 1;
+		u64 pop1_fs : 2;
+		u64 pop1_ecc : 1;
+		u64 pop0_fs : 2;
+		u64 pop0_ecc : 1;
+		u64 pfp_fs : 2;
+		u64 pfp_ecc : 1;
+		u64 pbn_fs : 2;
+		u64 pbn_ecc : 1;
+		u64 pdf_fs : 2;
+		u64 pdf_ecc : 1;
+		u64 psf_fs : 2;
+		u64 psf_ecc : 1;
+		u64 poi_fs : 2;
+		u64 poi_ecc : 1;
+	} cn78xxp1;
+	struct cvmx_sli_pkt_mem_ctl_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_mem_ctl cvmx_sli_pkt_mem_ctl_t;
+
+/**
+ * cvmx_sli_pkt_out_bmode
+ *
+ * Control the updating of the SLI_PKT#_CNT register.
+ *
+ */
+union cvmx_sli_pkt_out_bmode {
+	u64 u64;
+	struct cvmx_sli_pkt_out_bmode_s {
+		u64 reserved_32_63 : 32;
+		u64 bmode : 32;
+	} s;
+	struct cvmx_sli_pkt_out_bmode_s cn61xx;
+	struct cvmx_sli_pkt_out_bmode_s cn63xx;
+	struct cvmx_sli_pkt_out_bmode_s cn63xxp1;
+	struct cvmx_sli_pkt_out_bmode_s cn66xx;
+	struct cvmx_sli_pkt_out_bmode_s cn68xx;
+	struct cvmx_sli_pkt_out_bmode_s cn68xxp1;
+	struct cvmx_sli_pkt_out_bmode_s cn70xx;
+	struct cvmx_sli_pkt_out_bmode_s cn70xxp1;
+	struct cvmx_sli_pkt_out_bmode_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_out_bmode cvmx_sli_pkt_out_bmode_t;
+
+/**
+ * cvmx_sli_pkt_out_bp_en
+ *
+ * This register enables sending backpressure to PKO.
+ *
+ */
+union cvmx_sli_pkt_out_bp_en {
+	u64 u64;
+	struct cvmx_sli_pkt_out_bp_en_s {
+		u64 bp_en : 64;
+	} s;
+	struct cvmx_sli_pkt_out_bp_en_cn68xx {
+		u64 reserved_32_63 : 32;
+		u64 bp_en : 32;
+	} cn68xx;
+	struct cvmx_sli_pkt_out_bp_en_cn68xx cn68xxp1;
+	struct cvmx_sli_pkt_out_bp_en_s cn78xxp1;
+};
+
+typedef union cvmx_sli_pkt_out_bp_en cvmx_sli_pkt_out_bp_en_t;
+
+/**
+ * cvmx_sli_pkt_out_bp_en2_w1c
+ *
+ * This register disables sending backpressure to PKO.
+ *
+ */
+union cvmx_sli_pkt_out_bp_en2_w1c {
+	u64 u64;
+	struct cvmx_sli_pkt_out_bp_en2_w1c_s {
+		u64 w1c : 64;
+	} s;
+	struct cvmx_sli_pkt_out_bp_en2_w1c_s cn73xx;
+};
+
+typedef union cvmx_sli_pkt_out_bp_en2_w1c cvmx_sli_pkt_out_bp_en2_w1c_t;
+
+/**
+ * cvmx_sli_pkt_out_bp_en2_w1s
+ *
+ * This register enables sending backpressure to PKO.
+ *
+ */
+union cvmx_sli_pkt_out_bp_en2_w1s {
+	u64 u64;
+	struct cvmx_sli_pkt_out_bp_en2_w1s_s {
+		u64 w1s : 64;
+	} s;
+	struct cvmx_sli_pkt_out_bp_en2_w1s_s cn73xx;
+};
+
+typedef union cvmx_sli_pkt_out_bp_en2_w1s cvmx_sli_pkt_out_bp_en2_w1s_t;
+
+/**
+ * cvmx_sli_pkt_out_bp_en_w1c
+ *
+ * This register disables sending backpressure to PKO.
+ *
+ */
+union cvmx_sli_pkt_out_bp_en_w1c {
+	u64 u64;
+	struct cvmx_sli_pkt_out_bp_en_w1c_s {
+		u64 w1c : 64;
+	} s;
+	struct cvmx_sli_pkt_out_bp_en_w1c_s cn73xx;
+	struct cvmx_sli_pkt_out_bp_en_w1c_s cn78xx;
+	struct cvmx_sli_pkt_out_bp_en_w1c_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_out_bp_en_w1c cvmx_sli_pkt_out_bp_en_w1c_t;
+
+/**
+ * cvmx_sli_pkt_out_bp_en_w1s
+ *
+ * This register enables sending backpressure to PKO.
+ *
+ */
+union cvmx_sli_pkt_out_bp_en_w1s {
+	u64 u64;
+	struct cvmx_sli_pkt_out_bp_en_w1s_s {
+		u64 w1s : 64;
+	} s;
+	struct cvmx_sli_pkt_out_bp_en_w1s_s cn73xx;
+	struct cvmx_sli_pkt_out_bp_en_w1s_s cn78xx;
+	struct cvmx_sli_pkt_out_bp_en_w1s_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_out_bp_en_w1s cvmx_sli_pkt_out_bp_en_w1s_t;
+
+/**
+ * cvmx_sli_pkt_out_enb
+ *
+ * Multi-ring packet output enable register. This register is PF-only.
+ *
+ */
+union cvmx_sli_pkt_out_enb {
+	u64 u64;
+	struct cvmx_sli_pkt_out_enb_s {
+		u64 enb : 64;
+	} s;
+	struct cvmx_sli_pkt_out_enb_cn61xx {
+		u64 reserved_32_63 : 32;
+		u64 enb : 32;
+	} cn61xx;
+	struct cvmx_sli_pkt_out_enb_cn61xx cn63xx;
+	struct cvmx_sli_pkt_out_enb_cn61xx cn63xxp1;
+	struct cvmx_sli_pkt_out_enb_cn61xx cn66xx;
+	struct cvmx_sli_pkt_out_enb_cn61xx cn68xx;
+	struct cvmx_sli_pkt_out_enb_cn61xx cn68xxp1;
+	struct cvmx_sli_pkt_out_enb_cn61xx cn70xx;
+	struct cvmx_sli_pkt_out_enb_cn61xx cn70xxp1;
+	struct cvmx_sli_pkt_out_enb_s cn78xxp1;
+	struct cvmx_sli_pkt_out_enb_cn61xx cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_out_enb cvmx_sli_pkt_out_enb_t;
+
+/**
+ * cvmx_sli_pkt_output_wmark
+ *
+ * This register sets the value that determines when backpressure is applied to the PKO. When
+ * SLI_PKT()_SLIST_BAOFF_DBELL[DBELL] is less than [WMARK], backpressure is sent to PKO for
+ * the associated channel. This register is PF-only.
+ */
+union cvmx_sli_pkt_output_wmark {
+	u64 u64;
+	struct cvmx_sli_pkt_output_wmark_s {
+		u64 reserved_32_63 : 32;
+		u64 wmark : 32;
+	} s;
+	struct cvmx_sli_pkt_output_wmark_s cn61xx;
+	struct cvmx_sli_pkt_output_wmark_s cn63xx;
+	struct cvmx_sli_pkt_output_wmark_s cn63xxp1;
+	struct cvmx_sli_pkt_output_wmark_s cn66xx;
+	struct cvmx_sli_pkt_output_wmark_s cn68xx;
+	struct cvmx_sli_pkt_output_wmark_s cn68xxp1;
+	struct cvmx_sli_pkt_output_wmark_s cn70xx;
+	struct cvmx_sli_pkt_output_wmark_s cn70xxp1;
+	struct cvmx_sli_pkt_output_wmark_s cn73xx;
+	struct cvmx_sli_pkt_output_wmark_s cn78xx;
+	struct cvmx_sli_pkt_output_wmark_s cn78xxp1;
+	struct cvmx_sli_pkt_output_wmark_s cnf71xx;
+	struct cvmx_sli_pkt_output_wmark_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_output_wmark cvmx_sli_pkt_output_wmark_t;
+
+/**
+ * cvmx_sli_pkt_pcie_port
+ *
+ * Assigns Packet Ports to MAC ports.
+ *
+ */
+union cvmx_sli_pkt_pcie_port {
+	u64 u64;
+	struct cvmx_sli_pkt_pcie_port_s {
+		u64 pp : 64;
+	} s;
+	struct cvmx_sli_pkt_pcie_port_s cn61xx;
+	struct cvmx_sli_pkt_pcie_port_s cn63xx;
+	struct cvmx_sli_pkt_pcie_port_s cn63xxp1;
+	struct cvmx_sli_pkt_pcie_port_s cn66xx;
+	struct cvmx_sli_pkt_pcie_port_s cn68xx;
+	struct cvmx_sli_pkt_pcie_port_s cn68xxp1;
+	struct cvmx_sli_pkt_pcie_port_s cn70xx;
+	struct cvmx_sli_pkt_pcie_port_s cn70xxp1;
+	struct cvmx_sli_pkt_pcie_port_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_pcie_port cvmx_sli_pkt_pcie_port_t;
+
+/**
+ * cvmx_sli_pkt_pkind_valid
+ *
+ * Enables bits per PKIND that are allowed to be sent to PKI specified in the
+ * DPI_PKT_INST_HDR_S[PKIND] DPI packet instruction field.
+ */
+union cvmx_sli_pkt_pkind_valid {
+	u64 u64;
+	struct cvmx_sli_pkt_pkind_valid_s {
+		u64 enb : 64;
+	} s;
+	struct cvmx_sli_pkt_pkind_valid_s cn73xx;
+	struct cvmx_sli_pkt_pkind_valid_s cn78xx;
+	struct cvmx_sli_pkt_pkind_valid_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_pkind_valid cvmx_sli_pkt_pkind_valid_t;
+
+/**
+ * cvmx_sli_pkt_port_in_rst
+ *
+ * SLI_PKT_PORT_IN_RST = SLI Packet Port In Reset
+ * Vector bits related to ring-port for ones that are reset.
+ */
+union cvmx_sli_pkt_port_in_rst {
+	u64 u64;
+	struct cvmx_sli_pkt_port_in_rst_s {
+		u64 in_rst : 32;
+		u64 out_rst : 32;
+	} s;
+	struct cvmx_sli_pkt_port_in_rst_s cn61xx;
+	struct cvmx_sli_pkt_port_in_rst_s cn63xx;
+	struct cvmx_sli_pkt_port_in_rst_s cn63xxp1;
+	struct cvmx_sli_pkt_port_in_rst_s cn66xx;
+	struct cvmx_sli_pkt_port_in_rst_s cn68xx;
+	struct cvmx_sli_pkt_port_in_rst_s cn68xxp1;
+	struct cvmx_sli_pkt_port_in_rst_s cn70xx;
+	struct cvmx_sli_pkt_port_in_rst_s cn70xxp1;
+	struct cvmx_sli_pkt_port_in_rst_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_port_in_rst cvmx_sli_pkt_port_in_rst_t;
+
+/**
+ * cvmx_sli_pkt_ring_rst
+ *
+ * When read by a PF, this register informs which rings owned by the function (0 to N, N as large
+ * as 63) are in reset. See also SLI_PKT()_INPUT_CONTROL[RST].
+ */
+union cvmx_sli_pkt_ring_rst {
+	u64 u64;
+	struct cvmx_sli_pkt_ring_rst_s {
+		u64 rst : 64;
+	} s;
+	struct cvmx_sli_pkt_ring_rst_s cn73xx;
+	struct cvmx_sli_pkt_ring_rst_s cn78xx;
+	struct cvmx_sli_pkt_ring_rst_s cn78xxp1;
+	struct cvmx_sli_pkt_ring_rst_s cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_ring_rst cvmx_sli_pkt_ring_rst_t;
+
+/**
+ * cvmx_sli_pkt_slist_es
+ *
+ * The Endian Swap for Scatter List Read.
+ *
+ */
+union cvmx_sli_pkt_slist_es {
+	u64 u64;
+	struct cvmx_sli_pkt_slist_es_s {
+		u64 es : 64;
+	} s;
+	struct cvmx_sli_pkt_slist_es_s cn61xx;
+	struct cvmx_sli_pkt_slist_es_s cn63xx;
+	struct cvmx_sli_pkt_slist_es_s cn63xxp1;
+	struct cvmx_sli_pkt_slist_es_s cn66xx;
+	struct cvmx_sli_pkt_slist_es_s cn68xx;
+	struct cvmx_sli_pkt_slist_es_s cn68xxp1;
+	struct cvmx_sli_pkt_slist_es_s cn70xx;
+	struct cvmx_sli_pkt_slist_es_s cn70xxp1;
+	struct cvmx_sli_pkt_slist_es_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_slist_es cvmx_sli_pkt_slist_es_t;
+
+/**
+ * cvmx_sli_pkt_slist_ns
+ *
+ * The NS field for the TLP when fetching Scatter List.
+ *
+ */
+union cvmx_sli_pkt_slist_ns {
+	u64 u64;
+	struct cvmx_sli_pkt_slist_ns_s {
+		u64 reserved_32_63 : 32;
+		u64 nsr : 32;
+	} s;
+	struct cvmx_sli_pkt_slist_ns_s cn61xx;
+	struct cvmx_sli_pkt_slist_ns_s cn63xx;
+	struct cvmx_sli_pkt_slist_ns_s cn63xxp1;
+	struct cvmx_sli_pkt_slist_ns_s cn66xx;
+	struct cvmx_sli_pkt_slist_ns_s cn68xx;
+	struct cvmx_sli_pkt_slist_ns_s cn68xxp1;
+	struct cvmx_sli_pkt_slist_ns_s cn70xx;
+	struct cvmx_sli_pkt_slist_ns_s cn70xxp1;
+	struct cvmx_sli_pkt_slist_ns_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_slist_ns cvmx_sli_pkt_slist_ns_t;
+
+/**
+ * cvmx_sli_pkt_slist_ror
+ *
+ * The ROR field for the TLP when fetching Scatter List.
+ *
+ */
+union cvmx_sli_pkt_slist_ror {
+	u64 u64;
+	struct cvmx_sli_pkt_slist_ror_s {
+		u64 reserved_32_63 : 32;
+		u64 ror : 32;
+	} s;
+	struct cvmx_sli_pkt_slist_ror_s cn61xx;
+	struct cvmx_sli_pkt_slist_ror_s cn63xx;
+	struct cvmx_sli_pkt_slist_ror_s cn63xxp1;
+	struct cvmx_sli_pkt_slist_ror_s cn66xx;
+	struct cvmx_sli_pkt_slist_ror_s cn68xx;
+	struct cvmx_sli_pkt_slist_ror_s cn68xxp1;
+	struct cvmx_sli_pkt_slist_ror_s cn70xx;
+	struct cvmx_sli_pkt_slist_ror_s cn70xxp1;
+	struct cvmx_sli_pkt_slist_ror_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_slist_ror cvmx_sli_pkt_slist_ror_t;
+
+/**
+ * cvmx_sli_pkt_time_int
+ *
+ * This register specifies which output packets rings are interrupting because of packet timers.
+ * A bit set in this interrupt register will set a corresponding bit in SLI_PKT_INT and can
+ * also cause SLI_MAC()_PF()_INT_SUM[PTIME] to be set if
+ * SLI_PKT()_OUTPUT_CONTROL[TENB]
+ * is set. When read by a function, this register informs which rings owned by the function (0 to
+ * N,
+ * N as large as 63) have this interrupt pending.
+ */
+union cvmx_sli_pkt_time_int {
+	u64 u64;
+	struct cvmx_sli_pkt_time_int_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_sli_pkt_time_int_cn61xx {
+		u64 reserved_32_63 : 32;
+		u64 port : 32;
+	} cn61xx;
+	struct cvmx_sli_pkt_time_int_cn61xx cn63xx;
+	struct cvmx_sli_pkt_time_int_cn61xx cn63xxp1;
+	struct cvmx_sli_pkt_time_int_cn61xx cn66xx;
+	struct cvmx_sli_pkt_time_int_cn61xx cn68xx;
+	struct cvmx_sli_pkt_time_int_cn61xx cn68xxp1;
+	struct cvmx_sli_pkt_time_int_cn61xx cn70xx;
+	struct cvmx_sli_pkt_time_int_cn61xx cn70xxp1;
+	struct cvmx_sli_pkt_time_int_cn73xx {
+		u64 ring : 64;
+	} cn73xx;
+	struct cvmx_sli_pkt_time_int_cn73xx cn78xx;
+	struct cvmx_sli_pkt_time_int_cn73xx cn78xxp1;
+	struct cvmx_sli_pkt_time_int_cn61xx cnf71xx;
+	struct cvmx_sli_pkt_time_int_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_pkt_time_int cvmx_sli_pkt_time_int_t;
+
+/**
+ * cvmx_sli_pkt_time_int_enb
+ *
+ * The packets rings that are interrupting because of Packet Timers.
+ *
+ */
+union cvmx_sli_pkt_time_int_enb {
+	u64 u64;
+	struct cvmx_sli_pkt_time_int_enb_s {
+		u64 reserved_32_63 : 32;
+		u64 port : 32;
+	} s;
+	struct cvmx_sli_pkt_time_int_enb_s cn61xx;
+	struct cvmx_sli_pkt_time_int_enb_s cn63xx;
+	struct cvmx_sli_pkt_time_int_enb_s cn63xxp1;
+	struct cvmx_sli_pkt_time_int_enb_s cn66xx;
+	struct cvmx_sli_pkt_time_int_enb_s cn68xx;
+	struct cvmx_sli_pkt_time_int_enb_s cn68xxp1;
+	struct cvmx_sli_pkt_time_int_enb_s cn70xx;
+	struct cvmx_sli_pkt_time_int_enb_s cn70xxp1;
+	struct cvmx_sli_pkt_time_int_enb_s cnf71xx;
+};
+
+typedef union cvmx_sli_pkt_time_int_enb cvmx_sli_pkt_time_int_enb_t;
+
+/**
+ * cvmx_sli_port#_pkind
+ *
+ * SLI_PORT[0..31]_PKIND = SLI Port Pkind
+ *
+ * The SLI/DPI supports 32 input rings for fetching input packets. This register maps the input-rings (0-31) to a PKIND.
+ */
+union cvmx_sli_portx_pkind {
+	u64 u64;
+	struct cvmx_sli_portx_pkind_s {
+		u64 reserved_25_63 : 39;
+		u64 rpk_enb : 1;
+		u64 reserved_22_23 : 2;
+		u64 pkindr : 6;
+		u64 reserved_14_15 : 2;
+		u64 bpkind : 6;
+		u64 reserved_6_7 : 2;
+		u64 pkind : 6;
+	} s;
+	struct cvmx_sli_portx_pkind_s cn68xx;
+	struct cvmx_sli_portx_pkind_cn68xxp1 {
+		u64 reserved_14_63 : 50;
+		u64 bpkind : 6;
+		u64 reserved_6_7 : 2;
+		u64 pkind : 6;
+	} cn68xxp1;
+};
+
+typedef union cvmx_sli_portx_pkind cvmx_sli_portx_pkind_t;
+
+/**
+ * cvmx_sli_pp_pkt_csr_control
+ *
+ * This register provides access to SLI packet register space from the cores.
+ * These SLI packet registers include the following:
+ *  SLI_MSIXX_TABLE_ADDR,
+ *  SLI_MSIXX_TABLE_DATA,
+ *  SLI_MSIX_PBA0,
+ *  SLI_MSIX_PBA1,
+ *  SLI_PKTX_INPUT_CONTROL,
+ *  SLI_PKTX_INSTR_BADDR,
+ *  SLI_PKTX_INSTR_BAOFF_DBELL,
+ *  SLI_PKTX_INSTR_FIFO_RSIZE,
+ *  SLI_PKT_IN_DONEX_CNTS,
+ *  SLI_PKTX_OUTPUT_CONTROL,
+ *  SLI_PKTX_OUT_SIZE,
+ *  SLI_PKTX_SLIST_BADDR,
+ *  SLI_PKTX_SLIST_BAOFF_DBELL,
+ *  SLI_PKTX_SLIST_FIFO_RSIZE,
+ *  SLI_PKTX_INT_LEVELS,
+ *  SLI_PKTX_CNTS,
+ *  SLI_PKTX_ERROR_INFO,
+ *  SLI_PKTX_VF_INT_SUM,
+ *  SLI_PKTX_PF_VF_MBOX_SIG,
+ *  SLI_PKTX_MBOX_INT.
+ */
+union cvmx_sli_pp_pkt_csr_control {
+	u64 u64;
+	struct cvmx_sli_pp_pkt_csr_control_s {
+		u64 reserved_18_63 : 46;
+		u64 mac : 2;
+		u64 pvf : 16;
+	} s;
+	struct cvmx_sli_pp_pkt_csr_control_s cn73xx;
+	struct cvmx_sli_pp_pkt_csr_control_s cn78xx;
+	struct cvmx_sli_pp_pkt_csr_control_s cnf75xx;
+};
+
+typedef union cvmx_sli_pp_pkt_csr_control cvmx_sli_pp_pkt_csr_control_t;
+
+/**
+ * cvmx_sli_s2c_end_merge
+ *
+ * Writing this register will cause a merge to end.
+ *
+ */
+union cvmx_sli_s2c_end_merge {
+	u64 u64;
+	struct cvmx_sli_s2c_end_merge_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_sli_s2c_end_merge_s cn73xx;
+	struct cvmx_sli_s2c_end_merge_s cn78xx;
+	struct cvmx_sli_s2c_end_merge_s cn78xxp1;
+	struct cvmx_sli_s2c_end_merge_s cnf75xx;
+};
+
+typedef union cvmx_sli_s2c_end_merge cvmx_sli_s2c_end_merge_t;
+
+/**
+ * cvmx_sli_s2m_port#_ctl
+ *
+ * These registers contain control for access from SLI to a MAC port. Indexed by SLI_PORT_E.
+ * Write operations to these registers are not ordered with write/read operations to the MAC
+ * memory space. To ensure that a write operation has completed, read the register before
+ * making an access (i.e. MAC memory space) that requires the value of this register to be
+ * updated.
+ */
+union cvmx_sli_s2m_portx_ctl {
+	u64 u64;
+	struct cvmx_sli_s2m_portx_ctl_s {
+		u64 reserved_7_63 : 57;
+		u64 dvferr : 1;
+		u64 lcl_node : 1;
+		u64 wind_d : 1;
+		u64 bar0_d : 1;
+		u64 reserved_0_2 : 3;
+	} s;
+	struct cvmx_sli_s2m_portx_ctl_cn61xx {
+		u64 reserved_5_63 : 59;
+		u64 wind_d : 1;
+		u64 bar0_d : 1;
+		u64 mrrs : 3;
+	} cn61xx;
+	struct cvmx_sli_s2m_portx_ctl_cn61xx cn63xx;
+	struct cvmx_sli_s2m_portx_ctl_cn61xx cn63xxp1;
+	struct cvmx_sli_s2m_portx_ctl_cn61xx cn66xx;
+	struct cvmx_sli_s2m_portx_ctl_cn61xx cn68xx;
+	struct cvmx_sli_s2m_portx_ctl_cn61xx cn68xxp1;
+	struct cvmx_sli_s2m_portx_ctl_cn61xx cn70xx;
+	struct cvmx_sli_s2m_portx_ctl_cn61xx cn70xxp1;
+	struct cvmx_sli_s2m_portx_ctl_cn73xx {
+		u64 reserved_7_63 : 57;
+		u64 dvferr : 1;
+		u64 lcl_node : 1;
+		u64 wind_d : 1;
+		u64 bar0_d : 1;
+		u64 ld_cmd : 2;
+		u64 reserved_0_0 : 1;
+	} cn73xx;
+	struct cvmx_sli_s2m_portx_ctl_cn73xx cn78xx;
+	struct cvmx_sli_s2m_portx_ctl_cn78xxp1 {
+		u64 reserved_6_63 : 58;
+		u64 lcl_node : 1;
+		u64 wind_d : 1;
+		u64 bar0_d : 1;
+		u64 ld_cmd : 2;
+		u64 reserved_0_0 : 1;
+	} cn78xxp1;
+	struct cvmx_sli_s2m_portx_ctl_cn61xx cnf71xx;
+	struct cvmx_sli_s2m_portx_ctl_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_s2m_portx_ctl cvmx_sli_s2m_portx_ctl_t;
+
+/**
+ * cvmx_sli_scratch_1
+ *
+ * This registers is a general purpose 64-bit scratch register for software use.
+ *
+ */
+union cvmx_sli_scratch_1 {
+	u64 u64;
+	struct cvmx_sli_scratch_1_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_scratch_1_s cn61xx;
+	struct cvmx_sli_scratch_1_s cn63xx;
+	struct cvmx_sli_scratch_1_s cn63xxp1;
+	struct cvmx_sli_scratch_1_s cn66xx;
+	struct cvmx_sli_scratch_1_s cn68xx;
+	struct cvmx_sli_scratch_1_s cn68xxp1;
+	struct cvmx_sli_scratch_1_s cn70xx;
+	struct cvmx_sli_scratch_1_s cn70xxp1;
+	struct cvmx_sli_scratch_1_s cn73xx;
+	struct cvmx_sli_scratch_1_s cn78xx;
+	struct cvmx_sli_scratch_1_s cn78xxp1;
+	struct cvmx_sli_scratch_1_s cnf71xx;
+	struct cvmx_sli_scratch_1_s cnf75xx;
+};
+
+typedef union cvmx_sli_scratch_1 cvmx_sli_scratch_1_t;
+
+/**
+ * cvmx_sli_scratch_2
+ *
+ * This registers is a general purpose 64-bit scratch register for software use.
+ *
+ */
+union cvmx_sli_scratch_2 {
+	u64 u64;
+	struct cvmx_sli_scratch_2_s {
+		u64 data : 64;
+	} s;
+	struct cvmx_sli_scratch_2_s cn61xx;
+	struct cvmx_sli_scratch_2_s cn63xx;
+	struct cvmx_sli_scratch_2_s cn63xxp1;
+	struct cvmx_sli_scratch_2_s cn66xx;
+	struct cvmx_sli_scratch_2_s cn68xx;
+	struct cvmx_sli_scratch_2_s cn68xxp1;
+	struct cvmx_sli_scratch_2_s cn70xx;
+	struct cvmx_sli_scratch_2_s cn70xxp1;
+	struct cvmx_sli_scratch_2_s cn73xx;
+	struct cvmx_sli_scratch_2_s cn78xx;
+	struct cvmx_sli_scratch_2_s cn78xxp1;
+	struct cvmx_sli_scratch_2_s cnf71xx;
+	struct cvmx_sli_scratch_2_s cnf75xx;
+};
+
+typedef union cvmx_sli_scratch_2 cvmx_sli_scratch_2_t;
+
+/**
+ * cvmx_sli_state1
+ *
+ * This register contains state machines in SLI and is for debug.
+ *
+ */
+union cvmx_sli_state1 {
+	u64 u64;
+	struct cvmx_sli_state1_s {
+		u64 cpl1 : 12;
+		u64 cpl0 : 12;
+		u64 arb : 1;
+		u64 csr : 39;
+	} s;
+	struct cvmx_sli_state1_s cn61xx;
+	struct cvmx_sli_state1_s cn63xx;
+	struct cvmx_sli_state1_s cn63xxp1;
+	struct cvmx_sli_state1_s cn66xx;
+	struct cvmx_sli_state1_s cn68xx;
+	struct cvmx_sli_state1_s cn68xxp1;
+	struct cvmx_sli_state1_s cn70xx;
+	struct cvmx_sli_state1_s cn70xxp1;
+	struct cvmx_sli_state1_s cn73xx;
+	struct cvmx_sli_state1_s cn78xx;
+	struct cvmx_sli_state1_s cn78xxp1;
+	struct cvmx_sli_state1_s cnf71xx;
+	struct cvmx_sli_state1_s cnf75xx;
+};
+
+typedef union cvmx_sli_state1 cvmx_sli_state1_t;
+
+/**
+ * cvmx_sli_state2
+ *
+ * This register contains state machines in SLI and is for debug.
+ *
+ */
+union cvmx_sli_state2 {
+	u64 u64;
+	struct cvmx_sli_state2_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_sli_state2_cn61xx {
+		u64 reserved_56_63 : 8;
+		u64 nnp1 : 8;
+		u64 reserved_47_47 : 1;
+		u64 rac : 1;
+		u64 csm1 : 15;
+		u64 csm0 : 15;
+		u64 nnp0 : 8;
+		u64 nnd : 8;
+	} cn61xx;
+	struct cvmx_sli_state2_cn61xx cn63xx;
+	struct cvmx_sli_state2_cn61xx cn63xxp1;
+	struct cvmx_sli_state2_cn61xx cn66xx;
+	struct cvmx_sli_state2_cn61xx cn68xx;
+	struct cvmx_sli_state2_cn61xx cn68xxp1;
+	struct cvmx_sli_state2_cn61xx cn70xx;
+	struct cvmx_sli_state2_cn61xx cn70xxp1;
+	struct cvmx_sli_state2_cn73xx {
+		u64 reserved_57_63 : 7;
+		u64 nnp1 : 8;
+		u64 reserved_48_48 : 1;
+		u64 rac : 1;
+		u64 csm1 : 15;
+		u64 csm0 : 15;
+		u64 nnp0 : 8;
+		u64 nnd : 9;
+	} cn73xx;
+	struct cvmx_sli_state2_cn73xx cn78xx;
+	struct cvmx_sli_state2_cn73xx cn78xxp1;
+	struct cvmx_sli_state2_cn61xx cnf71xx;
+	struct cvmx_sli_state2_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_state2 cvmx_sli_state2_t;
+
+/**
+ * cvmx_sli_state3
+ *
+ * This register contains state machines in SLI and is for debug.
+ *
+ */
+union cvmx_sli_state3 {
+	u64 u64;
+	struct cvmx_sli_state3_s {
+		u64 reserved_0_63 : 64;
+	} s;
+	struct cvmx_sli_state3_cn61xx {
+		u64 reserved_56_63 : 8;
+		u64 psm1 : 15;
+		u64 psm0 : 15;
+		u64 nsm1 : 13;
+		u64 nsm0 : 13;
+	} cn61xx;
+	struct cvmx_sli_state3_cn61xx cn63xx;
+	struct cvmx_sli_state3_cn61xx cn63xxp1;
+	struct cvmx_sli_state3_cn61xx cn66xx;
+	struct cvmx_sli_state3_cn61xx cn68xx;
+	struct cvmx_sli_state3_cn61xx cn68xxp1;
+	struct cvmx_sli_state3_cn61xx cn70xx;
+	struct cvmx_sli_state3_cn61xx cn70xxp1;
+	struct cvmx_sli_state3_cn73xx {
+		u64 reserved_60_63 : 4;
+		u64 psm1 : 15;
+		u64 psm0 : 15;
+		u64 nsm1 : 15;
+		u64 nsm0 : 15;
+	} cn73xx;
+	struct cvmx_sli_state3_cn73xx cn78xx;
+	struct cvmx_sli_state3_cn73xx cn78xxp1;
+	struct cvmx_sli_state3_cn61xx cnf71xx;
+	struct cvmx_sli_state3_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sli_state3 cvmx_sli_state3_t;
+
+/**
+ * cvmx_sli_tx_pipe
+ *
+ * SLI_TX_PIPE = SLI Packet TX Pipe
+ *
+ * Contains the starting pipe number and number of pipes used by the SLI packet Output.
+ * If a packet is recevied from PKO with an out of range PIPE number, the following occurs:
+ * - SLI_INT_SUM[PIPE_ERR] is set.
+ * - the out of range pipe value is used for returning credits to the PKO.
+ * - the PCIe packet engine will treat the PIPE value to be equal to [BASE].
+ */
+union cvmx_sli_tx_pipe {
+	u64 u64;
+	struct cvmx_sli_tx_pipe_s {
+		u64 reserved_24_63 : 40;
+		u64 nump : 8;
+		u64 reserved_7_15 : 9;
+		u64 base : 7;
+	} s;
+	struct cvmx_sli_tx_pipe_s cn68xx;
+	struct cvmx_sli_tx_pipe_s cn68xxp1;
+};
+
+typedef union cvmx_sli_tx_pipe cvmx_sli_tx_pipe_t;
+
+/**
+ * cvmx_sli_win_rd_addr
+ *
+ * When the LSB of this register is written, the address in this register will be read. The data
+ * returned from this read operation is placed in the WIN_RD_DATA register. This register should
+ * NOT
+ * be used to read SLI_* registers.
+ */
+union cvmx_sli_win_rd_addr {
+	u64 u64;
+	struct cvmx_sli_win_rd_addr_s {
+		u64 reserved_51_63 : 13;
+		u64 ld_cmd : 2;
+		u64 iobit : 1;
+		u64 rd_addr : 48;
+	} s;
+	struct cvmx_sli_win_rd_addr_s cn61xx;
+	struct cvmx_sli_win_rd_addr_s cn63xx;
+	struct cvmx_sli_win_rd_addr_s cn63xxp1;
+	struct cvmx_sli_win_rd_addr_s cn66xx;
+	struct cvmx_sli_win_rd_addr_s cn68xx;
+	struct cvmx_sli_win_rd_addr_s cn68xxp1;
+	struct cvmx_sli_win_rd_addr_s cn70xx;
+	struct cvmx_sli_win_rd_addr_s cn70xxp1;
+	struct cvmx_sli_win_rd_addr_s cn73xx;
+	struct cvmx_sli_win_rd_addr_s cn78xx;
+	struct cvmx_sli_win_rd_addr_s cn78xxp1;
+	struct cvmx_sli_win_rd_addr_s cnf71xx;
+	struct cvmx_sli_win_rd_addr_s cnf75xx;
+};
+
+typedef union cvmx_sli_win_rd_addr cvmx_sli_win_rd_addr_t;
+
+/**
+ * cvmx_sli_win_rd_data
+ *
+ * This register holds the data returned when a read operation is started by the writing of the
+ * SLI_WIN_RD_ADDR register.
+ */
+union cvmx_sli_win_rd_data {
+	u64 u64;
+	struct cvmx_sli_win_rd_data_s {
+		u64 rd_data : 64;
+	} s;
+	struct cvmx_sli_win_rd_data_s cn61xx;
+	struct cvmx_sli_win_rd_data_s cn63xx;
+	struct cvmx_sli_win_rd_data_s cn63xxp1;
+	struct cvmx_sli_win_rd_data_s cn66xx;
+	struct cvmx_sli_win_rd_data_s cn68xx;
+	struct cvmx_sli_win_rd_data_s cn68xxp1;
+	struct cvmx_sli_win_rd_data_s cn70xx;
+	struct cvmx_sli_win_rd_data_s cn70xxp1;
+	struct cvmx_sli_win_rd_data_s cn73xx;
+	struct cvmx_sli_win_rd_data_s cn78xx;
+	struct cvmx_sli_win_rd_data_s cn78xxp1;
+	struct cvmx_sli_win_rd_data_s cnf71xx;
+	struct cvmx_sli_win_rd_data_s cnf75xx;
+};
+
+typedef union cvmx_sli_win_rd_data cvmx_sli_win_rd_data_t;
+
+/**
+ * cvmx_sli_win_wr_addr
+ *
+ * This register contains the address to be written to when a write operation is started by
+ * writing the SLI_WIN_WR_DATA register.
+ *
+ * This register should NOT be used to write SLI_* registers.
+ */
+union cvmx_sli_win_wr_addr {
+	u64 u64;
+	struct cvmx_sli_win_wr_addr_s {
+		u64 reserved_49_63 : 15;
+		u64 iobit : 1;
+		u64 wr_addr : 45;
+		u64 reserved_0_2 : 3;
+	} s;
+	struct cvmx_sli_win_wr_addr_s cn61xx;
+	struct cvmx_sli_win_wr_addr_s cn63xx;
+	struct cvmx_sli_win_wr_addr_s cn63xxp1;
+	struct cvmx_sli_win_wr_addr_s cn66xx;
+	struct cvmx_sli_win_wr_addr_s cn68xx;
+	struct cvmx_sli_win_wr_addr_s cn68xxp1;
+	struct cvmx_sli_win_wr_addr_s cn70xx;
+	struct cvmx_sli_win_wr_addr_s cn70xxp1;
+	struct cvmx_sli_win_wr_addr_s cn73xx;
+	struct cvmx_sli_win_wr_addr_s cn78xx;
+	struct cvmx_sli_win_wr_addr_s cn78xxp1;
+	struct cvmx_sli_win_wr_addr_s cnf71xx;
+	struct cvmx_sli_win_wr_addr_s cnf75xx;
+};
+
+typedef union cvmx_sli_win_wr_addr cvmx_sli_win_wr_addr_t;
+
+/**
+ * cvmx_sli_win_wr_data
+ *
+ * This register contains the data to write to the address located in the SLI_WIN_WR_ADDR
+ * register. Writing the least-significant byte of this register causes a write operation to take
+ * place.
+ */
+union cvmx_sli_win_wr_data {
+	u64 u64;
+	struct cvmx_sli_win_wr_data_s {
+		u64 wr_data : 64;
+	} s;
+	struct cvmx_sli_win_wr_data_s cn61xx;
+	struct cvmx_sli_win_wr_data_s cn63xx;
+	struct cvmx_sli_win_wr_data_s cn63xxp1;
+	struct cvmx_sli_win_wr_data_s cn66xx;
+	struct cvmx_sli_win_wr_data_s cn68xx;
+	struct cvmx_sli_win_wr_data_s cn68xxp1;
+	struct cvmx_sli_win_wr_data_s cn70xx;
+	struct cvmx_sli_win_wr_data_s cn70xxp1;
+	struct cvmx_sli_win_wr_data_s cn73xx;
+	struct cvmx_sli_win_wr_data_s cn78xx;
+	struct cvmx_sli_win_wr_data_s cn78xxp1;
+	struct cvmx_sli_win_wr_data_s cnf71xx;
+	struct cvmx_sli_win_wr_data_s cnf75xx;
+};
+
+typedef union cvmx_sli_win_wr_data cvmx_sli_win_wr_data_t;
+
+/**
+ * cvmx_sli_win_wr_mask
+ *
+ * This register contains the mask for the data in the SLI_WIN_WR_DATA register.
+ *
+ */
+union cvmx_sli_win_wr_mask {
+	u64 u64;
+	struct cvmx_sli_win_wr_mask_s {
+		u64 reserved_8_63 : 56;
+		u64 wr_mask : 8;
+	} s;
+	struct cvmx_sli_win_wr_mask_s cn61xx;
+	struct cvmx_sli_win_wr_mask_s cn63xx;
+	struct cvmx_sli_win_wr_mask_s cn63xxp1;
+	struct cvmx_sli_win_wr_mask_s cn66xx;
+	struct cvmx_sli_win_wr_mask_s cn68xx;
+	struct cvmx_sli_win_wr_mask_s cn68xxp1;
+	struct cvmx_sli_win_wr_mask_s cn70xx;
+	struct cvmx_sli_win_wr_mask_s cn70xxp1;
+	struct cvmx_sli_win_wr_mask_s cn73xx;
+	struct cvmx_sli_win_wr_mask_s cn78xx;
+	struct cvmx_sli_win_wr_mask_s cn78xxp1;
+	struct cvmx_sli_win_wr_mask_s cnf71xx;
+	struct cvmx_sli_win_wr_mask_s cnf75xx;
+};
+
+typedef union cvmx_sli_win_wr_mask cvmx_sli_win_wr_mask_t;
+
+/**
+ * cvmx_sli_window_ctl
+ *
+ * Access to register space on the IOI (caused by window read/write operations) waits for a
+ * period of time specified by this register before timing out.
+ */
+union cvmx_sli_window_ctl {
+	u64 u64;
+	struct cvmx_sli_window_ctl_s {
+		u64 ocx_time : 32;
+		u64 time : 32;
+	} s;
+	struct cvmx_sli_window_ctl_cn61xx {
+		u64 reserved_32_63 : 32;
+		u64 time : 32;
+	} cn61xx;
+	struct cvmx_sli_window_ctl_cn61xx cn63xx;
+	struct cvmx_sli_window_ctl_cn61xx cn63xxp1;
+	struct cvmx_sli_window_ctl_cn61xx cn66xx;
+	struct cvmx_sli_window_ctl_cn61xx cn68xx;
+	struct cvmx_sli_window_ctl_cn61xx cn68xxp1;
+	struct cvmx_sli_window_ctl_cn61xx cn70xx;
+	struct cvmx_sli_window_ctl_cn61xx cn70xxp1;
+	struct cvmx_sli_window_ctl_s cn73xx;
+	struct cvmx_sli_window_ctl_s cn78xx;
+	struct cvmx_sli_window_ctl_s cn78xxp1;
+	struct cvmx_sli_window_ctl_cn61xx cnf71xx;
+	struct cvmx_sli_window_ctl_s cnf75xx;
+};
+
+typedef union cvmx_sli_window_ctl cvmx_sli_window_ctl_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-smix-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-smix-defs.h
new file mode 100644
index 0000000..c51d71b
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-smix-defs.h
@@ -0,0 +1,360 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon smix.
+ */
+
+#ifndef __CVMX_SMIX_DEFS_H__
+#define __CVMX_SMIX_DEFS_H__
+
+static inline u64 CVMX_SMIX_CLK(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000001818ull + (offset) * 256;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001180000003818ull + (offset) * 128;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001180000003818ull + (offset) * 128;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000003818ull + (offset) * 128;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000003818ull + (offset) * 128;
+	}
+	return 0x0001180000003818ull + (offset) * 128;
+}
+
+static inline u64 CVMX_SMIX_CMD(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000001800ull + (offset) * 256;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001180000003800ull + (offset) * 128;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001180000003800ull + (offset) * 128;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000003800ull + (offset) * 128;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000003800ull + (offset) * 128;
+	}
+	return 0x0001180000003800ull + (offset) * 128;
+}
+
+static inline u64 CVMX_SMIX_EN(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000001820ull + (offset) * 256;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001180000003820ull + (offset) * 128;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001180000003820ull + (offset) * 128;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000003820ull + (offset) * 128;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000003820ull + (offset) * 128;
+	}
+	return 0x0001180000003820ull + (offset) * 128;
+}
+
+static inline u64 CVMX_SMIX_RD_DAT(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000001810ull + (offset) * 256;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001180000003810ull + (offset) * 128;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001180000003810ull + (offset) * 128;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000003810ull + (offset) * 128;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000003810ull + (offset) * 128;
+	}
+	return 0x0001180000003810ull + (offset) * 128;
+}
+
+static inline u64 CVMX_SMIX_WR_DAT(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000001808ull + (offset) * 256;
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x0001180000003808ull + (offset) * 128;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x0001180000003808ull + (offset) * 128;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000003808ull + (offset) * 128;
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x0001180000003808ull + (offset) * 128;
+	}
+	return 0x0001180000003808ull + (offset) * 128;
+}
+
+/**
+ * cvmx_smi#_clk
+ *
+ * This register determines the SMI timing characteristics.
+ * If software wants to change SMI CLK timing parameters ([SAMPLE]/[SAMPLE_HI]), software
+ * must delay the SMI_()_CLK CSR write by at least 512 coprocessor-clock cycles after the
+ * previous SMI operation is finished.
+ */
+union cvmx_smix_clk {
+	u64 u64;
+	struct cvmx_smix_clk_s {
+		u64 reserved_25_63 : 39;
+		u64 mode : 1;
+		u64 reserved_21_23 : 3;
+		u64 sample_hi : 5;
+		u64 sample_mode : 1;
+		u64 reserved_14_14 : 1;
+		u64 clk_idle : 1;
+		u64 preamble : 1;
+		u64 sample : 4;
+		u64 phase : 8;
+	} s;
+	struct cvmx_smix_clk_cn30xx {
+		u64 reserved_21_63 : 43;
+		u64 sample_hi : 5;
+		u64 sample_mode : 1;
+		u64 reserved_14_14 : 1;
+		u64 clk_idle : 1;
+		u64 preamble : 1;
+		u64 sample : 4;
+		u64 phase : 8;
+	} cn30xx;
+	struct cvmx_smix_clk_cn30xx cn31xx;
+	struct cvmx_smix_clk_cn30xx cn38xx;
+	struct cvmx_smix_clk_cn30xx cn38xxp2;
+	struct cvmx_smix_clk_s cn50xx;
+	struct cvmx_smix_clk_s cn52xx;
+	struct cvmx_smix_clk_s cn52xxp1;
+	struct cvmx_smix_clk_s cn56xx;
+	struct cvmx_smix_clk_s cn56xxp1;
+	struct cvmx_smix_clk_cn30xx cn58xx;
+	struct cvmx_smix_clk_cn30xx cn58xxp1;
+	struct cvmx_smix_clk_s cn61xx;
+	struct cvmx_smix_clk_s cn63xx;
+	struct cvmx_smix_clk_s cn63xxp1;
+	struct cvmx_smix_clk_s cn66xx;
+	struct cvmx_smix_clk_s cn68xx;
+	struct cvmx_smix_clk_s cn68xxp1;
+	struct cvmx_smix_clk_s cn70xx;
+	struct cvmx_smix_clk_s cn70xxp1;
+	struct cvmx_smix_clk_s cn73xx;
+	struct cvmx_smix_clk_s cn78xx;
+	struct cvmx_smix_clk_s cn78xxp1;
+	struct cvmx_smix_clk_s cnf71xx;
+	struct cvmx_smix_clk_s cnf75xx;
+};
+
+typedef union cvmx_smix_clk cvmx_smix_clk_t;
+
+/**
+ * cvmx_smi#_cmd
+ *
+ * This register forces a read or write command to the PHY. Write operations to this register
+ * create SMI transactions. Software will poll (depending on the transaction type).
+ */
+union cvmx_smix_cmd {
+	u64 u64;
+	struct cvmx_smix_cmd_s {
+		u64 reserved_18_63 : 46;
+		u64 phy_op : 2;
+		u64 reserved_13_15 : 3;
+		u64 phy_adr : 5;
+		u64 reserved_5_7 : 3;
+		u64 reg_adr : 5;
+	} s;
+	struct cvmx_smix_cmd_cn30xx {
+		u64 reserved_17_63 : 47;
+		u64 phy_op : 1;
+		u64 reserved_13_15 : 3;
+		u64 phy_adr : 5;
+		u64 reserved_5_7 : 3;
+		u64 reg_adr : 5;
+	} cn30xx;
+	struct cvmx_smix_cmd_cn30xx cn31xx;
+	struct cvmx_smix_cmd_cn30xx cn38xx;
+	struct cvmx_smix_cmd_cn30xx cn38xxp2;
+	struct cvmx_smix_cmd_s cn50xx;
+	struct cvmx_smix_cmd_s cn52xx;
+	struct cvmx_smix_cmd_s cn52xxp1;
+	struct cvmx_smix_cmd_s cn56xx;
+	struct cvmx_smix_cmd_s cn56xxp1;
+	struct cvmx_smix_cmd_cn30xx cn58xx;
+	struct cvmx_smix_cmd_cn30xx cn58xxp1;
+	struct cvmx_smix_cmd_s cn61xx;
+	struct cvmx_smix_cmd_s cn63xx;
+	struct cvmx_smix_cmd_s cn63xxp1;
+	struct cvmx_smix_cmd_s cn66xx;
+	struct cvmx_smix_cmd_s cn68xx;
+	struct cvmx_smix_cmd_s cn68xxp1;
+	struct cvmx_smix_cmd_s cn70xx;
+	struct cvmx_smix_cmd_s cn70xxp1;
+	struct cvmx_smix_cmd_s cn73xx;
+	struct cvmx_smix_cmd_s cn78xx;
+	struct cvmx_smix_cmd_s cn78xxp1;
+	struct cvmx_smix_cmd_s cnf71xx;
+	struct cvmx_smix_cmd_s cnf75xx;
+};
+
+typedef union cvmx_smix_cmd cvmx_smix_cmd_t;
+
+/**
+ * cvmx_smi#_en
+ *
+ * Enables the SMI interface.
+ *
+ */
+union cvmx_smix_en {
+	u64 u64;
+	struct cvmx_smix_en_s {
+		u64 reserved_1_63 : 63;
+		u64 en : 1;
+	} s;
+	struct cvmx_smix_en_s cn30xx;
+	struct cvmx_smix_en_s cn31xx;
+	struct cvmx_smix_en_s cn38xx;
+	struct cvmx_smix_en_s cn38xxp2;
+	struct cvmx_smix_en_s cn50xx;
+	struct cvmx_smix_en_s cn52xx;
+	struct cvmx_smix_en_s cn52xxp1;
+	struct cvmx_smix_en_s cn56xx;
+	struct cvmx_smix_en_s cn56xxp1;
+	struct cvmx_smix_en_s cn58xx;
+	struct cvmx_smix_en_s cn58xxp1;
+	struct cvmx_smix_en_s cn61xx;
+	struct cvmx_smix_en_s cn63xx;
+	struct cvmx_smix_en_s cn63xxp1;
+	struct cvmx_smix_en_s cn66xx;
+	struct cvmx_smix_en_s cn68xx;
+	struct cvmx_smix_en_s cn68xxp1;
+	struct cvmx_smix_en_s cn70xx;
+	struct cvmx_smix_en_s cn70xxp1;
+	struct cvmx_smix_en_s cn73xx;
+	struct cvmx_smix_en_s cn78xx;
+	struct cvmx_smix_en_s cn78xxp1;
+	struct cvmx_smix_en_s cnf71xx;
+	struct cvmx_smix_en_s cnf75xx;
+};
+
+typedef union cvmx_smix_en cvmx_smix_en_t;
+
+/**
+ * cvmx_smi#_rd_dat
+ *
+ * This register contains the data in a read operation.
+ *
+ */
+union cvmx_smix_rd_dat {
+	u64 u64;
+	struct cvmx_smix_rd_dat_s {
+		u64 reserved_18_63 : 46;
+		u64 pending : 1;
+		u64 val : 1;
+		u64 dat : 16;
+	} s;
+	struct cvmx_smix_rd_dat_s cn30xx;
+	struct cvmx_smix_rd_dat_s cn31xx;
+	struct cvmx_smix_rd_dat_s cn38xx;
+	struct cvmx_smix_rd_dat_s cn38xxp2;
+	struct cvmx_smix_rd_dat_s cn50xx;
+	struct cvmx_smix_rd_dat_s cn52xx;
+	struct cvmx_smix_rd_dat_s cn52xxp1;
+	struct cvmx_smix_rd_dat_s cn56xx;
+	struct cvmx_smix_rd_dat_s cn56xxp1;
+	struct cvmx_smix_rd_dat_s cn58xx;
+	struct cvmx_smix_rd_dat_s cn58xxp1;
+	struct cvmx_smix_rd_dat_s cn61xx;
+	struct cvmx_smix_rd_dat_s cn63xx;
+	struct cvmx_smix_rd_dat_s cn63xxp1;
+	struct cvmx_smix_rd_dat_s cn66xx;
+	struct cvmx_smix_rd_dat_s cn68xx;
+	struct cvmx_smix_rd_dat_s cn68xxp1;
+	struct cvmx_smix_rd_dat_s cn70xx;
+	struct cvmx_smix_rd_dat_s cn70xxp1;
+	struct cvmx_smix_rd_dat_s cn73xx;
+	struct cvmx_smix_rd_dat_s cn78xx;
+	struct cvmx_smix_rd_dat_s cn78xxp1;
+	struct cvmx_smix_rd_dat_s cnf71xx;
+	struct cvmx_smix_rd_dat_s cnf75xx;
+};
+
+typedef union cvmx_smix_rd_dat cvmx_smix_rd_dat_t;
+
+/**
+ * cvmx_smi#_wr_dat
+ *
+ * This register provides the data for a write operation.
+ *
+ */
+union cvmx_smix_wr_dat {
+	u64 u64;
+	struct cvmx_smix_wr_dat_s {
+		u64 reserved_18_63 : 46;
+		u64 pending : 1;
+		u64 val : 1;
+		u64 dat : 16;
+	} s;
+	struct cvmx_smix_wr_dat_s cn30xx;
+	struct cvmx_smix_wr_dat_s cn31xx;
+	struct cvmx_smix_wr_dat_s cn38xx;
+	struct cvmx_smix_wr_dat_s cn38xxp2;
+	struct cvmx_smix_wr_dat_s cn50xx;
+	struct cvmx_smix_wr_dat_s cn52xx;
+	struct cvmx_smix_wr_dat_s cn52xxp1;
+	struct cvmx_smix_wr_dat_s cn56xx;
+	struct cvmx_smix_wr_dat_s cn56xxp1;
+	struct cvmx_smix_wr_dat_s cn58xx;
+	struct cvmx_smix_wr_dat_s cn58xxp1;
+	struct cvmx_smix_wr_dat_s cn61xx;
+	struct cvmx_smix_wr_dat_s cn63xx;
+	struct cvmx_smix_wr_dat_s cn63xxp1;
+	struct cvmx_smix_wr_dat_s cn66xx;
+	struct cvmx_smix_wr_dat_s cn68xx;
+	struct cvmx_smix_wr_dat_s cn68xxp1;
+	struct cvmx_smix_wr_dat_s cn70xx;
+	struct cvmx_smix_wr_dat_s cn70xxp1;
+	struct cvmx_smix_wr_dat_s cn73xx;
+	struct cvmx_smix_wr_dat_s cn78xx;
+	struct cvmx_smix_wr_dat_s cn78xxp1;
+	struct cvmx_smix_wr_dat_s cnf71xx;
+	struct cvmx_smix_wr_dat_s cnf75xx;
+};
+
+typedef union cvmx_smix_wr_dat cvmx_smix_wr_dat_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-sriomaintx-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-sriomaintx-defs.h
new file mode 100644
index 0000000..2558e7b
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-sriomaintx-defs.h
@@ -0,0 +1,61 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_SRIOMAINTX_DEFS_H__
+#define __CVMX_SRIOMAINTX_DEFS_H__
+
+static inline u64 CVMX_SRIOMAINTX_PORT_0_CTL2(unsigned long offset)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+		return 0x0000010000000154ull + (offset) * 0x100000000ull;
+	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000154ull;
+	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
+		return 0x0000000000000154ull + (offset) * 0x100000000ull;
+	}
+	return 0x0000010000000154ull + (offset) * 0x100000000ull;
+}
+
+/**
+ * cvmx_sriomaint#_port_0_ctl2
+ *
+ * These registers are accessed when a local processor or an external
+ * device wishes to examine the port baudrate information.  The automatic
+ * baud rate feature is not available on this device. The SUP_* and ENB_*
+ * fields are set directly by the SRIO()_STATUS_REG[SPD] bits as a
+ * reference but otherwise have no effect.
+ *
+ * WARNING!!  Writes to this register will reinitialize the SRIO link.
+ */
+union cvmx_sriomaintx_port_0_ctl2 {
+	u32 u32;
+	struct cvmx_sriomaintx_port_0_ctl2_s {
+		u32 sel_baud : 4;
+		u32 baud_sup : 1;
+		u32 baud_enb : 1;
+		u32 sup_125g : 1;
+		u32 enb_125g : 1;
+		u32 sup_250g : 1;
+		u32 enb_250g : 1;
+		u32 sup_312g : 1;
+		u32 enb_312g : 1;
+		u32 sub_500g : 1;
+		u32 enb_500g : 1;
+		u32 sup_625g : 1;
+		u32 enb_625g : 1;
+		u32 reserved_2_15 : 14;
+		u32 tx_emph : 1;
+		u32 emph_en : 1;
+	} s;
+	struct cvmx_sriomaintx_port_0_ctl2_s cn63xx;
+	struct cvmx_sriomaintx_port_0_ctl2_s cn63xxp1;
+	struct cvmx_sriomaintx_port_0_ctl2_s cn66xx;
+	struct cvmx_sriomaintx_port_0_ctl2_s cnf75xx;
+};
+
+typedef union cvmx_sriomaintx_port_0_ctl2 cvmx_sriomaintx_port_0_ctl2_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-sriox-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-sriox-defs.h
new file mode 100644
index 0000000..ac98860
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-sriox-defs.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __CVMX_SRIOX_DEFS_H__
+#define __CVMX_SRIOX_DEFS_H__
+
+#define CVMX_SRIOX_STATUS_REG(offset) (0x00011800C8000100ull + ((offset) & 3) * 0x1000000ull)
+
+/**
+ * cvmx_srio#_status_reg
+ *
+ * The SRIO field displays if the port has been configured for SRIO operation.  This register
+ * can be read regardless of whether the SRIO is selected or being reset.  Although some other
+ * registers can be accessed while the ACCESS bit is zero (see individual registers for details),
+ * the majority of SRIO registers and all the SRIOMAINT registers can be used only when the
+ * ACCESS bit is asserted.
+ *
+ * This register is reset by the coprocessor-clock reset.
+ */
+union cvmx_sriox_status_reg {
+	u64 u64;
+	struct cvmx_sriox_status_reg_s {
+		u64 reserved_9_63 : 55;
+		u64 host : 1;
+		u64 spd : 4;
+		u64 run_type : 2;
+		u64 access : 1;
+		u64 srio : 1;
+	} s;
+	struct cvmx_sriox_status_reg_cn63xx {
+		u64 reserved_2_63 : 62;
+		u64 access : 1;
+		u64 srio : 1;
+	} cn63xx;
+	struct cvmx_sriox_status_reg_cn63xx cn63xxp1;
+	struct cvmx_sriox_status_reg_cn63xx cn66xx;
+	struct cvmx_sriox_status_reg_s cnf75xx;
+};
+
+typedef union cvmx_sriox_status_reg cvmx_sriox_status_reg_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-sso-defs.h b/arch/mips/mach-octeon/include/mach/cvmx-sso-defs.h
new file mode 100644
index 0000000..4fc6907
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-sso-defs.h
@@ -0,0 +1,2904 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon sso.
+ */
+
+#ifndef __CVMX_SSO_DEFS_H__
+#define __CVMX_SSO_DEFS_H__
+
+#define CVMX_SSO_ACTIVE_CYCLES		(0x00016700000010E8ull)
+#define CVMX_SSO_ACTIVE_CYCLESX(offset) (0x0001670000001100ull + ((offset) & 3) * 8)
+#define CVMX_SSO_AW_ADD			(0x0001670000002080ull)
+#define CVMX_SSO_AW_CFG			(0x00016700000010F0ull)
+#define CVMX_SSO_AW_ECO			(0x0001670000001030ull)
+#define CVMX_SSO_AW_READ_ARB		(0x0001670000002090ull)
+#define CVMX_SSO_AW_STATUS		(0x00016700000010E0ull)
+#define CVMX_SSO_AW_TAG_LATENCY_PC	(0x00016700000020A8ull)
+#define CVMX_SSO_AW_TAG_REQ_PC		(0x00016700000020A0ull)
+#define CVMX_SSO_AW_WE			(0x0001670000001080ull)
+#define CVMX_SSO_BIST_STAT		(0x0001670000001078ull)
+#define CVMX_SSO_BIST_STATUS0		(0x0001670000001200ull)
+#define CVMX_SSO_BIST_STATUS1		(0x0001670000001208ull)
+#define CVMX_SSO_BIST_STATUS2		(0x0001670000001210ull)
+#define CVMX_SSO_CFG			(0x0001670000001088ull)
+#define CVMX_SSO_DS_PC			(0x0001670000001070ull)
+#define CVMX_SSO_ECC_CTL0		(0x0001670000001280ull)
+#define CVMX_SSO_ECC_CTL1		(0x0001670000001288ull)
+#define CVMX_SSO_ECC_CTL2		(0x0001670000001290ull)
+#define CVMX_SSO_ERR			(0x0001670000001038ull)
+#define CVMX_SSO_ERR0			(0x0001670000001240ull)
+#define CVMX_SSO_ERR1			(0x0001670000001248ull)
+#define CVMX_SSO_ERR2			(0x0001670000001250ull)
+#define CVMX_SSO_ERR_ENB		(0x0001670000001030ull)
+#define CVMX_SSO_FIDX_ECC_CTL		(0x00016700000010D0ull)
+#define CVMX_SSO_FIDX_ECC_ST		(0x00016700000010D8ull)
+#define CVMX_SSO_FPAGE_CNT		(0x0001670000001090ull)
+#define CVMX_SSO_GRPX_AQ_CNT(offset)	(0x0001670020000700ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_AQ_THR(offset)	(0x0001670020000800ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_DS_PC(offset)	(0x0001670020001400ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_EXT_PC(offset)	(0x0001670020001100ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_IAQ_THR(offset)	(0x0001670020000000ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_INT(offset)	(0x0001670020000400ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_INT_CNT(offset)	(0x0001670020000600ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_INT_THR(offset)	(0x0001670020000500ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_PRI(offset)	(0x0001670020000200ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_TAQ_THR(offset)	(0x0001670020000100ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_TS_PC(offset)	(0x0001670020001300ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_WA_PC(offset)	(0x0001670020001200ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GRPX_WS_PC(offset)	(0x0001670020001000ull + ((offset) & 255) * 0x10000ull)
+#define CVMX_SSO_GWE_CFG		(0x0001670000001098ull)
+#define CVMX_SSO_GWE_RANDOM		(0x00016700000010B0ull)
+#define CVMX_SSO_GW_ECO			(0x0001670000001038ull)
+#define CVMX_SSO_IDX_ECC_CTL		(0x00016700000010C0ull)
+#define CVMX_SSO_IDX_ECC_ST		(0x00016700000010C8ull)
+#define CVMX_SSO_IENTX_LINKS(offset)	(0x00016700A0060000ull + ((offset) & 4095) * 8)
+#define CVMX_SSO_IENTX_PENDTAG(offset)	(0x00016700A0040000ull + ((offset) & 4095) * 8)
+#define CVMX_SSO_IENTX_QLINKS(offset)	(0x00016700A0080000ull + ((offset) & 4095) * 8)
+#define CVMX_SSO_IENTX_TAG(offset)	(0x00016700A0000000ull + ((offset) & 4095) * 8)
+#define CVMX_SSO_IENTX_WQPGRP(offset)	(0x00016700A0020000ull + ((offset) & 4095) * 8)
+#define CVMX_SSO_IPL_CONFX(offset)	(0x0001670080080000ull + ((offset) & 255) * 8)
+#define CVMX_SSO_IPL_DESCHEDX(offset)	(0x0001670080060000ull + ((offset) & 255) * 8)
+#define CVMX_SSO_IPL_FREEX(offset)	(0x0001670080000000ull + ((offset) & 7) * 8)
+#define CVMX_SSO_IPL_IAQX(offset)	(0x0001670080040000ull + ((offset) & 255) * 8)
+#define CVMX_SSO_IQ_CNTX(offset)	(0x0001670000009000ull + ((offset) & 7) * 8)
+#define CVMX_SSO_IQ_COM_CNT		(0x0001670000001058ull)
+#define CVMX_SSO_IQ_INT			(0x0001670000001048ull)
+#define CVMX_SSO_IQ_INT_EN		(0x0001670000001050ull)
+#define CVMX_SSO_IQ_THRX(offset)	(0x000167000000A000ull + ((offset) & 7) * 8)
+#define CVMX_SSO_NOS_CNT		(0x0001670000001040ull)
+#define CVMX_SSO_NW_TIM			(0x0001670000001028ull)
+#define CVMX_SSO_OTH_ECC_CTL		(0x00016700000010B0ull)
+#define CVMX_SSO_OTH_ECC_ST		(0x00016700000010B8ull)
+#define CVMX_SSO_PAGE_CNT		(0x0001670000001090ull)
+#define CVMX_SSO_PND_ECC_CTL		(0x00016700000010A0ull)
+#define CVMX_SSO_PND_ECC_ST		(0x00016700000010A8ull)
+#define CVMX_SSO_PPX_ARB(offset)	(0x0001670040000000ull + ((offset) & 63) * 0x10000ull)
+#define CVMX_SSO_PPX_GRP_MSK(offset)	(0x0001670000006000ull + ((offset) & 31) * 8)
+#define CVMX_SSO_PPX_QOS_PRI(offset)	(0x0001670000003000ull + ((offset) & 31) * 8)
+#define CVMX_SSO_PPX_SX_GRPMSKX(a, b, c)                                                           \
+	(0x0001670040001000ull + ((a) << 16) + ((b) << 5) + ((c) << 3))
+#define CVMX_SSO_PP_STRICT	  (0x00016700000010E0ull)
+#define CVMX_SSO_QOSX_RND(offset) (0x0001670000002000ull + ((offset) & 7) * 8)
+#define CVMX_SSO_QOS_THRX(offset) (0x000167000000B000ull + ((offset) & 7) * 8)
+#define CVMX_SSO_QOS_WE		  (0x0001670000001080ull)
+#define CVMX_SSO_RESET		  CVMX_SSO_RESET_FUNC()
+static inline u64 CVMX_SSO_RESET_FUNC(void)
+{
+	switch (cvmx_get_octeon_family()) {
+	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+			return 0x00016700000010F8ull;
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+			return 0x00016700000010F8ull;
+	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+		return 0x00016700000010F8ull;
+	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
+		return 0x00016700000010F0ull;
+	}
+	return 0x00016700000010F8ull;
+}
+
+#define CVMX_SSO_RWQ_HEAD_PTRX(offset)	(0x000167000000C000ull + ((offset) & 7) * 8)
+#define CVMX_SSO_RWQ_POP_FPTR		(0x000167000000C408ull)
+#define CVMX_SSO_RWQ_PSH_FPTR		(0x000167000000C400ull)
+#define CVMX_SSO_RWQ_TAIL_PTRX(offset)	(0x000167000000C200ull + ((offset) & 7) * 8)
+#define CVMX_SSO_SL_PPX_LINKS(offset)	(0x0001670060000040ull + ((offset) & 63) * 0x10000ull)
+#define CVMX_SSO_SL_PPX_PENDTAG(offset) (0x0001670060000000ull + ((offset) & 63) * 0x10000ull)
+#define CVMX_SSO_SL_PPX_PENDWQP(offset) (0x0001670060000010ull + ((offset) & 63) * 0x10000ull)
+#define CVMX_SSO_SL_PPX_TAG(offset)	(0x0001670060000020ull + ((offset) & 63) * 0x10000ull)
+#define CVMX_SSO_SL_PPX_WQP(offset)	(0x0001670060000030ull + ((offset) & 63) * 0x10000ull)
+#define CVMX_SSO_TAQX_LINK(offset)	(0x00016700C0000000ull + ((offset) & 2047) * 4096)
+#define CVMX_SSO_TAQX_WAEX_TAG(offset, block_id)                                                   \
+	(0x00016700D0000000ull + (((offset) & 15) + ((block_id) & 2047) * 0x100ull) * 16)
+#define CVMX_SSO_TAQX_WAEX_WQP(offset, block_id)                                                   \
+	(0x00016700D0000008ull + (((offset) & 15) + ((block_id) & 2047) * 0x100ull) * 16)
+#define CVMX_SSO_TAQ_ADD		(0x00016700000020E0ull)
+#define CVMX_SSO_TAQ_CNT		(0x00016700000020C0ull)
+#define CVMX_SSO_TIAQX_STATUS(offset)	(0x00016700000C0000ull + ((offset) & 255) * 8)
+#define CVMX_SSO_TOAQX_STATUS(offset)	(0x00016700000D0000ull + ((offset) & 255) * 8)
+#define CVMX_SSO_TS_PC			(0x0001670000001068ull)
+#define CVMX_SSO_WA_COM_PC		(0x0001670000001060ull)
+#define CVMX_SSO_WA_PCX(offset)		(0x0001670000005000ull + ((offset) & 7) * 8)
+#define CVMX_SSO_WQ_INT			(0x0001670000001000ull)
+#define CVMX_SSO_WQ_INT_CNTX(offset)	(0x0001670000008000ull + ((offset) & 63) * 8)
+#define CVMX_SSO_WQ_INT_PC		(0x0001670000001020ull)
+#define CVMX_SSO_WQ_INT_THRX(offset)	(0x0001670000007000ull + ((offset) & 63) * 8)
+#define CVMX_SSO_WQ_IQ_DIS		(0x0001670000001010ull)
+#define CVMX_SSO_WS_CFG			(0x0001670000001088ull)
+#define CVMX_SSO_WS_ECO			(0x0001670000001048ull)
+#define CVMX_SSO_WS_PCX(offset)		(0x0001670000004000ull + ((offset) & 63) * 8)
+#define CVMX_SSO_XAQX_HEAD_NEXT(offset) (0x00016700000A0000ull + ((offset) & 255) * 8)
+#define CVMX_SSO_XAQX_HEAD_PTR(offset)	(0x0001670000080000ull + ((offset) & 255) * 8)
+#define CVMX_SSO_XAQX_TAIL_NEXT(offset) (0x00016700000B0000ull + ((offset) & 255) * 8)
+#define CVMX_SSO_XAQX_TAIL_PTR(offset)	(0x0001670000090000ull + ((offset) & 255) * 8)
+#define CVMX_SSO_XAQ_AURA		(0x0001670000002100ull)
+#define CVMX_SSO_XAQ_LATENCY_PC		(0x00016700000020B8ull)
+#define CVMX_SSO_XAQ_REQ_PC		(0x00016700000020B0ull)
+
+/**
+ * cvmx_sso_active_cycles
+ *
+ * SSO_ACTIVE_CYCLES = SSO cycles SSO active
+ *
+ * This register counts every sclk cycle that the SSO clocks are active.
+ * **NOTE: Added in pass 2.0
+ */
+union cvmx_sso_active_cycles {
+	u64 u64;
+	struct cvmx_sso_active_cycles_s {
+		u64 act_cyc : 64;
+	} s;
+	struct cvmx_sso_active_cycles_s cn68xx;
+};
+
+typedef union cvmx_sso_active_cycles cvmx_sso_active_cycles_t;
+
+/**
+ * cvmx_sso_active_cycles#
+ *
+ * This register counts every coprocessor clock (SCLK) cycle that the SSO clocks are active.
+ *
+ */
+union cvmx_sso_active_cyclesx {
+	u64 u64;
+	struct cvmx_sso_active_cyclesx_s {
+		u64 act_cyc : 64;
+	} s;
+	struct cvmx_sso_active_cyclesx_s cn73xx;
+	struct cvmx_sso_active_cyclesx_s cn78xx;
+	struct cvmx_sso_active_cyclesx_s cn78xxp1;
+	struct cvmx_sso_active_cyclesx_s cnf75xx;
+};
+
+typedef union cvmx_sso_active_cyclesx cvmx_sso_active_cyclesx_t;
+
+/**
+ * cvmx_sso_aw_add
+ */
+union cvmx_sso_aw_add {
+	u64 u64;
+	struct cvmx_sso_aw_add_s {
+		u64 reserved_30_63 : 34;
+		u64 rsvd_free : 14;
+		u64 reserved_0_15 : 16;
+	} s;
+	struct cvmx_sso_aw_add_s cn73xx;
+	struct cvmx_sso_aw_add_s cn78xx;
+	struct cvmx_sso_aw_add_s cn78xxp1;
+	struct cvmx_sso_aw_add_s cnf75xx;
+};
+
+typedef union cvmx_sso_aw_add cvmx_sso_aw_add_t;
+
+/**
+ * cvmx_sso_aw_cfg
+ *
+ * This register controls the operation of the add-work block (AW).
+ *
+ */
+union cvmx_sso_aw_cfg {
+	u64 u64;
+	struct cvmx_sso_aw_cfg_s {
+		u64 reserved_9_63 : 55;
+		u64 ldt_short : 1;
+		u64 lol : 1;
+		u64 xaq_alloc_dis : 1;
+		u64 ocla_bp : 1;
+		u64 xaq_byp_dis : 1;
+		u64 stt : 1;
+		u64 ldt : 1;
+		u64 ldwb : 1;
+		u64 rwen : 1;
+	} s;
+	struct cvmx_sso_aw_cfg_s cn73xx;
+	struct cvmx_sso_aw_cfg_s cn78xx;
+	struct cvmx_sso_aw_cfg_s cn78xxp1;
+	struct cvmx_sso_aw_cfg_s cnf75xx;
+};
+
+typedef union cvmx_sso_aw_cfg cvmx_sso_aw_cfg_t;
+
+/**
+ * cvmx_sso_aw_eco
+ */
+union cvmx_sso_aw_eco {
+	u64 u64;
+	struct cvmx_sso_aw_eco_s {
+		u64 reserved_8_63 : 56;
+		u64 eco_rw : 8;
+	} s;
+	struct cvmx_sso_aw_eco_s cn73xx;
+	struct cvmx_sso_aw_eco_s cnf75xx;
+};
+
+typedef union cvmx_sso_aw_eco cvmx_sso_aw_eco_t;
+
+/**
+ * cvmx_sso_aw_read_arb
+ *
+ * This register fine tunes the AW read arbiter and is for diagnostic use.
+ *
+ */
+union cvmx_sso_aw_read_arb {
+	u64 u64;
+	struct cvmx_sso_aw_read_arb_s {
+		u64 reserved_30_63 : 34;
+		u64 xaq_lev : 6;
+		u64 reserved_21_23 : 3;
+		u64 xaq_min : 5;
+		u64 reserved_14_15 : 2;
+		u64 aw_tag_lev : 6;
+		u64 reserved_5_7 : 3;
+		u64 aw_tag_min : 5;
+	} s;
+	struct cvmx_sso_aw_read_arb_s cn73xx;
+	struct cvmx_sso_aw_read_arb_s cn78xx;
+	struct cvmx_sso_aw_read_arb_s cn78xxp1;
+	struct cvmx_sso_aw_read_arb_s cnf75xx;
+};
+
+typedef union cvmx_sso_aw_read_arb cvmx_sso_aw_read_arb_t;
+
+/**
+ * cvmx_sso_aw_status
+ *
+ * This register indicates the status of the add-work block (AW).
+ *
+ */
+union cvmx_sso_aw_status {
+	u64 u64;
+	struct cvmx_sso_aw_status_s {
+		u64 reserved_6_63 : 58;
+		u64 xaq_buf_cached : 6;
+	} s;
+	struct cvmx_sso_aw_status_s cn73xx;
+	struct cvmx_sso_aw_status_s cn78xx;
+	struct cvmx_sso_aw_status_s cn78xxp1;
+	struct cvmx_sso_aw_status_s cnf75xx;
+};
+
+typedef union cvmx_sso_aw_status cvmx_sso_aw_status_t;
+
+/**
+ * cvmx_sso_aw_tag_latency_pc
+ */
+union cvmx_sso_aw_tag_latency_pc {
+	u64 u64;
+	struct cvmx_sso_aw_tag_latency_pc_s {
+		u64 count : 64;
+	} s;
+	struct cvmx_sso_aw_tag_latency_pc_s cn73xx;
+	struct cvmx_sso_aw_tag_latency_pc_s cn78xx;
+	struct cvmx_sso_aw_tag_latency_pc_s cn78xxp1;
+	struct cvmx_sso_aw_tag_latency_pc_s cnf75xx;
+};
+
+typedef union cvmx_sso_aw_tag_latency_pc cvmx_sso_aw_tag_latency_pc_t;
+
+/**
+ * cvmx_sso_aw_tag_req_pc
+ */
+union cvmx_sso_aw_tag_req_pc {
+	u64 u64;
+	struct cvmx_sso_aw_tag_req_pc_s {
+		u64 count : 64;
+	} s;
+	struct cvmx_sso_aw_tag_req_pc_s cn73xx;
+	struct cvmx_sso_aw_tag_req_pc_s cn78xx;
+	struct cvmx_sso_aw_tag_req_pc_s cn78xxp1;
+	struct cvmx_sso_aw_tag_req_pc_s cnf75xx;
+};
+
+typedef union cvmx_sso_aw_tag_req_pc cvmx_sso_aw_tag_req_pc_t;
+
+/**
+ * cvmx_sso_aw_we
+ */
+union cvmx_sso_aw_we {
+	u64 u64;
+	struct cvmx_sso_aw_we_s {
+		u64 reserved_29_63 : 35;
+		u64 rsvd_free : 13;
+		u64 reserved_13_15 : 3;
+		u64 free_cnt : 13;
+	} s;
+	struct cvmx_sso_aw_we_s cn73xx;
+	struct cvmx_sso_aw_we_s cn78xx;
+	struct cvmx_sso_aw_we_s cn78xxp1;
+	struct cvmx_sso_aw_we_s cnf75xx;
+};
+
+typedef union cvmx_sso_aw_we cvmx_sso_aw_we_t;
+
+/**
+ * cvmx_sso_bist_stat
+ *
+ * SSO_BIST_STAT = SSO BIST Status Register
+ *
+ * Contains the BIST status for the SSO memories ('0' = pass, '1' = fail).
+ * Note that PP BIST status is not reported here as it was in previous designs.
+ *
+ *   There may be more for DDR interface buffers.
+ *   It's possible that a RAM will be used for SSO_PP_QOS_RND.
+ */
+union cvmx_sso_bist_stat {
+	u64 u64;
+	struct cvmx_sso_bist_stat_s {
+		u64 reserved_62_63 : 2;
+		u64 odu_pref : 2;
+		u64 reserved_54_59 : 6;
+		u64 fptr : 2;
+		u64 reserved_45_51 : 7;
+		u64 rwo_dat : 1;
+		u64 rwo : 2;
+		u64 reserved_35_41 : 7;
+		u64 rwi_dat : 1;
+		u64 reserved_32_33 : 2;
+		u64 soc : 1;
+		u64 reserved_28_30 : 3;
+		u64 ncbo : 4;
+		u64 reserved_21_23 : 3;
+		u64 index : 1;
+		u64 reserved_17_19 : 3;
+		u64 fidx : 1;
+		u64 reserved_10_15 : 6;
+		u64 pend : 2;
+		u64 reserved_2_7 : 6;
+		u64 oth : 2;
+	} s;
+	struct cvmx_sso_bist_stat_s cn68xx;
+	struct cvmx_sso_bist_stat_cn68xxp1 {
+		u64 reserved_54_63 : 10;
+		u64 fptr : 2;
+		u64 reserved_45_51 : 7;
+		u64 rwo_dat : 1;
+		u64 rwo : 2;
+		u64 reserved_35_41 : 7;
+		u64 rwi_dat : 1;
+		u64 reserved_32_33 : 2;
+		u64 soc : 1;
+		u64 reserved_28_30 : 3;
+		u64 ncbo : 4;
+		u64 reserved_21_23 : 3;
+		u64 index : 1;
+		u64 reserved_17_19 : 3;
+		u64 fidx : 1;
+		u64 reserved_10_15 : 6;
+		u64 pend : 2;
+		u64 reserved_2_7 : 6;
+		u64 oth : 2;
+	} cn68xxp1;
+};
+
+typedef union cvmx_sso_bist_stat cvmx_sso_bist_stat_t;
+
+/**
+ * cvmx_sso_bist_status0
+ *
+ * Contains the BIST status for the SSO memories.
+ *
+ */
+union cvmx_sso_bist_status0 {
+	u64 u64;
+	struct cvmx_sso_bist_status0_s {
+		u64 reserved_10_63 : 54;
+		u64 bist : 10;
+	} s;
+	struct cvmx_sso_bist_status0_s cn73xx;
+	struct cvmx_sso_bist_status0_s cn78xx;
+	struct cvmx_sso_bist_status0_s cn78xxp1;
+	struct cvmx_sso_bist_status0_s cnf75xx;
+};
+
+typedef union cvmx_sso_bist_status0 cvmx_sso_bist_status0_t;
+
+/**
+ * cvmx_sso_bist_status1
+ *
+ * Contains the BIST status for the SSO memories.
+ *
+ */
+union cvmx_sso_bist_status1 {
+	u64 u64;
+	struct cvmx_sso_bist_status1_s {
+		u64 reserved_7_63 : 57;
+		u64 bist : 7;
+	} s;
+	struct cvmx_sso_bist_status1_s cn73xx;
+	struct cvmx_sso_bist_status1_s cn78xx;
+	struct cvmx_sso_bist_status1_s cn78xxp1;
+	struct cvmx_sso_bist_status1_s cnf75xx;
+};
+
+typedef union cvmx_sso_bist_status1 cvmx_sso_bist_status1_t;
+
+/**
+ * cvmx_sso_bist_status2
+ *
+ * Contains the BIST status for the SSO memories.
+ *
+ */
+union cvmx_sso_bist_status2 {
+	u64 u64;
+	struct cvmx_sso_bist_status2_s {
+		u64 reserved_9_63 : 55;
+		u64 bist : 9;
+	} s;
+	struct cvmx_sso_bist_status2_s cn73xx;
+	struct cvmx_sso_bist_status2_s cn78xx;
+	struct cvmx_sso_bist_status2_s cn78xxp1;
+	struct cvmx_sso_bist_status2_s cnf75xx;
+};
+
+typedef union cvmx_sso_bist_status2 cvmx_sso_bist_status2_t;
+
+/**
+ * cvmx_sso_cfg
+ *
+ * SSO_CFG = SSO Config
+ *
+ * This register is an assortment of various SSO configuration bits.
+ */
+union cvmx_sso_cfg {
+	u64 u64;
+	struct cvmx_sso_cfg_s {
+		u64 reserved_16_63 : 48;
+		u64 qck_gw_rsp_adj : 3;
+		u64 qck_gw_rsp_dis : 1;
+		u64 qck_sw_dis : 1;
+		u64 rwq_alloc_dis : 1;
+		u64 soc_ccam_dis : 1;
+		u64 sso_cclk_dis : 1;
+		u64 rwo_flush : 1;
+		u64 wfe_thr : 1;
+		u64 rwio_byp_dis : 1;
+		u64 rwq_byp_dis : 1;
+		u64 stt : 1;
+		u64 ldt : 1;
+		u64 dwb : 1;
+		u64 rwen : 1;
+	} s;
+	struct cvmx_sso_cfg_s cn68xx;
+	struct cvmx_sso_cfg_cn68xxp1 {
+		u64 reserved_8_63 : 56;
+		u64 rwo_flush : 1;
+		u64 wfe_thr : 1;
+		u64 rwio_byp_dis : 1;
+		u64 rwq_byp_dis : 1;
+		u64 stt : 1;
+		u64 ldt : 1;
+		u64 dwb : 1;
+		u64 rwen : 1;
+	} cn68xxp1;
+};
+
+typedef union cvmx_sso_cfg cvmx_sso_cfg_t;
+
+/**
+ * cvmx_sso_ds_pc
+ *
+ * SSO_DS_PC = SSO De-Schedule Performance Counter
+ *
+ * Counts the number of de-schedule requests.
+ * Counter rolls over through zero when max value exceeded.
+ */
+union cvmx_sso_ds_pc {
+	u64 u64;
+	struct cvmx_sso_ds_pc_s {
+		u64 ds_pc : 64;
+	} s;
+	struct cvmx_sso_ds_pc_s cn68xx;
+	struct cvmx_sso_ds_pc_s cn68xxp1;
+};
+
+typedef union cvmx_sso_ds_pc cvmx_sso_ds_pc_t;
+
+/**
+ * cvmx_sso_ecc_ctl0
+ */
+union cvmx_sso_ecc_ctl0 {
+	u64 u64;
+	struct cvmx_sso_ecc_ctl0_s {
+		u64 reserved_30_63 : 34;
+		u64 toaqt_flip : 2;
+		u64 toaqt_cdis : 1;
+		u64 toaqh_flip : 2;
+		u64 toaqh_cdis : 1;
+		u64 tiaqt_flip : 2;
+		u64 tiaqt_cdis : 1;
+		u64 tiaqh_flip : 2;
+		u64 tiaqh_cdis : 1;
+		u64 llm_flip : 2;
+		u64 llm_cdis : 1;
+		u64 inp_flip : 2;
+		u64 inp_cdis : 1;
+		u64 qtc_flip : 2;
+		u64 qtc_cdis : 1;
+		u64 xaq_flip : 2;
+		u64 xaq_cdis : 1;
+		u64 fff_flip : 2;
+		u64 fff_cdis : 1;
+		u64 wes_flip : 2;
+		u64 wes_cdis : 1;
+	} s;
+	struct cvmx_sso_ecc_ctl0_s cn73xx;
+	struct cvmx_sso_ecc_ctl0_s cn78xx;
+	struct cvmx_sso_ecc_ctl0_s cn78xxp1;
+	struct cvmx_sso_ecc_ctl0_s cnf75xx;
+};
+
+typedef union cvmx_sso_ecc_ctl0 cvmx_sso_ecc_ctl0_t;
+
+/**
+ * cvmx_sso_ecc_ctl1
+ */
+union cvmx_sso_ecc_ctl1 {
+	u64 u64;
+	struct cvmx_sso_ecc_ctl1_s {
+		u64 reserved_21_63 : 43;
+		u64 thrint_flip : 2;
+		u64 thrint_cdis : 1;
+		u64 mask_flip : 2;
+		u64 mask_cdis : 1;
+		u64 gdw_flip : 2;
+		u64 gdw_cdis : 1;
+		u64 qidx_flip : 2;
+		u64 qidx_cdis : 1;
+		u64 tptr_flip : 2;
+		u64 tptr_cdis : 1;
+		u64 hptr_flip : 2;
+		u64 hptr_cdis : 1;
+		u64 cntr_flip : 2;
+		u64 cntr_cdis : 1;
+	} s;
+	struct cvmx_sso_ecc_ctl1_s cn73xx;
+	struct cvmx_sso_ecc_ctl1_s cn78xx;
+	struct cvmx_sso_ecc_ctl1_s cn78xxp1;
+	struct cvmx_sso_ecc_ctl1_s cnf75xx;
+};
+
+typedef union cvmx_sso_ecc_ctl1 cvmx_sso_ecc_ctl1_t;
+
+/**
+ * cvmx_sso_ecc_ctl2
+ */
+union cvmx_sso_ecc_ctl2 {
+	u64 u64;
+	struct cvmx_sso_ecc_ctl2_s {
+		u64 reserved_15_63 : 49;
+		u64 ncbo_flip : 2;
+		u64 ncbo_cdis : 1;
+		u64 pnd_flip : 2;
+		u64 pnd_cdis : 1;
+		u64 oth_flip : 2;
+		u64 oth_cdis : 1;
+		u64 nidx_flip : 2;
+		u64 nidx_cdis : 1;
+		u64 pidx_flip : 2;
+		u64 pidx_cdis : 1;
+	} s;
+	struct cvmx_sso_ecc_ctl2_s cn73xx;
+	struct cvmx_sso_ecc_ctl2_s cn78xx;
+	struct cvmx_sso_ecc_ctl2_s cn78xxp1;
+	struct cvmx_sso_ecc_ctl2_s cnf75xx;
+};
+
+typedef union cvmx_sso_ecc_ctl2 cvmx_sso_ecc_ctl2_t;
+
+/**
+ * cvmx_sso_err
+ *
+ * SSO_ERR = SSO Error Register
+ *
+ * Contains ECC and other misc error bits.
+ *
+ * <45> The free page error bit will assert when SSO_FPAGE_CNT <= 16 and
+ *      SSO_CFG[RWEN] is 1.  Software will want to disable the interrupt
+ *      associated with this error when recovering SSO pointers from the
+ *      FPA and SSO.
+ *
+ * This register also contains the illegal operation error bits:
+ *
+ * <42> Received ADDWQ with tag specified as EMPTY
+ * <41> Received illegal opcode
+ * <40> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/ALLOC_WE
+ *      from WS with CLR_NSCHED pending
+ * <39> Received CLR_NSCHED
+ *      from WS with SWTAG_DESCH/DESCH/CLR_NSCHED pending
+ * <38> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/ALLOC_WE
+ *      from WS with ALLOC_WE pending
+ * <37> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/ALLOC_WE/CLR_NSCHED
+ *      from WS with GET_WORK pending
+ * <36> Received SWTAG_FULL/SWTAG_DESCH
+ *      with tag specified as UNSCHEDULED
+ * <35> Received SWTAG/SWTAG_FULL/SWTAG_DESCH
+ *      with tag specified as EMPTY
+ * <34> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/GET_WORK
+ *      from WS with pending tag switch to ORDERED or ATOMIC
+ * <33> Received SWTAG/SWTAG_DESCH/DESCH/UPD_WQP
+ *      from WS in UNSCHEDULED state
+ * <32> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP
+ *      from WS in EMPTY state
+ */
+union cvmx_sso_err {
+	u64 u64;
+	struct cvmx_sso_err_s {
+		u64 reserved_48_63 : 16;
+		u64 bfp : 1;
+		u64 awe : 1;
+		u64 fpe : 1;
+		u64 reserved_43_44 : 2;
+		u64 iop : 11;
+		u64 reserved_12_31 : 20;
+		u64 pnd_dbe0 : 1;
+		u64 pnd_sbe0 : 1;
+		u64 pnd_dbe1 : 1;
+		u64 pnd_sbe1 : 1;
+		u64 oth_dbe0 : 1;
+		u64 oth_sbe0 : 1;
+		u64 oth_dbe1 : 1;
+		u64 oth_sbe1 : 1;
+		u64 idx_dbe : 1;
+		u64 idx_sbe : 1;
+		u64 fidx_dbe : 1;
+		u64 fidx_sbe : 1;
+	} s;
+	struct cvmx_sso_err_s cn68xx;
+	struct cvmx_sso_err_s cn68xxp1;
+};
+
+typedef union cvmx_sso_err cvmx_sso_err_t;
+
+/**
+ * cvmx_sso_err0
+ *
+ * This register contains ECC and other miscellaneous error bits.
+ *
+ */
+union cvmx_sso_err0 {
+	u64 u64;
+	struct cvmx_sso_err0_s {
+		u64 reserved_52_63 : 12;
+		u64 toaqt_dbe : 1;
+		u64 toaqt_sbe : 1;
+		u64 toaqh_dbe : 1;
+		u64 toaqh_sbe : 1;
+		u64 tiaqt_dbe : 1;
+		u64 tiaqt_sbe : 1;
+		u64 tiaqh_dbe : 1;
+		u64 tiaqh_sbe : 1;
+		u64 llm_dbe : 1;
+		u64 llm_sbe : 1;
+		u64 inp_dbe : 1;
+		u64 inp_sbe : 1;
+		u64 qtc_dbe : 1;
+		u64 qtc_sbe : 1;
+		u64 xaq_dbe : 1;
+		u64 xaq_sbe : 1;
+		u64 fff_dbe : 1;
+		u64 fff_sbe : 1;
+		u64 wes_dbe : 1;
+		u64 wes_sbe : 1;
+		u64 reserved_6_31 : 26;
+		u64 addwq_dropped : 1;
+		u64 awempty : 1;
+		u64 grpdis : 1;
+		u64 bfp : 1;
+		u64 awe : 1;
+		u64 fpe : 1;
+	} s;
+	struct cvmx_sso_err0_s cn73xx;
+	struct cvmx_sso_err0_s cn78xx;
+	struct cvmx_sso_err0_s cn78xxp1;
+	struct cvmx_sso_err0_s cnf75xx;
+};
+
+typedef union cvmx_sso_err0 cvmx_sso_err0_t;
+
+/**
+ * cvmx_sso_err1
+ *
+ * This register contains ECC and other miscellaneous error bits.
+ *
+ */
+union cvmx_sso_err1 {
+	u64 u64;
+	struct cvmx_sso_err1_s {
+		u64 reserved_14_63 : 50;
+		u64 thrint_dbe : 1;
+		u64 thrint_sbe : 1;
+		u64 mask_dbe : 1;
+		u64 mask_sbe : 1;
+		u64 gdw_dbe : 1;
+		u64 gdw_sbe : 1;
+		u64 qidx_dbe : 1;
+		u64 qidx_sbe : 1;
+		u64 tptr_dbe : 1;
+		u64 tptr_sbe : 1;
+		u64 hptr_dbe : 1;
+		u64 hptr_sbe : 1;
+		u64 cntr_dbe : 1;
+		u64 cntr_sbe : 1;
+	} s;
+	struct cvmx_sso_err1_s cn73xx;
+	struct cvmx_sso_err1_s cn78xx;
+	struct cvmx_sso_err1_s cn78xxp1;
+	struct cvmx_sso_err1_s cnf75xx;
+};
+
+typedef union cvmx_sso_err1 cvmx_sso_err1_t;
+
+/**
+ * cvmx_sso_err2
+ *
+ * This register contains ECC and other miscellaneous error bits.
+ *
+ */
+union cvmx_sso_err2 {
+	u64 u64;
+	struct cvmx_sso_err2_s {
+		u64 reserved_42_63 : 22;
+		u64 ncbo_dbe : 1;
+		u64 ncbo_sbe : 1;
+		u64 pnd_dbe : 1;
+		u64 pnd_sbe : 1;
+		u64 oth_dbe : 1;
+		u64 oth_sbe : 1;
+		u64 nidx_dbe : 1;
+		u64 nidx_sbe : 1;
+		u64 pidx_dbe : 1;
+		u64 pidx_sbe : 1;
+		u64 reserved_13_31 : 19;
+		u64 iop : 13;
+	} s;
+	struct cvmx_sso_err2_s cn73xx;
+	struct cvmx_sso_err2_s cn78xx;
+	struct cvmx_sso_err2_s cn78xxp1;
+	struct cvmx_sso_err2_s cnf75xx;
+};
+
+typedef union cvmx_sso_err2 cvmx_sso_err2_t;
+
+/**
+ * cvmx_sso_err_enb
+ *
+ * SSO_ERR_ENB = SSO Error Enable Register
+ *
+ * Contains the interrupt enables corresponding to SSO_ERR.
+ */
+union cvmx_sso_err_enb {
+	u64 u64;
+	struct cvmx_sso_err_enb_s {
+		u64 reserved_48_63 : 16;
+		u64 bfp_ie : 1;
+		u64 awe_ie : 1;
+		u64 fpe_ie : 1;
+		u64 reserved_43_44 : 2;
+		u64 iop_ie : 11;
+		u64 reserved_12_31 : 20;
+		u64 pnd_dbe0_ie : 1;
+		u64 pnd_sbe0_ie : 1;
+		u64 pnd_dbe1_ie : 1;
+		u64 pnd_sbe1_ie : 1;
+		u64 oth_dbe0_ie : 1;
+		u64 oth_sbe0_ie : 1;
+		u64 oth_dbe1_ie : 1;
+		u64 oth_sbe1_ie : 1;
+		u64 idx_dbe_ie : 1;
+		u64 idx_sbe_ie : 1;
+		u64 fidx_dbe_ie : 1;
+		u64 fidx_sbe_ie : 1;
+	} s;
+	struct cvmx_sso_err_enb_s cn68xx;
+	struct cvmx_sso_err_enb_s cn68xxp1;
+};
+
+typedef union cvmx_sso_err_enb cvmx_sso_err_enb_t;
+
+/**
+ * cvmx_sso_fidx_ecc_ctl
+ *
+ * SSO_FIDX_ECC_CTL = SSO FIDX ECC Control
+ *
+ */
+union cvmx_sso_fidx_ecc_ctl {
+	u64 u64;
+	struct cvmx_sso_fidx_ecc_ctl_s {
+		u64 reserved_3_63 : 61;
+		u64 flip_synd : 2;
+		u64 ecc_ena : 1;
+	} s;
+	struct cvmx_sso_fidx_ecc_ctl_s cn68xx;
+	struct cvmx_sso_fidx_ecc_ctl_s cn68xxp1;
+};
+
+typedef union cvmx_sso_fidx_ecc_ctl cvmx_sso_fidx_ecc_ctl_t;
+
+/**
+ * cvmx_sso_fidx_ecc_st
+ *
+ * SSO_FIDX_ECC_ST = SSO FIDX ECC Status
+ *
+ */
+union cvmx_sso_fidx_ecc_st {
+	u64 u64;
+	struct cvmx_sso_fidx_ecc_st_s {
+		u64 reserved_27_63 : 37;
+		u64 addr : 11;
+		u64 reserved_9_15 : 7;
+		u64 syndrom : 5;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_sso_fidx_ecc_st_s cn68xx;
+	struct cvmx_sso_fidx_ecc_st_s cn68xxp1;
+};
+
+typedef union cvmx_sso_fidx_ecc_st cvmx_sso_fidx_ecc_st_t;
+
+/**
+ * cvmx_sso_fpage_cnt
+ *
+ * SSO_FPAGE_CNT = SSO Free Page Cnt
+ *
+ * This register keeps track of the number of free pages pointers available for use in external memory.
+ */
+union cvmx_sso_fpage_cnt {
+	u64 u64;
+	struct cvmx_sso_fpage_cnt_s {
+		u64 reserved_32_63 : 32;
+		u64 fpage_cnt : 32;
+	} s;
+	struct cvmx_sso_fpage_cnt_s cn68xx;
+	struct cvmx_sso_fpage_cnt_s cn68xxp1;
+};
+
+typedef union cvmx_sso_fpage_cnt cvmx_sso_fpage_cnt_t;
+
+/**
+ * cvmx_sso_grp#_aq_cnt
+ */
+union cvmx_sso_grpx_aq_cnt {
+	u64 u64;
+	struct cvmx_sso_grpx_aq_cnt_s {
+		u64 reserved_33_63 : 31;
+		u64 aq_cnt : 33;
+	} s;
+	struct cvmx_sso_grpx_aq_cnt_s cn73xx;
+	struct cvmx_sso_grpx_aq_cnt_s cn78xx;
+	struct cvmx_sso_grpx_aq_cnt_s cn78xxp1;
+	struct cvmx_sso_grpx_aq_cnt_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_aq_cnt cvmx_sso_grpx_aq_cnt_t;
+
+/**
+ * cvmx_sso_grp#_aq_thr
+ */
+union cvmx_sso_grpx_aq_thr {
+	u64 u64;
+	struct cvmx_sso_grpx_aq_thr_s {
+		u64 reserved_33_63 : 31;
+		u64 aq_thr : 33;
+	} s;
+	struct cvmx_sso_grpx_aq_thr_s cn73xx;
+	struct cvmx_sso_grpx_aq_thr_s cn78xx;
+	struct cvmx_sso_grpx_aq_thr_s cn78xxp1;
+	struct cvmx_sso_grpx_aq_thr_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_aq_thr cvmx_sso_grpx_aq_thr_t;
+
+/**
+ * cvmx_sso_grp#_ds_pc
+ *
+ * Counts the number of deschedule requests for each group. Counter rolls over through zero when
+ * max value exceeded.
+ */
+union cvmx_sso_grpx_ds_pc {
+	u64 u64;
+	struct cvmx_sso_grpx_ds_pc_s {
+		u64 cnt : 64;
+	} s;
+	struct cvmx_sso_grpx_ds_pc_s cn73xx;
+	struct cvmx_sso_grpx_ds_pc_s cn78xx;
+	struct cvmx_sso_grpx_ds_pc_s cn78xxp1;
+	struct cvmx_sso_grpx_ds_pc_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_ds_pc cvmx_sso_grpx_ds_pc_t;
+
+/**
+ * cvmx_sso_grp#_ext_pc
+ *
+ * Counts the number of cache lines of WAEs sent to L2/DDR. Counter rolls over through zero when
+ * max value exceeded.
+ */
+union cvmx_sso_grpx_ext_pc {
+	u64 u64;
+	struct cvmx_sso_grpx_ext_pc_s {
+		u64 cnt : 64;
+	} s;
+	struct cvmx_sso_grpx_ext_pc_s cn73xx;
+	struct cvmx_sso_grpx_ext_pc_s cn78xx;
+	struct cvmx_sso_grpx_ext_pc_s cn78xxp1;
+	struct cvmx_sso_grpx_ext_pc_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_ext_pc cvmx_sso_grpx_ext_pc_t;
+
+/**
+ * cvmx_sso_grp#_iaq_thr
+ *
+ * These registers contain the thresholds for allocating SSO in-unit admission queue entries, see
+ * In-Unit Thresholds.
+ */
+union cvmx_sso_grpx_iaq_thr {
+	u64 u64;
+	struct cvmx_sso_grpx_iaq_thr_s {
+		u64 reserved_61_63 : 3;
+		u64 grp_cnt : 13;
+		u64 reserved_45_47 : 3;
+		u64 max_thr : 13;
+		u64 reserved_13_31 : 19;
+		u64 rsvd_thr : 13;
+	} s;
+	struct cvmx_sso_grpx_iaq_thr_s cn73xx;
+	struct cvmx_sso_grpx_iaq_thr_s cn78xx;
+	struct cvmx_sso_grpx_iaq_thr_s cn78xxp1;
+	struct cvmx_sso_grpx_iaq_thr_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_iaq_thr cvmx_sso_grpx_iaq_thr_t;
+
+/**
+ * cvmx_sso_grp#_int
+ *
+ * Contains the per-group interrupts and are used to clear these interrupts. For more information
+ * on this register, refer to Interrupts.
+ */
+union cvmx_sso_grpx_int {
+	u64 u64;
+	struct cvmx_sso_grpx_int_s {
+		u64 exe_dis : 1;
+		u64 reserved_2_62 : 61;
+		u64 exe_int : 1;
+		u64 aq_int : 1;
+	} s;
+	struct cvmx_sso_grpx_int_s cn73xx;
+	struct cvmx_sso_grpx_int_s cn78xx;
+	struct cvmx_sso_grpx_int_s cn78xxp1;
+	struct cvmx_sso_grpx_int_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_int cvmx_sso_grpx_int_t;
+
+/**
+ * cvmx_sso_grp#_int_cnt
+ *
+ * These registers contain a read-only copy of the counts used to trigger work-queue interrupts
+ * (one per group). For more information on this register, refer to Interrupts.
+ */
+union cvmx_sso_grpx_int_cnt {
+	u64 u64;
+	struct cvmx_sso_grpx_int_cnt_s {
+		u64 reserved_61_63 : 3;
+		u64 tc_cnt : 13;
+		u64 reserved_45_47 : 3;
+		u64 cq_cnt : 13;
+		u64 reserved_29_31 : 3;
+		u64 ds_cnt : 13;
+		u64 reserved_13_15 : 3;
+		u64 iaq_cnt : 13;
+	} s;
+	struct cvmx_sso_grpx_int_cnt_s cn73xx;
+	struct cvmx_sso_grpx_int_cnt_s cn78xx;
+	struct cvmx_sso_grpx_int_cnt_s cn78xxp1;
+	struct cvmx_sso_grpx_int_cnt_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_int_cnt cvmx_sso_grpx_int_cnt_t;
+
+/**
+ * cvmx_sso_grp#_int_thr
+ *
+ * These registers contain the thresholds for enabling and setting work-queue interrupts (one per
+ * group). For more information on this register, refer to Interrupts.
+ */
+union cvmx_sso_grpx_int_thr {
+	u64 u64;
+	struct cvmx_sso_grpx_int_thr_s {
+		u64 tc_en : 1;
+		u64 reserved_61_62 : 2;
+		u64 tc_thr : 13;
+		u64 reserved_45_47 : 3;
+		u64 cq_thr : 13;
+		u64 reserved_29_31 : 3;
+		u64 ds_thr : 13;
+		u64 reserved_13_15 : 3;
+		u64 iaq_thr : 13;
+	} s;
+	struct cvmx_sso_grpx_int_thr_s cn73xx;
+	struct cvmx_sso_grpx_int_thr_s cn78xx;
+	struct cvmx_sso_grpx_int_thr_s cn78xxp1;
+	struct cvmx_sso_grpx_int_thr_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_int_thr cvmx_sso_grpx_int_thr_t;
+
+/**
+ * cvmx_sso_grp#_pri
+ *
+ * Controls the priority and group affinity arbitration for each group.
+ *
+ */
+union cvmx_sso_grpx_pri {
+	u64 u64;
+	struct cvmx_sso_grpx_pri_s {
+		u64 reserved_30_63 : 34;
+		u64 wgt_left : 6;
+		u64 reserved_22_23 : 2;
+		u64 weight : 6;
+		u64 reserved_12_15 : 4;
+		u64 affinity : 4;
+		u64 reserved_3_7 : 5;
+		u64 pri : 3;
+	} s;
+	struct cvmx_sso_grpx_pri_s cn73xx;
+	struct cvmx_sso_grpx_pri_s cn78xx;
+	struct cvmx_sso_grpx_pri_s cn78xxp1;
+	struct cvmx_sso_grpx_pri_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_pri cvmx_sso_grpx_pri_t;
+
+/**
+ * cvmx_sso_grp#_taq_thr
+ *
+ * These registers contain the thresholds for allocating SSO transitory admission queue storage
+ * buffers, see Transitory-Admission Thresholds.
+ */
+union cvmx_sso_grpx_taq_thr {
+	u64 u64;
+	struct cvmx_sso_grpx_taq_thr_s {
+		u64 reserved_59_63 : 5;
+		u64 grp_cnt : 11;
+		u64 reserved_43_47 : 5;
+		u64 max_thr : 11;
+		u64 reserved_11_31 : 21;
+		u64 rsvd_thr : 11;
+	} s;
+	struct cvmx_sso_grpx_taq_thr_s cn73xx;
+	struct cvmx_sso_grpx_taq_thr_s cn78xx;
+	struct cvmx_sso_grpx_taq_thr_s cn78xxp1;
+	struct cvmx_sso_grpx_taq_thr_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_taq_thr cvmx_sso_grpx_taq_thr_t;
+
+/**
+ * cvmx_sso_grp#_ts_pc
+ *
+ * Counts the number of tag switch requests for each group being switched to. Counter rolls over
+ * through zero when max value exceeded.
+ */
+union cvmx_sso_grpx_ts_pc {
+	u64 u64;
+	struct cvmx_sso_grpx_ts_pc_s {
+		u64 cnt : 64;
+	} s;
+	struct cvmx_sso_grpx_ts_pc_s cn73xx;
+	struct cvmx_sso_grpx_ts_pc_s cn78xx;
+	struct cvmx_sso_grpx_ts_pc_s cn78xxp1;
+	struct cvmx_sso_grpx_ts_pc_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_ts_pc cvmx_sso_grpx_ts_pc_t;
+
+/**
+ * cvmx_sso_grp#_wa_pc
+ *
+ * Counts the number of add new work requests for each group. The counter rolls over through zero
+ * when the max value exceeded.
+ */
+union cvmx_sso_grpx_wa_pc {
+	u64 u64;
+	struct cvmx_sso_grpx_wa_pc_s {
+		u64 cnt : 64;
+	} s;
+	struct cvmx_sso_grpx_wa_pc_s cn73xx;
+	struct cvmx_sso_grpx_wa_pc_s cn78xx;
+	struct cvmx_sso_grpx_wa_pc_s cn78xxp1;
+	struct cvmx_sso_grpx_wa_pc_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_wa_pc cvmx_sso_grpx_wa_pc_t;
+
+/**
+ * cvmx_sso_grp#_ws_pc
+ *
+ * Counts the number of work schedules for each group. The counter rolls over through zero when
+ * the maximum value is exceeded.
+ */
+union cvmx_sso_grpx_ws_pc {
+	u64 u64;
+	struct cvmx_sso_grpx_ws_pc_s {
+		u64 cnt : 64;
+	} s;
+	struct cvmx_sso_grpx_ws_pc_s cn73xx;
+	struct cvmx_sso_grpx_ws_pc_s cn78xx;
+	struct cvmx_sso_grpx_ws_pc_s cn78xxp1;
+	struct cvmx_sso_grpx_ws_pc_s cnf75xx;
+};
+
+typedef union cvmx_sso_grpx_ws_pc cvmx_sso_grpx_ws_pc_t;
+
+/**
+ * cvmx_sso_gw_eco
+ */
+union cvmx_sso_gw_eco {
+	u64 u64;
+	struct cvmx_sso_gw_eco_s {
+		u64 reserved_8_63 : 56;
+		u64 eco_rw : 8;
+	} s;
+	struct cvmx_sso_gw_eco_s cn73xx;
+	struct cvmx_sso_gw_eco_s cnf75xx;
+};
+
+typedef union cvmx_sso_gw_eco cvmx_sso_gw_eco_t;
+
+/**
+ * cvmx_sso_gwe_cfg
+ *
+ * This register controls the operation of the get-work examiner (GWE).
+ *
+ */
+union cvmx_sso_gwe_cfg {
+	u64 u64;
+	struct cvmx_sso_gwe_cfg_s {
+		u64 reserved_12_63 : 52;
+		u64 odu_ffpgw_dis : 1;
+		u64 gwe_rfpgw_dis : 1;
+		u64 odu_prf_dis : 1;
+		u64 reserved_0_8 : 9;
+	} s;
+	struct cvmx_sso_gwe_cfg_cn68xx {
+		u64 reserved_12_63 : 52;
+		u64 odu_ffpgw_dis : 1;
+		u64 gwe_rfpgw_dis : 1;
+		u64 odu_prf_dis : 1;
+		u64 odu_bmp_dis : 1;
+		u64 reserved_5_7 : 3;
+		u64 gwe_hvy_dis : 1;
+		u64 gwe_poe : 1;
+		u64 gwe_fpor : 1;
+		u64 gwe_rah : 1;
+		u64 gwe_dis : 1;
+	} cn68xx;
+	struct cvmx_sso_gwe_cfg_cn68xxp1 {
+		u64 reserved_4_63 : 60;
+		u64 gwe_poe : 1;
+		u64 gwe_fpor : 1;
+		u64 gwe_rah : 1;
+		u64 gwe_dis : 1;
+	} cn68xxp1;
+	struct cvmx_sso_gwe_cfg_cn73xx {
+		u64 reserved_9_63 : 55;
+		u64 dis_wgt_credit : 1;
+		u64 ws_retries : 8;
+	} cn73xx;
+	struct cvmx_sso_gwe_cfg_cn73xx cn78xx;
+	struct cvmx_sso_gwe_cfg_cn73xx cn78xxp1;
+	struct cvmx_sso_gwe_cfg_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sso_gwe_cfg cvmx_sso_gwe_cfg_t;
+
+/**
+ * cvmx_sso_gwe_random
+ *
+ * This register contains the random search start position for the get-work examiner (GWE).
+ *
+ */
+union cvmx_sso_gwe_random {
+	u64 u64;
+	struct cvmx_sso_gwe_random_s {
+		u64 reserved_16_63 : 48;
+		u64 rnd : 16;
+	} s;
+	struct cvmx_sso_gwe_random_s cn73xx;
+	struct cvmx_sso_gwe_random_s cn78xx;
+	struct cvmx_sso_gwe_random_s cn78xxp1;
+	struct cvmx_sso_gwe_random_s cnf75xx;
+};
+
+typedef union cvmx_sso_gwe_random cvmx_sso_gwe_random_t;
+
+/**
+ * cvmx_sso_idx_ecc_ctl
+ *
+ * SSO_IDX_ECC_CTL = SSO IDX ECC Control
+ *
+ */
+union cvmx_sso_idx_ecc_ctl {
+	u64 u64;
+	struct cvmx_sso_idx_ecc_ctl_s {
+		u64 reserved_3_63 : 61;
+		u64 flip_synd : 2;
+		u64 ecc_ena : 1;
+	} s;
+	struct cvmx_sso_idx_ecc_ctl_s cn68xx;
+	struct cvmx_sso_idx_ecc_ctl_s cn68xxp1;
+};
+
+typedef union cvmx_sso_idx_ecc_ctl cvmx_sso_idx_ecc_ctl_t;
+
+/**
+ * cvmx_sso_idx_ecc_st
+ *
+ * SSO_IDX_ECC_ST = SSO IDX ECC Status
+ *
+ */
+union cvmx_sso_idx_ecc_st {
+	u64 u64;
+	struct cvmx_sso_idx_ecc_st_s {
+		u64 reserved_27_63 : 37;
+		u64 addr : 11;
+		u64 reserved_9_15 : 7;
+		u64 syndrom : 5;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_sso_idx_ecc_st_s cn68xx;
+	struct cvmx_sso_idx_ecc_st_s cn68xxp1;
+};
+
+typedef union cvmx_sso_idx_ecc_st cvmx_sso_idx_ecc_st_t;
+
+/**
+ * cvmx_sso_ient#_links
+ *
+ * Returns unit memory status for an index.
+ *
+ */
+union cvmx_sso_ientx_links {
+	u64 u64;
+	struct cvmx_sso_ientx_links_s {
+		u64 reserved_28_63 : 36;
+		u64 prev_index : 12;
+		u64 reserved_0_15 : 16;
+	} s;
+	struct cvmx_sso_ientx_links_cn73xx {
+		u64 reserved_26_63 : 38;
+		u64 prev_index : 10;
+		u64 reserved_11_15 : 5;
+		u64 next_index_vld : 1;
+		u64 next_index : 10;
+	} cn73xx;
+	struct cvmx_sso_ientx_links_cn78xx {
+		u64 reserved_28_63 : 36;
+		u64 prev_index : 12;
+		u64 reserved_13_15 : 3;
+		u64 next_index_vld : 1;
+		u64 next_index : 12;
+	} cn78xx;
+	struct cvmx_sso_ientx_links_cn78xx cn78xxp1;
+	struct cvmx_sso_ientx_links_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sso_ientx_links cvmx_sso_ientx_links_t;
+
+/**
+ * cvmx_sso_ient#_pendtag
+ *
+ * Returns unit memory status for an index.
+ *
+ */
+union cvmx_sso_ientx_pendtag {
+	u64 u64;
+	struct cvmx_sso_ientx_pendtag_s {
+		u64 reserved_38_63 : 26;
+		u64 pend_switch : 1;
+		u64 reserved_34_36 : 3;
+		u64 pend_tt : 2;
+		u64 pend_tag : 32;
+	} s;
+	struct cvmx_sso_ientx_pendtag_s cn73xx;
+	struct cvmx_sso_ientx_pendtag_s cn78xx;
+	struct cvmx_sso_ientx_pendtag_s cn78xxp1;
+	struct cvmx_sso_ientx_pendtag_s cnf75xx;
+};
+
+typedef union cvmx_sso_ientx_pendtag cvmx_sso_ientx_pendtag_t;
+
+/**
+ * cvmx_sso_ient#_qlinks
+ *
+ * Returns unit memory status for an index.
+ *
+ */
+union cvmx_sso_ientx_qlinks {
+	u64 u64;
+	struct cvmx_sso_ientx_qlinks_s {
+		u64 reserved_12_63 : 52;
+		u64 next_index : 12;
+	} s;
+	struct cvmx_sso_ientx_qlinks_s cn73xx;
+	struct cvmx_sso_ientx_qlinks_s cn78xx;
+	struct cvmx_sso_ientx_qlinks_s cn78xxp1;
+	struct cvmx_sso_ientx_qlinks_s cnf75xx;
+};
+
+typedef union cvmx_sso_ientx_qlinks cvmx_sso_ientx_qlinks_t;
+
+/**
+ * cvmx_sso_ient#_tag
+ *
+ * Returns unit memory status for an index.
+ *
+ */
+union cvmx_sso_ientx_tag {
+	u64 u64;
+	struct cvmx_sso_ientx_tag_s {
+		u64 reserved_39_63 : 25;
+		u64 tailc : 1;
+		u64 tail : 1;
+		u64 reserved_34_36 : 3;
+		u64 tt : 2;
+		u64 tag : 32;
+	} s;
+	struct cvmx_sso_ientx_tag_s cn73xx;
+	struct cvmx_sso_ientx_tag_s cn78xx;
+	struct cvmx_sso_ientx_tag_s cn78xxp1;
+	struct cvmx_sso_ientx_tag_s cnf75xx;
+};
+
+typedef union cvmx_sso_ientx_tag cvmx_sso_ientx_tag_t;
+
+/**
+ * cvmx_sso_ient#_wqpgrp
+ *
+ * Returns unit memory status for an index.
+ *
+ */
+union cvmx_sso_ientx_wqpgrp {
+	u64 u64;
+	struct cvmx_sso_ientx_wqpgrp_s {
+		u64 reserved_62_63 : 2;
+		u64 head : 1;
+		u64 nosched : 1;
+		u64 reserved_58_59 : 2;
+		u64 grp : 10;
+		u64 reserved_42_47 : 6;
+		u64 wqp : 42;
+	} s;
+	struct cvmx_sso_ientx_wqpgrp_cn73xx {
+		u64 reserved_62_63 : 2;
+		u64 head : 1;
+		u64 nosched : 1;
+		u64 reserved_56_59 : 4;
+		u64 grp : 8;
+		u64 reserved_42_47 : 6;
+		u64 wqp : 42;
+	} cn73xx;
+	struct cvmx_sso_ientx_wqpgrp_s cn78xx;
+	struct cvmx_sso_ientx_wqpgrp_s cn78xxp1;
+	struct cvmx_sso_ientx_wqpgrp_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sso_ientx_wqpgrp cvmx_sso_ientx_wqpgrp_t;
+
+/**
+ * cvmx_sso_ipl_conf#
+ *
+ * Returns list status for the conflicted list indexed by group.  Register
+ * fields are identical to those in SSO_IPL_IAQ() above.
+ */
+union cvmx_sso_ipl_confx {
+	u64 u64;
+	struct cvmx_sso_ipl_confx_s {
+		u64 reserved_28_63 : 36;
+		u64 queue_val : 1;
+		u64 queue_one : 1;
+		u64 reserved_25_25 : 1;
+		u64 queue_head : 12;
+		u64 reserved_12_12 : 1;
+		u64 queue_tail : 12;
+	} s;
+	struct cvmx_sso_ipl_confx_s cn73xx;
+	struct cvmx_sso_ipl_confx_s cn78xx;
+	struct cvmx_sso_ipl_confx_s cn78xxp1;
+	struct cvmx_sso_ipl_confx_s cnf75xx;
+};
+
+typedef union cvmx_sso_ipl_confx cvmx_sso_ipl_confx_t;
+
+/**
+ * cvmx_sso_ipl_desched#
+ *
+ * Returns list status for the deschedule list indexed by group.  Register
+ * fields are identical to those in SSO_IPL_IAQ() above.
+ */
+union cvmx_sso_ipl_deschedx {
+	u64 u64;
+	struct cvmx_sso_ipl_deschedx_s {
+		u64 reserved_28_63 : 36;
+		u64 queue_val : 1;
+		u64 queue_one : 1;
+		u64 reserved_25_25 : 1;
+		u64 queue_head : 12;
+		u64 reserved_12_12 : 1;
+		u64 queue_tail : 12;
+	} s;
+	struct cvmx_sso_ipl_deschedx_s cn73xx;
+	struct cvmx_sso_ipl_deschedx_s cn78xx;
+	struct cvmx_sso_ipl_deschedx_s cn78xxp1;
+	struct cvmx_sso_ipl_deschedx_s cnf75xx;
+};
+
+typedef union cvmx_sso_ipl_deschedx cvmx_sso_ipl_deschedx_t;
+
+/**
+ * cvmx_sso_ipl_free#
+ *
+ * Returns list status.
+ *
+ */
+union cvmx_sso_ipl_freex {
+	u64 u64;
+	struct cvmx_sso_ipl_freex_s {
+		u64 reserved_62_63 : 2;
+		u64 qnum_head : 3;
+		u64 qnum_tail : 3;
+		u64 reserved_28_55 : 28;
+		u64 queue_val : 1;
+		u64 reserved_25_26 : 2;
+		u64 queue_head : 12;
+		u64 reserved_12_12 : 1;
+		u64 queue_tail : 12;
+	} s;
+	struct cvmx_sso_ipl_freex_cn73xx {
+		u64 reserved_62_63 : 2;
+		u64 qnum_head : 3;
+		u64 qnum_tail : 3;
+		u64 reserved_28_55 : 28;
+		u64 queue_val : 1;
+		u64 reserved_23_26 : 4;
+		u64 queue_head : 10;
+		u64 reserved_10_12 : 3;
+		u64 queue_tail : 10;
+	} cn73xx;
+	struct cvmx_sso_ipl_freex_s cn78xx;
+	struct cvmx_sso_ipl_freex_s cn78xxp1;
+	struct cvmx_sso_ipl_freex_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sso_ipl_freex cvmx_sso_ipl_freex_t;
+
+/**
+ * cvmx_sso_ipl_iaq#
+ *
+ * Returns list status for the internal admission queue indexed by group.
+ *
+ */
+union cvmx_sso_ipl_iaqx {
+	u64 u64;
+	struct cvmx_sso_ipl_iaqx_s {
+		u64 reserved_28_63 : 36;
+		u64 queue_val : 1;
+		u64 queue_one : 1;
+		u64 reserved_25_25 : 1;
+		u64 queue_head : 12;
+		u64 reserved_12_12 : 1;
+		u64 queue_tail : 12;
+	} s;
+	struct cvmx_sso_ipl_iaqx_s cn73xx;
+	struct cvmx_sso_ipl_iaqx_s cn78xx;
+	struct cvmx_sso_ipl_iaqx_s cn78xxp1;
+	struct cvmx_sso_ipl_iaqx_s cnf75xx;
+};
+
+typedef union cvmx_sso_ipl_iaqx cvmx_sso_ipl_iaqx_t;
+
+/**
+ * cvmx_sso_iq_cnt#
+ *
+ * CSR reserved addresses: (64): 0x8200..0x83f8
+ * CSR align addresses: ===========================================================================================================
+ * SSO_IQ_CNTX = SSO Input Queue Count Register
+ *               (one per QOS level)
+ *
+ * Contains a read-only count of the number of work queue entries for each QOS
+ * level. Counts both in-unit and in-memory entries.
+ */
+union cvmx_sso_iq_cntx {
+	u64 u64;
+	struct cvmx_sso_iq_cntx_s {
+		u64 reserved_32_63 : 32;
+		u64 iq_cnt : 32;
+	} s;
+	struct cvmx_sso_iq_cntx_s cn68xx;
+	struct cvmx_sso_iq_cntx_s cn68xxp1;
+};
+
+typedef union cvmx_sso_iq_cntx cvmx_sso_iq_cntx_t;
+
+/**
+ * cvmx_sso_iq_com_cnt
+ *
+ * SSO_IQ_COM_CNT = SSO Input Queue Combined Count Register
+ *
+ * Contains a read-only count of the total number of work queue entries in all
+ * QOS levels.  Counts both in-unit and in-memory entries.
+ */
+union cvmx_sso_iq_com_cnt {
+	u64 u64;
+	struct cvmx_sso_iq_com_cnt_s {
+		u64 reserved_32_63 : 32;
+		u64 iq_cnt : 32;
+	} s;
+	struct cvmx_sso_iq_com_cnt_s cn68xx;
+	struct cvmx_sso_iq_com_cnt_s cn68xxp1;
+};
+
+typedef union cvmx_sso_iq_com_cnt cvmx_sso_iq_com_cnt_t;
+
+/**
+ * cvmx_sso_iq_int
+ *
+ * SSO_IQ_INT = SSO Input Queue Interrupt Register
+ *
+ * Contains the bits (one per QOS level) that can trigger the input queue
+ * interrupt.  An IQ_INT bit will be set if SSO_IQ_CNT#QOS# changes and the
+ * resulting value is equal to SSO_IQ_THR#QOS#.
+ */
+union cvmx_sso_iq_int {
+	u64 u64;
+	struct cvmx_sso_iq_int_s {
+		u64 reserved_8_63 : 56;
+		u64 iq_int : 8;
+	} s;
+	struct cvmx_sso_iq_int_s cn68xx;
+	struct cvmx_sso_iq_int_s cn68xxp1;
+};
+
+typedef union cvmx_sso_iq_int cvmx_sso_iq_int_t;
+
+/**
+ * cvmx_sso_iq_int_en
+ *
+ * SSO_IQ_INT_EN = SSO Input Queue Interrupt Enable Register
+ *
+ * Contains the bits (one per QOS level) that enable the input queue interrupt.
+ */
+union cvmx_sso_iq_int_en {
+	u64 u64;
+	struct cvmx_sso_iq_int_en_s {
+		u64 reserved_8_63 : 56;
+		u64 int_en : 8;
+	} s;
+	struct cvmx_sso_iq_int_en_s cn68xx;
+	struct cvmx_sso_iq_int_en_s cn68xxp1;
+};
+
+typedef union cvmx_sso_iq_int_en cvmx_sso_iq_int_en_t;
+
+/**
+ * cvmx_sso_iq_thr#
+ *
+ * CSR reserved addresses: (24): 0x9040..0x90f8
+ * CSR align addresses: ===========================================================================================================
+ * SSO_IQ_THRX = SSO Input Queue Threshold Register
+ *               (one per QOS level)
+ *
+ * Threshold value for triggering input queue interrupts.
+ */
+union cvmx_sso_iq_thrx {
+	u64 u64;
+	struct cvmx_sso_iq_thrx_s {
+		u64 reserved_32_63 : 32;
+		u64 iq_thr : 32;
+	} s;
+	struct cvmx_sso_iq_thrx_s cn68xx;
+	struct cvmx_sso_iq_thrx_s cn68xxp1;
+};
+
+typedef union cvmx_sso_iq_thrx cvmx_sso_iq_thrx_t;
+
+/**
+ * cvmx_sso_nos_cnt
+ *
+ * Contains the number of work-queue entries on the no-schedule list.
+ *
+ */
+union cvmx_sso_nos_cnt {
+	u64 u64;
+	struct cvmx_sso_nos_cnt_s {
+		u64 reserved_13_63 : 51;
+		u64 nos_cnt : 13;
+	} s;
+	struct cvmx_sso_nos_cnt_cn68xx {
+		u64 reserved_12_63 : 52;
+		u64 nos_cnt : 12;
+	} cn68xx;
+	struct cvmx_sso_nos_cnt_cn68xx cn68xxp1;
+	struct cvmx_sso_nos_cnt_s cn73xx;
+	struct cvmx_sso_nos_cnt_s cn78xx;
+	struct cvmx_sso_nos_cnt_s cn78xxp1;
+	struct cvmx_sso_nos_cnt_s cnf75xx;
+};
+
+typedef union cvmx_sso_nos_cnt cvmx_sso_nos_cnt_t;
+
+/**
+ * cvmx_sso_nw_tim
+ *
+ * Sets the minimum period for a new-work-request timeout. The period is specified in n-1
+ * notation, with the increment value of 1024 clock cycles. Thus, a value of 0x0 in this register
+ * translates to 1024 cycles, 0x1 translates to 2048 cycles, 0x2 translates to 3072 cycles, etc.
+ */
+union cvmx_sso_nw_tim {
+	u64 u64;
+	struct cvmx_sso_nw_tim_s {
+		u64 reserved_10_63 : 54;
+		u64 nw_tim : 10;
+	} s;
+	struct cvmx_sso_nw_tim_s cn68xx;
+	struct cvmx_sso_nw_tim_s cn68xxp1;
+	struct cvmx_sso_nw_tim_s cn73xx;
+	struct cvmx_sso_nw_tim_s cn78xx;
+	struct cvmx_sso_nw_tim_s cn78xxp1;
+	struct cvmx_sso_nw_tim_s cnf75xx;
+};
+
+typedef union cvmx_sso_nw_tim cvmx_sso_nw_tim_t;
+
+/**
+ * cvmx_sso_oth_ecc_ctl
+ *
+ * SSO_OTH_ECC_CTL = SSO OTH ECC Control
+ *
+ */
+union cvmx_sso_oth_ecc_ctl {
+	u64 u64;
+	struct cvmx_sso_oth_ecc_ctl_s {
+		u64 reserved_6_63 : 58;
+		u64 flip_synd1 : 2;
+		u64 ecc_ena1 : 1;
+		u64 flip_synd0 : 2;
+		u64 ecc_ena0 : 1;
+	} s;
+	struct cvmx_sso_oth_ecc_ctl_s cn68xx;
+	struct cvmx_sso_oth_ecc_ctl_s cn68xxp1;
+};
+
+typedef union cvmx_sso_oth_ecc_ctl cvmx_sso_oth_ecc_ctl_t;
+
+/**
+ * cvmx_sso_oth_ecc_st
+ *
+ * SSO_OTH_ECC_ST = SSO OTH ECC Status
+ *
+ */
+union cvmx_sso_oth_ecc_st {
+	u64 u64;
+	struct cvmx_sso_oth_ecc_st_s {
+		u64 reserved_59_63 : 5;
+		u64 addr1 : 11;
+		u64 reserved_43_47 : 5;
+		u64 syndrom1 : 7;
+		u64 reserved_27_35 : 9;
+		u64 addr0 : 11;
+		u64 reserved_11_15 : 5;
+		u64 syndrom0 : 7;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_sso_oth_ecc_st_s cn68xx;
+	struct cvmx_sso_oth_ecc_st_s cn68xxp1;
+};
+
+typedef union cvmx_sso_oth_ecc_st cvmx_sso_oth_ecc_st_t;
+
+/**
+ * cvmx_sso_page_cnt
+ */
+union cvmx_sso_page_cnt {
+	u64 u64;
+	struct cvmx_sso_page_cnt_s {
+		u64 reserved_32_63 : 32;
+		u64 cnt : 32;
+	} s;
+	struct cvmx_sso_page_cnt_s cn73xx;
+	struct cvmx_sso_page_cnt_s cn78xx;
+	struct cvmx_sso_page_cnt_s cn78xxp1;
+	struct cvmx_sso_page_cnt_s cnf75xx;
+};
+
+typedef union cvmx_sso_page_cnt cvmx_sso_page_cnt_t;
+
+/**
+ * cvmx_sso_pnd_ecc_ctl
+ *
+ * SSO_PND_ECC_CTL = SSO PND ECC Control
+ *
+ */
+union cvmx_sso_pnd_ecc_ctl {
+	u64 u64;
+	struct cvmx_sso_pnd_ecc_ctl_s {
+		u64 reserved_6_63 : 58;
+		u64 flip_synd1 : 2;
+		u64 ecc_ena1 : 1;
+		u64 flip_synd0 : 2;
+		u64 ecc_ena0 : 1;
+	} s;
+	struct cvmx_sso_pnd_ecc_ctl_s cn68xx;
+	struct cvmx_sso_pnd_ecc_ctl_s cn68xxp1;
+};
+
+typedef union cvmx_sso_pnd_ecc_ctl cvmx_sso_pnd_ecc_ctl_t;
+
+/**
+ * cvmx_sso_pnd_ecc_st
+ *
+ * SSO_PND_ECC_ST = SSO PND ECC Status
+ *
+ */
+union cvmx_sso_pnd_ecc_st {
+	u64 u64;
+	struct cvmx_sso_pnd_ecc_st_s {
+		u64 reserved_59_63 : 5;
+		u64 addr1 : 11;
+		u64 reserved_43_47 : 5;
+		u64 syndrom1 : 7;
+		u64 reserved_27_35 : 9;
+		u64 addr0 : 11;
+		u64 reserved_11_15 : 5;
+		u64 syndrom0 : 7;
+		u64 reserved_0_3 : 4;
+	} s;
+	struct cvmx_sso_pnd_ecc_st_s cn68xx;
+	struct cvmx_sso_pnd_ecc_st_s cn68xxp1;
+};
+
+typedef union cvmx_sso_pnd_ecc_st cvmx_sso_pnd_ecc_st_t;
+
+/**
+ * cvmx_sso_pp#_arb
+ *
+ * For diagnostic use, returns the group affinity arbitration state for each core.
+ *
+ */
+union cvmx_sso_ppx_arb {
+	u64 u64;
+	struct cvmx_sso_ppx_arb_s {
+		u64 reserved_20_63 : 44;
+		u64 aff_left : 4;
+		u64 reserved_8_15 : 8;
+		u64 last_grp : 8;
+	} s;
+	struct cvmx_sso_ppx_arb_s cn73xx;
+	struct cvmx_sso_ppx_arb_s cn78xx;
+	struct cvmx_sso_ppx_arb_s cn78xxp1;
+	struct cvmx_sso_ppx_arb_s cnf75xx;
+};
+
+typedef union cvmx_sso_ppx_arb cvmx_sso_ppx_arb_t;
+
+/**
+ * cvmx_sso_pp#_grp_msk
+ *
+ * CSR reserved addresses: (24): 0x5040..0x50f8
+ * CSR align addresses: ===========================================================================================================
+ * SSO_PPX_GRP_MSK = SSO PP Group Mask Register
+ *                   (one bit per group per PP)
+ *
+ * Selects which group(s) a PP belongs to.  A '1' in any bit position sets the
+ * PP's membership in the corresponding group.  A value of 0x0 will prevent the
+ * PP from receiving new work.
+ *
+ * Note that these do not contain QOS level priorities for each PP.  This is a
+ * change from previous POW designs.
+ */
+union cvmx_sso_ppx_grp_msk {
+	u64 u64;
+	struct cvmx_sso_ppx_grp_msk_s {
+		u64 grp_msk : 64;
+	} s;
+	struct cvmx_sso_ppx_grp_msk_s cn68xx;
+	struct cvmx_sso_ppx_grp_msk_s cn68xxp1;
+};
+
+typedef union cvmx_sso_ppx_grp_msk cvmx_sso_ppx_grp_msk_t;
+
+/**
+ * cvmx_sso_pp#_qos_pri
+ *
+ * CSR reserved addresses: (56): 0x2040..0x21f8
+ * CSR align addresses: ===========================================================================================================
+ * SSO_PP(0..31)_QOS_PRI = SSO PP QOS Priority Register
+ *                                (one field per IQ per PP)
+ *
+ * Contains the QOS level priorities for each PP.
+ *      0x0       is the highest priority
+ *      0x7       is the lowest priority
+ *      0xf       prevents the PP from receiving work from that QOS level
+ *      0x8-0xe   Reserved
+ *
+ * For a given PP, priorities should begin at 0x0, and remain contiguous
+ * throughout the range.  Failure to do so may result in severe
+ * performance degradation.
+ *
+ *
+ * Priorities for IQs 0..7
+ */
+union cvmx_sso_ppx_qos_pri {
+	u64 u64;
+	struct cvmx_sso_ppx_qos_pri_s {
+		u64 reserved_60_63 : 4;
+		u64 qos7_pri : 4;
+		u64 reserved_52_55 : 4;
+		u64 qos6_pri : 4;
+		u64 reserved_44_47 : 4;
+		u64 qos5_pri : 4;
+		u64 reserved_36_39 : 4;
+		u64 qos4_pri : 4;
+		u64 reserved_28_31 : 4;
+		u64 qos3_pri : 4;
+		u64 reserved_20_23 : 4;
+		u64 qos2_pri : 4;
+		u64 reserved_12_15 : 4;
+		u64 qos1_pri : 4;
+		u64 reserved_4_7 : 4;
+		u64 qos0_pri : 4;
+	} s;
+	struct cvmx_sso_ppx_qos_pri_s cn68xx;
+	struct cvmx_sso_ppx_qos_pri_s cn68xxp1;
+};
+
+typedef union cvmx_sso_ppx_qos_pri cvmx_sso_ppx_qos_pri_t;
+
+/**
+ * cvmx_sso_pp#_s#_grpmsk#
+ *
+ * These registers select which group or groups a core belongs to. There are 2 sets of masks per
+ * core, each with 1 register corresponding to 64 groups.
+ */
+union cvmx_sso_ppx_sx_grpmskx {
+	u64 u64;
+	struct cvmx_sso_ppx_sx_grpmskx_s {
+		u64 grp_msk : 64;
+	} s;
+	struct cvmx_sso_ppx_sx_grpmskx_s cn73xx;
+	struct cvmx_sso_ppx_sx_grpmskx_s cn78xx;
+	struct cvmx_sso_ppx_sx_grpmskx_s cn78xxp1;
+	struct cvmx_sso_ppx_sx_grpmskx_s cnf75xx;
+};
+
+typedef union cvmx_sso_ppx_sx_grpmskx cvmx_sso_ppx_sx_grpmskx_t;
+
+/**
+ * cvmx_sso_pp_strict
+ *
+ * SSO_PP_STRICT = SSO Strict Priority
+ *
+ * This register controls getting work from the input queues.  If the bit
+ * corresponding to a PP is set, that PP will not take work off the input
+ * queues until it is known that there is no higher-priority work available.
+ *
+ * Setting SSO_PP_STRICT may incur a performance penalty if highest-priority
+ * work is not found early.
+ *
+ * It is possible to starve a PP of work with SSO_PP_STRICT.  If the
+ * SSO_PPX_GRP_MSK for a PP masks-out much of the work added to the input
+ * queues that are higher-priority for that PP, and if there is a constant
+ * stream of work through one or more of those higher-priority input queues,
+ * then that PP may not accept work from lower-priority input queues.  This can
+ * be alleviated by ensuring that most or all the work added to the
+ * higher-priority input queues for a PP with SSO_PP_STRICT set are in a group
+ * acceptable to that PP.
+ *
+ * It is also possible to neglect work in an input queue if SSO_PP_STRICT is
+ * used.  If an input queue is a lower-priority queue for all PPs, and if all
+ * the PPs have their corresponding bit in SSO_PP_STRICT set, then work may
+ * never be taken (or be seldom taken) from that queue.  This can be alleviated
+ * by ensuring that work in all input queues can be serviced by one or more PPs
+ * that do not have SSO_PP_STRICT set, or that the input queue is the
+ * highest-priority input queue for one or more PPs that do have SSO_PP_STRICT
+ * set.
+ */
+union cvmx_sso_pp_strict {
+	u64 u64;
+	struct cvmx_sso_pp_strict_s {
+		u64 reserved_32_63 : 32;
+		u64 pp_strict : 32;
+	} s;
+	struct cvmx_sso_pp_strict_s cn68xx;
+	struct cvmx_sso_pp_strict_s cn68xxp1;
+};
+
+typedef union cvmx_sso_pp_strict cvmx_sso_pp_strict_t;
+
+/**
+ * cvmx_sso_qos#_rnd
+ *
+ * CSR align addresses: ===========================================================================================================
+ * SSO_QOS(0..7)_RND = SSO QOS Issue Round Register
+ *                (one per IQ)
+ *
+ * The number of arbitration rounds each QOS level participates in.
+ */
+union cvmx_sso_qosx_rnd {
+	u64 u64;
+	struct cvmx_sso_qosx_rnd_s {
+		u64 reserved_8_63 : 56;
+		u64 rnds_qos : 8;
+	} s;
+	struct cvmx_sso_qosx_rnd_s cn68xx;
+	struct cvmx_sso_qosx_rnd_s cn68xxp1;
+};
+
+typedef union cvmx_sso_qosx_rnd cvmx_sso_qosx_rnd_t;
+
+/**
+ * cvmx_sso_qos_thr#
+ *
+ * CSR reserved addresses: (24): 0xa040..0xa0f8
+ * CSR align addresses: ===========================================================================================================
+ * SSO_QOS_THRX = SSO QOS Threshold Register
+ *                (one per QOS level)
+ *
+ * Contains the thresholds for allocating SSO internal storage buffers.  If the
+ * number of remaining free buffers drops below the minimum threshold (MIN_THR)
+ * or the number of allocated buffers for this QOS level rises above the
+ * maximum threshold (MAX_THR), future incoming work queue entries will be
+ * buffered externally rather than internally.  This register also contains the
+ * number of internal buffers currently allocated to this QOS level (BUF_CNT).
+ */
+union cvmx_sso_qos_thrx {
+	u64 u64;
+	struct cvmx_sso_qos_thrx_s {
+		u64 reserved_40_63 : 24;
+		u64 buf_cnt : 12;
+		u64 reserved_26_27 : 2;
+		u64 max_thr : 12;
+		u64 reserved_12_13 : 2;
+		u64 min_thr : 12;
+	} s;
+	struct cvmx_sso_qos_thrx_s cn68xx;
+	struct cvmx_sso_qos_thrx_s cn68xxp1;
+};
+
+typedef union cvmx_sso_qos_thrx cvmx_sso_qos_thrx_t;
+
+/**
+ * cvmx_sso_qos_we
+ *
+ * SSO_QOS_WE = SSO WE Buffers
+ *
+ * This register contains a read-only count of the current number of free
+ * buffers (FREE_CNT) and the total number of tag chain heads on the de-schedule list
+ * (DES_CNT) (which is not the same as the total number of entries on all of the descheduled
+ * tag chains.)
+ */
+union cvmx_sso_qos_we {
+	u64 u64;
+	struct cvmx_sso_qos_we_s {
+		u64 reserved_26_63 : 38;
+		u64 des_cnt : 12;
+		u64 reserved_12_13 : 2;
+		u64 free_cnt : 12;
+	} s;
+	struct cvmx_sso_qos_we_s cn68xx;
+	struct cvmx_sso_qos_we_s cn68xxp1;
+};
+
+typedef union cvmx_sso_qos_we cvmx_sso_qos_we_t;
+
+/**
+ * cvmx_sso_reset
+ *
+ * Writing a 1 to SSO_RESET[RESET] resets the SSO. After receiving a store to this CSR, the SSO
+ * must not be sent any other operations for 2500 coprocessor (SCLK) cycles. Note that the
+ * contents of this register are reset along with the rest of the SSO.
+ */
+union cvmx_sso_reset {
+	u64 u64;
+	struct cvmx_sso_reset_s {
+		u64 busy : 1;
+		u64 reserved_1_62 : 62;
+		u64 reset : 1;
+	} s;
+	struct cvmx_sso_reset_cn68xx {
+		u64 reserved_1_63 : 63;
+		u64 reset : 1;
+	} cn68xx;
+	struct cvmx_sso_reset_s cn73xx;
+	struct cvmx_sso_reset_s cn78xx;
+	struct cvmx_sso_reset_s cn78xxp1;
+	struct cvmx_sso_reset_s cnf75xx;
+};
+
+typedef union cvmx_sso_reset cvmx_sso_reset_t;
+
+/**
+ * cvmx_sso_rwq_head_ptr#
+ *
+ * CSR reserved addresses: (24): 0xb040..0xb0f8
+ * CSR align addresses: ===========================================================================================================
+ * SSO_RWQ_HEAD_PTRX = SSO Remote Queue Head Register
+ *                (one per QOS level)
+ * Contains the ptr to the first entry of the remote linked list(s) for a particular
+ * QoS level. SW should initialize the remote linked list(s) by programming
+ * SSO_RWQ_HEAD_PTRX and SSO_RWQ_TAIL_PTRX to identical values.
+ */
+union cvmx_sso_rwq_head_ptrx {
+	u64 u64;
+	struct cvmx_sso_rwq_head_ptrx_s {
+		u64 reserved_38_63 : 26;
+		u64 ptr : 31;
+		u64 reserved_5_6 : 2;
+		u64 rctr : 5;
+	} s;
+	struct cvmx_sso_rwq_head_ptrx_s cn68xx;
+	struct cvmx_sso_rwq_head_ptrx_s cn68xxp1;
+};
+
+typedef union cvmx_sso_rwq_head_ptrx cvmx_sso_rwq_head_ptrx_t;
+
+/**
+ * cvmx_sso_rwq_pop_fptr
+ *
+ * SSO_RWQ_POP_FPTR = SSO Pop Free Pointer
+ *
+ * This register is used by SW to remove pointers for buffer-reallocation and diagnostics, and
+ * should only be used when SSO is idle.
+ *
+ * To remove ALL pointers, software must insure that there are modulus 16
+ * pointers in the FPA.  To do this, SSO_CFG.RWQ_BYP_DIS must be set, the FPA
+ * pointer count read, and enough fake buffers pushed via SSO_RWQ_PSH_FPTR to
+ * bring the FPA pointer count up to mod 16.
+ */
+union cvmx_sso_rwq_pop_fptr {
+	u64 u64;
+	struct cvmx_sso_rwq_pop_fptr_s {
+		u64 val : 1;
+		u64 reserved_38_62 : 25;
+		u64 fptr : 31;
+		u64 reserved_0_6 : 7;
+	} s;
+	struct cvmx_sso_rwq_pop_fptr_s cn68xx;
+	struct cvmx_sso_rwq_pop_fptr_s cn68xxp1;
+};
+
+typedef union cvmx_sso_rwq_pop_fptr cvmx_sso_rwq_pop_fptr_t;
+
+/**
+ * cvmx_sso_rwq_psh_fptr
+ *
+ * CSR reserved addresses: (56): 0xc240..0xc3f8
+ * SSO_RWQ_PSH_FPTR = SSO Free Pointer FIFO
+ *
+ * This register is used by SW to initialize the SSO with a pool of free
+ * pointers by writing the FPTR field whenever FULL = 0. Free pointers are
+ * fetched/released from/to the pool when accessing WQE entries stored remotely
+ * (in remote linked lists).  Free pointers should be 128 byte aligned, each of
+ * 256 bytes. This register should only be used when SSO is idle.
+ *
+ * Software needs to set aside buffering for
+ *      8 + 48 + ROUNDUP(N/26)
+ *
+ * where as many as N DRAM work queue entries may be used.  The first 8 buffers
+ * are used to setup the SSO_RWQ_HEAD_PTR and SSO_RWQ_TAIL_PTRs, and the
+ * remainder are pushed via this register.
+ *
+ * IMPLEMENTATION NOTES--NOT FOR SPEC:
+ *      48 avoids false out of buffer error due to (16) FPA and in-sso FPA buffering (32)
+ *      26 is number of WAE's per 256B buffer
+ */
+union cvmx_sso_rwq_psh_fptr {
+	u64 u64;
+	struct cvmx_sso_rwq_psh_fptr_s {
+		u64 full : 1;
+		u64 reserved_38_62 : 25;
+		u64 fptr : 31;
+		u64 reserved_0_6 : 7;
+	} s;
+	struct cvmx_sso_rwq_psh_fptr_s cn68xx;
+	struct cvmx_sso_rwq_psh_fptr_s cn68xxp1;
+};
+
+typedef union cvmx_sso_rwq_psh_fptr cvmx_sso_rwq_psh_fptr_t;
+
+/**
+ * cvmx_sso_rwq_tail_ptr#
+ *
+ * CSR reserved addresses: (56): 0xc040..0xc1f8
+ * SSO_RWQ_TAIL_PTRX = SSO Remote Queue Tail Register
+ *                (one per QOS level)
+ * Contains the ptr to the last entry of the remote linked list(s) for a particular
+ * QoS level. SW must initialize the remote linked list(s) by programming
+ * SSO_RWQ_HEAD_PTRX and SSO_RWQ_TAIL_PTRX to identical values.
+ */
+union cvmx_sso_rwq_tail_ptrx {
+	u64 u64;
+	struct cvmx_sso_rwq_tail_ptrx_s {
+		u64 reserved_38_63 : 26;
+		u64 ptr : 31;
+		u64 reserved_5_6 : 2;
+		u64 rctr : 5;
+	} s;
+	struct cvmx_sso_rwq_tail_ptrx_s cn68xx;
+	struct cvmx_sso_rwq_tail_ptrx_s cn68xxp1;
+};
+
+typedef union cvmx_sso_rwq_tail_ptrx cvmx_sso_rwq_tail_ptrx_t;
+
+/**
+ * cvmx_sso_sl_pp#_links
+ *
+ * Returns status of each core.
+ *
+ */
+union cvmx_sso_sl_ppx_links {
+	u64 u64;
+	struct cvmx_sso_sl_ppx_links_s {
+		u64 tailc : 1;
+		u64 reserved_60_62 : 3;
+		u64 index : 12;
+		u64 reserved_38_47 : 10;
+		u64 grp : 10;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 reserved_0_25 : 26;
+	} s;
+	struct cvmx_sso_sl_ppx_links_cn73xx {
+		u64 tailc : 1;
+		u64 reserved_58_62 : 5;
+		u64 index : 10;
+		u64 reserved_36_47 : 12;
+		u64 grp : 8;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 reserved_21_25 : 5;
+		u64 revlink_index : 10;
+		u64 link_index_vld : 1;
+		u64 link_index : 10;
+	} cn73xx;
+	struct cvmx_sso_sl_ppx_links_cn78xx {
+		u64 tailc : 1;
+		u64 reserved_60_62 : 3;
+		u64 index : 12;
+		u64 reserved_38_47 : 10;
+		u64 grp : 10;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 reserved_25_25 : 1;
+		u64 revlink_index : 12;
+		u64 link_index_vld : 1;
+		u64 link_index : 12;
+	} cn78xx;
+	struct cvmx_sso_sl_ppx_links_cn78xx cn78xxp1;
+	struct cvmx_sso_sl_ppx_links_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sso_sl_ppx_links cvmx_sso_sl_ppx_links_t;
+
+/**
+ * cvmx_sso_sl_pp#_pendtag
+ *
+ * Returns status of each core.
+ *
+ */
+union cvmx_sso_sl_ppx_pendtag {
+	u64 u64;
+	struct cvmx_sso_sl_ppx_pendtag_s {
+		u64 pend_switch : 1;
+		u64 pend_get_work : 1;
+		u64 pend_get_work_wait : 1;
+		u64 pend_nosched : 1;
+		u64 pend_nosched_clr : 1;
+		u64 pend_desched : 1;
+		u64 pend_alloc_we : 1;
+		u64 pend_gw_insert : 1;
+		u64 reserved_34_55 : 22;
+		u64 pend_tt : 2;
+		u64 pend_tag : 32;
+	} s;
+	struct cvmx_sso_sl_ppx_pendtag_s cn73xx;
+	struct cvmx_sso_sl_ppx_pendtag_s cn78xx;
+	struct cvmx_sso_sl_ppx_pendtag_s cn78xxp1;
+	struct cvmx_sso_sl_ppx_pendtag_s cnf75xx;
+};
+
+typedef union cvmx_sso_sl_ppx_pendtag cvmx_sso_sl_ppx_pendtag_t;
+
+/**
+ * cvmx_sso_sl_pp#_pendwqp
+ *
+ * Returns status of each core.
+ *
+ */
+union cvmx_sso_sl_ppx_pendwqp {
+	u64 u64;
+	struct cvmx_sso_sl_ppx_pendwqp_s {
+		u64 pend_switch : 1;
+		u64 pend_get_work : 1;
+		u64 pend_get_work_wait : 1;
+		u64 pend_nosched : 1;
+		u64 pend_nosched_clr : 1;
+		u64 pend_desched : 1;
+		u64 pend_alloc_we : 1;
+		u64 reserved_56_56 : 1;
+		u64 pend_index : 12;
+		u64 reserved_42_43 : 2;
+		u64 pend_wqp : 42;
+	} s;
+	struct cvmx_sso_sl_ppx_pendwqp_cn73xx {
+		u64 pend_switch : 1;
+		u64 pend_get_work : 1;
+		u64 pend_get_work_wait : 1;
+		u64 pend_nosched : 1;
+		u64 pend_nosched_clr : 1;
+		u64 pend_desched : 1;
+		u64 pend_alloc_we : 1;
+		u64 reserved_54_56 : 3;
+		u64 pend_index : 10;
+		u64 reserved_42_43 : 2;
+		u64 pend_wqp : 42;
+	} cn73xx;
+	struct cvmx_sso_sl_ppx_pendwqp_s cn78xx;
+	struct cvmx_sso_sl_ppx_pendwqp_s cn78xxp1;
+	struct cvmx_sso_sl_ppx_pendwqp_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sso_sl_ppx_pendwqp cvmx_sso_sl_ppx_pendwqp_t;
+
+/**
+ * cvmx_sso_sl_pp#_tag
+ *
+ * Returns status of each core.
+ *
+ */
+union cvmx_sso_sl_ppx_tag {
+	u64 u64;
+	struct cvmx_sso_sl_ppx_tag_s {
+		u64 tailc : 1;
+		u64 reserved_60_62 : 3;
+		u64 index : 12;
+		u64 reserved_46_47 : 2;
+		u64 grp : 10;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 tt : 2;
+		u64 tag : 32;
+	} s;
+	struct cvmx_sso_sl_ppx_tag_cn73xx {
+		u64 tailc : 1;
+		u64 reserved_58_62 : 5;
+		u64 index : 10;
+		u64 reserved_44_47 : 4;
+		u64 grp : 8;
+		u64 head : 1;
+		u64 tail : 1;
+		u64 tt : 2;
+		u64 tag : 32;
+	} cn73xx;
+	struct cvmx_sso_sl_ppx_tag_s cn78xx;
+	struct cvmx_sso_sl_ppx_tag_s cn78xxp1;
+	struct cvmx_sso_sl_ppx_tag_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sso_sl_ppx_tag cvmx_sso_sl_ppx_tag_t;
+
+/**
+ * cvmx_sso_sl_pp#_wqp
+ *
+ * Returns status of each core.
+ *
+ */
+union cvmx_sso_sl_ppx_wqp {
+	u64 u64;
+	struct cvmx_sso_sl_ppx_wqp_s {
+		u64 reserved_58_63 : 6;
+		u64 grp : 10;
+		u64 reserved_42_47 : 6;
+		u64 wqp : 42;
+	} s;
+	struct cvmx_sso_sl_ppx_wqp_cn73xx {
+		u64 reserved_56_63 : 8;
+		u64 grp : 8;
+		u64 reserved_42_47 : 6;
+		u64 wqp : 42;
+	} cn73xx;
+	struct cvmx_sso_sl_ppx_wqp_s cn78xx;
+	struct cvmx_sso_sl_ppx_wqp_s cn78xxp1;
+	struct cvmx_sso_sl_ppx_wqp_cn73xx cnf75xx;
+};
+
+typedef union cvmx_sso_sl_ppx_wqp cvmx_sso_sl_ppx_wqp_t;
+
+/**
+ * cvmx_sso_taq#_link
+ *
+ * Returns TAQ status for a given line.
+ *
+ */
+union cvmx_sso_taqx_link {
+	u64 u64;
+	struct cvmx_sso_taqx_link_s {
+		u64 reserved_11_63 : 53;
+		u64 next : 11;
+	} s;
+	struct cvmx_sso_taqx_link_s cn73xx;
+	struct cvmx_sso_taqx_link_s cn78xx;
+	struct cvmx_sso_taqx_link_s cn78xxp1;
+	struct cvmx_sso_taqx_link_s cnf75xx;
+};
+
+typedef union cvmx_sso_taqx_link cvmx_sso_taqx_link_t;
+
+/**
+ * cvmx_sso_taq#_wae#_tag
+ *
+ * Returns TAQ status for a given line and WAE within that line.
+ *
+ */
+union cvmx_sso_taqx_waex_tag {
+	u64 u64;
+	struct cvmx_sso_taqx_waex_tag_s {
+		u64 reserved_34_63 : 30;
+		u64 tt : 2;
+		u64 tag : 32;
+	} s;
+	struct cvmx_sso_taqx_waex_tag_s cn73xx;
+	struct cvmx_sso_taqx_waex_tag_s cn78xx;
+	struct cvmx_sso_taqx_waex_tag_s cn78xxp1;
+	struct cvmx_sso_taqx_waex_tag_s cnf75xx;
+};
+
+typedef union cvmx_sso_taqx_waex_tag cvmx_sso_taqx_waex_tag_t;
+
+/**
+ * cvmx_sso_taq#_wae#_wqp
+ *
+ * Returns TAQ status for a given line and WAE within that line.
+ *
+ */
+union cvmx_sso_taqx_waex_wqp {
+	u64 u64;
+	struct cvmx_sso_taqx_waex_wqp_s {
+		u64 reserved_42_63 : 22;
+		u64 wqp : 42;
+	} s;
+	struct cvmx_sso_taqx_waex_wqp_s cn73xx;
+	struct cvmx_sso_taqx_waex_wqp_s cn78xx;
+	struct cvmx_sso_taqx_waex_wqp_s cn78xxp1;
+	struct cvmx_sso_taqx_waex_wqp_s cnf75xx;
+};
+
+typedef union cvmx_sso_taqx_waex_wqp cvmx_sso_taqx_waex_wqp_t;
+
+/**
+ * cvmx_sso_taq_add
+ */
+union cvmx_sso_taq_add {
+	u64 u64;
+	struct cvmx_sso_taq_add_s {
+		u64 reserved_29_63 : 35;
+		u64 rsvd_free : 13;
+		u64 reserved_0_15 : 16;
+	} s;
+	struct cvmx_sso_taq_add_s cn73xx;
+	struct cvmx_sso_taq_add_s cn78xx;
+	struct cvmx_sso_taq_add_s cn78xxp1;
+	struct cvmx_sso_taq_add_s cnf75xx;
+};
+
+typedef union cvmx_sso_taq_add cvmx_sso_taq_add_t;
+
+/**
+ * cvmx_sso_taq_cnt
+ */
+union cvmx_sso_taq_cnt {
+	u64 u64;
+	struct cvmx_sso_taq_cnt_s {
+		u64 reserved_27_63 : 37;
+		u64 rsvd_free : 11;
+		u64 reserved_11_15 : 5;
+		u64 free_cnt : 11;
+	} s;
+	struct cvmx_sso_taq_cnt_s cn73xx;
+	struct cvmx_sso_taq_cnt_s cn78xx;
+	struct cvmx_sso_taq_cnt_s cn78xxp1;
+	struct cvmx_sso_taq_cnt_s cnf75xx;
+};
+
+typedef union cvmx_sso_taq_cnt cvmx_sso_taq_cnt_t;
+
+/**
+ * cvmx_sso_tiaq#_status
+ *
+ * Returns TAQ inbound status indexed by group.
+ *
+ */
+union cvmx_sso_tiaqx_status {
+	u64 u64;
+	struct cvmx_sso_tiaqx_status_s {
+		u64 wae_head : 4;
+		u64 wae_tail : 4;
+		u64 reserved_47_55 : 9;
+		u64 wae_used : 15;
+		u64 reserved_23_31 : 9;
+		u64 ent_head : 11;
+		u64 reserved_11_11 : 1;
+		u64 ent_tail : 11;
+	} s;
+	struct cvmx_sso_tiaqx_status_s cn73xx;
+	struct cvmx_sso_tiaqx_status_s cn78xx;
+	struct cvmx_sso_tiaqx_status_s cn78xxp1;
+	struct cvmx_sso_tiaqx_status_s cnf75xx;
+};
+
+typedef union cvmx_sso_tiaqx_status cvmx_sso_tiaqx_status_t;
+
+/**
+ * cvmx_sso_toaq#_status
+ *
+ * Returns TAQ outbound status indexed by group.
+ *
+ */
+union cvmx_sso_toaqx_status {
+	u64 u64;
+	struct cvmx_sso_toaqx_status_s {
+		u64 reserved_62_63 : 2;
+		u64 ext_vld : 1;
+		u64 partial : 1;
+		u64 wae_tail : 4;
+		u64 reserved_43_55 : 13;
+		u64 cl_used : 11;
+		u64 reserved_23_31 : 9;
+		u64 ent_head : 11;
+		u64 reserved_11_11 : 1;
+		u64 ent_tail : 11;
+	} s;
+	struct cvmx_sso_toaqx_status_s cn73xx;
+	struct cvmx_sso_toaqx_status_s cn78xx;
+	struct cvmx_sso_toaqx_status_s cn78xxp1;
+	struct cvmx_sso_toaqx_status_s cnf75xx;
+};
+
+typedef union cvmx_sso_toaqx_status cvmx_sso_toaqx_status_t;
+
+/**
+ * cvmx_sso_ts_pc
+ *
+ * SSO_TS_PC = SSO Tag Switch Performance Counter
+ *
+ * Counts the number of tag switch requests.
+ * Counter rolls over through zero when max value exceeded.
+ */
+union cvmx_sso_ts_pc {
+	u64 u64;
+	struct cvmx_sso_ts_pc_s {
+		u64 ts_pc : 64;
+	} s;
+	struct cvmx_sso_ts_pc_s cn68xx;
+	struct cvmx_sso_ts_pc_s cn68xxp1;
+};
+
+typedef union cvmx_sso_ts_pc cvmx_sso_ts_pc_t;
+
+/**
+ * cvmx_sso_wa_com_pc
+ *
+ * SSO_WA_COM_PC = SSO Work Add Combined Performance Counter
+ *
+ * Counts the number of add new work requests for all QOS levels.
+ * Counter rolls over through zero when max value exceeded.
+ */
+union cvmx_sso_wa_com_pc {
+	u64 u64;
+	struct cvmx_sso_wa_com_pc_s {
+		u64 wa_pc : 64;
+	} s;
+	struct cvmx_sso_wa_com_pc_s cn68xx;
+	struct cvmx_sso_wa_com_pc_s cn68xxp1;
+};
+
+typedef union cvmx_sso_wa_com_pc cvmx_sso_wa_com_pc_t;
+
+/**
+ * cvmx_sso_wa_pc#
+ *
+ * CSR reserved addresses: (64): 0x4200..0x43f8
+ * CSR align addresses: ===========================================================================================================
+ * SSO_WA_PCX = SSO Work Add Performance Counter
+ *             (one per QOS level)
+ *
+ * Counts the number of add new work requests for each QOS level.
+ * Counter rolls over through zero when max value exceeded.
+ */
+union cvmx_sso_wa_pcx {
+	u64 u64;
+	struct cvmx_sso_wa_pcx_s {
+		u64 wa_pc : 64;
+	} s;
+	struct cvmx_sso_wa_pcx_s cn68xx;
+	struct cvmx_sso_wa_pcx_s cn68xxp1;
+};
+
+typedef union cvmx_sso_wa_pcx cvmx_sso_wa_pcx_t;
+
+/**
+ * cvmx_sso_wq_int
+ *
+ * Note, the old POW offsets ran from 0x0 to 0x3f8, leaving the next available slot at 0x400.
+ * To ensure no overlap, start on 4k boundary: 0x1000.
+ * SSO_WQ_INT = SSO Work Queue Interrupt Register
+ *
+ * Contains the bits (one per group) that set work queue interrupts and are
+ * used to clear these interrupts.  For more information regarding this
+ * register, see the interrupt section of the SSO spec.
+ */
+union cvmx_sso_wq_int {
+	u64 u64;
+	struct cvmx_sso_wq_int_s {
+		u64 wq_int : 64;
+	} s;
+	struct cvmx_sso_wq_int_s cn68xx;
+	struct cvmx_sso_wq_int_s cn68xxp1;
+};
+
+typedef union cvmx_sso_wq_int cvmx_sso_wq_int_t;
+
+/**
+ * cvmx_sso_wq_int_cnt#
+ *
+ * CSR reserved addresses: (64): 0x7200..0x73f8
+ * CSR align addresses: ===========================================================================================================
+ * SSO_WQ_INT_CNTX = SSO Work Queue Interrupt Count Register
+ *                   (one per group)
+ *
+ * Contains a read-only copy of the counts used to trigger work queue
+ * interrupts.  For more information regarding this register, see the interrupt
+ * section.
+ */
+union cvmx_sso_wq_int_cntx {
+	u64 u64;
+	struct cvmx_sso_wq_int_cntx_s {
+		u64 reserved_32_63 : 32;
+		u64 tc_cnt : 4;
+		u64 reserved_26_27 : 2;
+		u64 ds_cnt : 12;
+		u64 reserved_12_13 : 2;
+		u64 iq_cnt : 12;
+	} s;
+	struct cvmx_sso_wq_int_cntx_s cn68xx;
+	struct cvmx_sso_wq_int_cntx_s cn68xxp1;
+};
+
+typedef union cvmx_sso_wq_int_cntx cvmx_sso_wq_int_cntx_t;
+
+/**
+ * cvmx_sso_wq_int_pc
+ *
+ * Contains the threshold value for the work-executable interrupt periodic counter and also a
+ * read-only copy of the periodic counter. For more information on this register, refer to
+ * Interrupts.
+ */
+union cvmx_sso_wq_int_pc {
+	u64 u64;
+	struct cvmx_sso_wq_int_pc_s {
+		u64 reserved_60_63 : 4;
+		u64 pc : 28;
+		u64 reserved_28_31 : 4;
+		u64 pc_thr : 20;
+		u64 reserved_0_7 : 8;
+	} s;
+	struct cvmx_sso_wq_int_pc_s cn68xx;
+	struct cvmx_sso_wq_int_pc_s cn68xxp1;
+	struct cvmx_sso_wq_int_pc_s cn73xx;
+	struct cvmx_sso_wq_int_pc_s cn78xx;
+	struct cvmx_sso_wq_int_pc_s cn78xxp1;
+	struct cvmx_sso_wq_int_pc_s cnf75xx;
+};
+
+typedef union cvmx_sso_wq_int_pc cvmx_sso_wq_int_pc_t;
+
+/**
+ * cvmx_sso_wq_int_thr#
+ *
+ * CSR reserved addresses: (96): 0x6100..0x63f8
+ * CSR align addresses: ===========================================================================================================
+ * SSO_WQ_INT_THR(0..63) = SSO Work Queue Interrupt Threshold Registers
+ *                         (one per group)
+ *
+ * Contains the thresholds for enabling and setting work queue interrupts.  For
+ * more information, see the interrupt section.
+ *
+ * Note: Up to 16 of the SSO's internal storage buffers can be allocated
+ * for hardware use and are therefore not available for incoming work queue
+ * entries.  Additionally, any WS that is not in the EMPTY state consumes a
+ * buffer.  Thus in a 32 PP system, it is not advisable to set either IQ_THR or
+ * DS_THR to greater than 2048 - 16 - 32*2 = 1968.  Doing so may prevent the
+ * interrupt from ever triggering.
+ *
+ * Priorities for QOS levels 0..7
+ */
+union cvmx_sso_wq_int_thrx {
+	u64 u64;
+	struct cvmx_sso_wq_int_thrx_s {
+		u64 reserved_33_63 : 31;
+		u64 tc_en : 1;
+		u64 tc_thr : 4;
+		u64 reserved_26_27 : 2;
+		u64 ds_thr : 12;
+		u64 reserved_12_13 : 2;
+		u64 iq_thr : 12;
+	} s;
+	struct cvmx_sso_wq_int_thrx_s cn68xx;
+	struct cvmx_sso_wq_int_thrx_s cn68xxp1;
+};
+
+typedef union cvmx_sso_wq_int_thrx cvmx_sso_wq_int_thrx_t;
+
+/**
+ * cvmx_sso_wq_iq_dis
+ *
+ * CSR reserved addresses: (1): 0x1008..0x1008
+ * SSO_WQ_IQ_DIS = SSO Input Queue Interrupt Temporary Disable Mask
+ *
+ * Contains the input queue interrupt temporary disable bits (one per group).
+ * For more information regarding this register, see the interrupt section.
+ */
+union cvmx_sso_wq_iq_dis {
+	u64 u64;
+	struct cvmx_sso_wq_iq_dis_s {
+		u64 iq_dis : 64;
+	} s;
+	struct cvmx_sso_wq_iq_dis_s cn68xx;
+	struct cvmx_sso_wq_iq_dis_s cn68xxp1;
+};
+
+typedef union cvmx_sso_wq_iq_dis cvmx_sso_wq_iq_dis_t;
+
+/**
+ * cvmx_sso_ws_cfg
+ *
+ * This register contains various SSO work-slot configuration bits.
+ *
+ */
+union cvmx_sso_ws_cfg {
+	u64 u64;
+	struct cvmx_sso_ws_cfg_s {
+		u64 reserved_56_63 : 8;
+		u64 ocla_bp : 8;
+		u64 reserved_7_47 : 41;
+		u64 aw_clk_dis : 1;
+		u64 gw_clk_dis : 1;
+		u64 disable_pw : 1;
+		u64 arbc_step_en : 1;
+		u64 ncbo_step_en : 1;
+		u64 soc_ccam_dis : 1;
+		u64 sso_cclk_dis : 1;
+	} s;
+	struct cvmx_sso_ws_cfg_s cn73xx;
+	struct cvmx_sso_ws_cfg_cn78xx {
+		u64 reserved_56_63 : 8;
+		u64 ocla_bp : 8;
+		u64 reserved_5_47 : 43;
+		u64 disable_pw : 1;
+		u64 arbc_step_en : 1;
+		u64 ncbo_step_en : 1;
+		u64 soc_ccam_dis : 1;
+		u64 sso_cclk_dis : 1;
+	} cn78xx;
+	struct cvmx_sso_ws_cfg_cn78xx cn78xxp1;
+	struct cvmx_sso_ws_cfg_s cnf75xx;
+};
+
+typedef union cvmx_sso_ws_cfg cvmx_sso_ws_cfg_t;
+
+/**
+ * cvmx_sso_ws_eco
+ */
+union cvmx_sso_ws_eco {
+	u64 u64;
+	struct cvmx_sso_ws_eco_s {
+		u64 reserved_8_63 : 56;
+		u64 eco_rw : 8;
+	} s;
+	struct cvmx_sso_ws_eco_s cn73xx;
+	struct cvmx_sso_ws_eco_s cnf75xx;
+};
+
+typedef union cvmx_sso_ws_eco cvmx_sso_ws_eco_t;
+
+/**
+ * cvmx_sso_ws_pc#
+ *
+ * CSR reserved addresses: (225): 0x3100..0x3800
+ * CSR align addresses: ===========================================================================================================
+ * SSO_WS_PCX = SSO Work Schedule Performance Counter
+ *              (one per group)
+ *
+ * Counts the number of work schedules for each group.
+ * Counter rolls over through zero when max value exceeded.
+ */
+union cvmx_sso_ws_pcx {
+	u64 u64;
+	struct cvmx_sso_ws_pcx_s {
+		u64 ws_pc : 64;
+	} s;
+	struct cvmx_sso_ws_pcx_s cn68xx;
+	struct cvmx_sso_ws_pcx_s cn68xxp1;
+};
+
+typedef union cvmx_sso_ws_pcx cvmx_sso_ws_pcx_t;
+
+/**
+ * cvmx_sso_xaq#_head_next
+ *
+ * These registers contain the pointer to the next buffer to become the head when the final cache
+ * line in this buffer is read.
+ */
+union cvmx_sso_xaqx_head_next {
+	u64 u64;
+	struct cvmx_sso_xaqx_head_next_s {
+		u64 reserved_42_63 : 22;
+		u64 ptr : 35;
+		u64 reserved_0_6 : 7;
+	} s;
+	struct cvmx_sso_xaqx_head_next_s cn73xx;
+	struct cvmx_sso_xaqx_head_next_s cn78xx;
+	struct cvmx_sso_xaqx_head_next_s cn78xxp1;
+	struct cvmx_sso_xaqx_head_next_s cnf75xx;
+};
+
+typedef union cvmx_sso_xaqx_head_next cvmx_sso_xaqx_head_next_t;
+
+/**
+ * cvmx_sso_xaq#_head_ptr
+ *
+ * These registers contain the pointer to the first entry of the external linked list(s) for a
+ * particular group. Software must initialize the external linked list(s) by programming
+ * SSO_XAQ()_HEAD_PTR, SSO_XAQ()_HEAD_NEXT, SSO_XAQ()_TAIL_PTR and
+ * SSO_XAQ()_TAIL_NEXT to identical values.
+ */
+union cvmx_sso_xaqx_head_ptr {
+	u64 u64;
+	struct cvmx_sso_xaqx_head_ptr_s {
+		u64 reserved_42_63 : 22;
+		u64 ptr : 35;
+		u64 reserved_5_6 : 2;
+		u64 cl : 5;
+	} s;
+	struct cvmx_sso_xaqx_head_ptr_s cn73xx;
+	struct cvmx_sso_xaqx_head_ptr_s cn78xx;
+	struct cvmx_sso_xaqx_head_ptr_s cn78xxp1;
+	struct cvmx_sso_xaqx_head_ptr_s cnf75xx;
+};
+
+typedef union cvmx_sso_xaqx_head_ptr cvmx_sso_xaqx_head_ptr_t;
+
+/**
+ * cvmx_sso_xaq#_tail_next
+ *
+ * These registers contain the pointer to the next buffer to become the tail when the final cache
+ * line in this buffer is written.  Register fields are identical to those in
+ * SSO_XAQ()_HEAD_NEXT above.
+ */
+union cvmx_sso_xaqx_tail_next {
+	u64 u64;
+	struct cvmx_sso_xaqx_tail_next_s {
+		u64 reserved_42_63 : 22;
+		u64 ptr : 35;
+		u64 reserved_0_6 : 7;
+	} s;
+	struct cvmx_sso_xaqx_tail_next_s cn73xx;
+	struct cvmx_sso_xaqx_tail_next_s cn78xx;
+	struct cvmx_sso_xaqx_tail_next_s cn78xxp1;
+	struct cvmx_sso_xaqx_tail_next_s cnf75xx;
+};
+
+typedef union cvmx_sso_xaqx_tail_next cvmx_sso_xaqx_tail_next_t;
+
+/**
+ * cvmx_sso_xaq#_tail_ptr
+ *
+ * These registers contain the pointer to the last entry of the external linked list(s) for a
+ * particular group.  Register fields are identical to those in SSO_XAQ()_HEAD_PTR above.
+ * Software must initialize the external linked list(s) by programming
+ * SSO_XAQ()_HEAD_PTR, SSO_XAQ()_HEAD_NEXT, SSO_XAQ()_TAIL_PTR and
+ * SSO_XAQ()_TAIL_NEXT to identical values.
+ */
+union cvmx_sso_xaqx_tail_ptr {
+	u64 u64;
+	struct cvmx_sso_xaqx_tail_ptr_s {
+		u64 reserved_42_63 : 22;
+		u64 ptr : 35;
+		u64 reserved_5_6 : 2;
+		u64 cl : 5;
+	} s;
+	struct cvmx_sso_xaqx_tail_ptr_s cn73xx;
+	struct cvmx_sso_xaqx_tail_ptr_s cn78xx;
+	struct cvmx_sso_xaqx_tail_ptr_s cn78xxp1;
+	struct cvmx_sso_xaqx_tail_ptr_s cnf75xx;
+};
+
+typedef union cvmx_sso_xaqx_tail_ptr cvmx_sso_xaqx_tail_ptr_t;
+
+/**
+ * cvmx_sso_xaq_aura
+ */
+union cvmx_sso_xaq_aura {
+	u64 u64;
+	struct cvmx_sso_xaq_aura_s {
+		u64 reserved_12_63 : 52;
+		u64 node : 2;
+		u64 laura : 10;
+	} s;
+	struct cvmx_sso_xaq_aura_s cn73xx;
+	struct cvmx_sso_xaq_aura_s cn78xx;
+	struct cvmx_sso_xaq_aura_s cn78xxp1;
+	struct cvmx_sso_xaq_aura_s cnf75xx;
+};
+
+typedef union cvmx_sso_xaq_aura cvmx_sso_xaq_aura_t;
+
+/**
+ * cvmx_sso_xaq_latency_pc
+ */
+union cvmx_sso_xaq_latency_pc {
+	u64 u64;
+	struct cvmx_sso_xaq_latency_pc_s {
+		u64 count : 64;
+	} s;
+	struct cvmx_sso_xaq_latency_pc_s cn73xx;
+	struct cvmx_sso_xaq_latency_pc_s cn78xx;
+	struct cvmx_sso_xaq_latency_pc_s cn78xxp1;
+	struct cvmx_sso_xaq_latency_pc_s cnf75xx;
+};
+
+typedef union cvmx_sso_xaq_latency_pc cvmx_sso_xaq_latency_pc_t;
+
+/**
+ * cvmx_sso_xaq_req_pc
+ */
+union cvmx_sso_xaq_req_pc {
+	u64 u64;
+	struct cvmx_sso_xaq_req_pc_s {
+		u64 count : 64;
+	} s;
+	struct cvmx_sso_xaq_req_pc_s cn73xx;
+	struct cvmx_sso_xaq_req_pc_s cn78xx;
+	struct cvmx_sso_xaq_req_pc_s cn78xxp1;
+	struct cvmx_sso_xaq_req_pc_s cnf75xx;
+};
+
+typedef union cvmx_sso_xaq_req_pc cvmx_sso_xaq_req_pc_t;
+
+#endif
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-wqe.h b/arch/mips/mach-octeon/include/mach/cvmx-wqe.h
new file mode 100644
index 0000000..c9e3c83
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/cvmx-wqe.h
@@ -0,0 +1,1462 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * This header file defines the work queue entry (wqe) data structure.
+ * Since this is a commonly used structure that depends on structures
+ * from several hardware blocks, those definitions have been placed
+ * in this file to create a single point of definition of the wqe
+ * format.
+ * Data structures are still named according to the block that they
+ * relate to.
+ */
+
+#ifndef __CVMX_WQE_H__
+#define __CVMX_WQE_H__
+
+#include "cvmx-packet.h"
+#include "cvmx-csr-enums.h"
+#include "cvmx-pki-defs.h"
+#include "cvmx-pip-defs.h"
+#include "octeon-feature.h"
+
+#define OCT_TAG_TYPE_STRING(x)						\
+	(((x) == CVMX_POW_TAG_TYPE_ORDERED) ?				\
+	 "ORDERED" :							\
+	 (((x) == CVMX_POW_TAG_TYPE_ATOMIC) ?				\
+	  "ATOMIC" :							\
+	  (((x) == CVMX_POW_TAG_TYPE_NULL) ? "NULL" : "NULL_NULL")))
+
+/* Error levels in WQE WORD2 (ERRLEV).*/
+#define PKI_ERRLEV_E__RE_M 0x0
+#define PKI_ERRLEV_E__LA_M 0x1
+#define PKI_ERRLEV_E__LB_M 0x2
+#define PKI_ERRLEV_E__LC_M 0x3
+#define PKI_ERRLEV_E__LD_M 0x4
+#define PKI_ERRLEV_E__LE_M 0x5
+#define PKI_ERRLEV_E__LF_M 0x6
+#define PKI_ERRLEV_E__LG_M 0x7
+
+enum cvmx_pki_errlevel {
+	CVMX_PKI_ERRLEV_E_RE = PKI_ERRLEV_E__RE_M,
+	CVMX_PKI_ERRLEV_E_LA = PKI_ERRLEV_E__LA_M,
+	CVMX_PKI_ERRLEV_E_LB = PKI_ERRLEV_E__LB_M,
+	CVMX_PKI_ERRLEV_E_LC = PKI_ERRLEV_E__LC_M,
+	CVMX_PKI_ERRLEV_E_LD = PKI_ERRLEV_E__LD_M,
+	CVMX_PKI_ERRLEV_E_LE = PKI_ERRLEV_E__LE_M,
+	CVMX_PKI_ERRLEV_E_LF = PKI_ERRLEV_E__LF_M,
+	CVMX_PKI_ERRLEV_E_LG = PKI_ERRLEV_E__LG_M
+};
+
+#define CVMX_PKI_ERRLEV_MAX BIT(3) /* The size of WORD2:ERRLEV field.*/
+
+/* Error code in WQE WORD2 (OPCODE).*/
+#define CVMX_PKI_OPCODE_RE_NONE	      0x0
+#define CVMX_PKI_OPCODE_RE_PARTIAL    0x1
+#define CVMX_PKI_OPCODE_RE_JABBER     0x2
+#define CVMX_PKI_OPCODE_RE_FCS	      0x7
+#define CVMX_PKI_OPCODE_RE_FCS_RCV    0x8
+#define CVMX_PKI_OPCODE_RE_TERMINATE  0x9
+#define CVMX_PKI_OPCODE_RE_RX_CTL     0xb
+#define CVMX_PKI_OPCODE_RE_SKIP	      0xc
+#define CVMX_PKI_OPCODE_RE_DMAPKT     0xf
+#define CVMX_PKI_OPCODE_RE_PKIPAR     0x13
+#define CVMX_PKI_OPCODE_RE_PKIPCAM    0x14
+#define CVMX_PKI_OPCODE_RE_MEMOUT     0x15
+#define CVMX_PKI_OPCODE_RE_BUFS_OFLOW 0x16
+#define CVMX_PKI_OPCODE_L2_FRAGMENT   0x20
+#define CVMX_PKI_OPCODE_L2_OVERRUN    0x21
+#define CVMX_PKI_OPCODE_L2_PFCS	      0x22
+#define CVMX_PKI_OPCODE_L2_PUNY	      0x23
+#define CVMX_PKI_OPCODE_L2_MAL	      0x24
+#define CVMX_PKI_OPCODE_L2_OVERSIZE   0x25
+#define CVMX_PKI_OPCODE_L2_UNDERSIZE  0x26
+#define CVMX_PKI_OPCODE_L2_LENMISM    0x27
+#define CVMX_PKI_OPCODE_IP_NOT	      0x41
+#define CVMX_PKI_OPCODE_IP_CHK	      0x42
+#define CVMX_PKI_OPCODE_IP_MAL	      0x43
+#define CVMX_PKI_OPCODE_IP_MALD	      0x44
+#define CVMX_PKI_OPCODE_IP_HOP	      0x45
+#define CVMX_PKI_OPCODE_L4_MAL	      0x61
+#define CVMX_PKI_OPCODE_L4_CHK	      0x62
+#define CVMX_PKI_OPCODE_L4_LEN	      0x63
+#define CVMX_PKI_OPCODE_L4_PORT	      0x64
+#define CVMX_PKI_OPCODE_TCP_FLAG      0x65
+
+#define CVMX_PKI_OPCODE_MAX BIT(8) /* The size of WORD2:OPCODE field.*/
+
+/* Layer types in pki */
+#define CVMX_PKI_LTYPE_E_NONE_M	      0x0
+#define CVMX_PKI_LTYPE_E_ENET_M	      0x1
+#define CVMX_PKI_LTYPE_E_VLAN_M	      0x2
+#define CVMX_PKI_LTYPE_E_SNAP_PAYLD_M 0x5
+#define CVMX_PKI_LTYPE_E_ARP_M	      0x6
+#define CVMX_PKI_LTYPE_E_RARP_M	      0x7
+#define CVMX_PKI_LTYPE_E_IP4_M	      0x8
+#define CVMX_PKI_LTYPE_E_IP4_OPT_M    0x9
+#define CVMX_PKI_LTYPE_E_IP6_M	      0xA
+#define CVMX_PKI_LTYPE_E_IP6_OPT_M    0xB
+#define CVMX_PKI_LTYPE_E_IPSEC_ESP_M  0xC
+#define CVMX_PKI_LTYPE_E_IPFRAG_M     0xD
+#define CVMX_PKI_LTYPE_E_IPCOMP_M     0xE
+#define CVMX_PKI_LTYPE_E_TCP_M	      0x10
+#define CVMX_PKI_LTYPE_E_UDP_M	      0x11
+#define CVMX_PKI_LTYPE_E_SCTP_M	      0x12
+#define CVMX_PKI_LTYPE_E_UDP_VXLAN_M  0x13
+#define CVMX_PKI_LTYPE_E_GRE_M	      0x14
+#define CVMX_PKI_LTYPE_E_NVGRE_M      0x15
+#define CVMX_PKI_LTYPE_E_GTP_M	      0x16
+#define CVMX_PKI_LTYPE_E_SW28_M	      0x1C
+#define CVMX_PKI_LTYPE_E_SW29_M	      0x1D
+#define CVMX_PKI_LTYPE_E_SW30_M	      0x1E
+#define CVMX_PKI_LTYPE_E_SW31_M	      0x1F
+
+enum cvmx_pki_layer_type {
+	CVMX_PKI_LTYPE_E_NONE = CVMX_PKI_LTYPE_E_NONE_M,
+	CVMX_PKI_LTYPE_E_ENET = CVMX_PKI_LTYPE_E_ENET_M,
+	CVMX_PKI_LTYPE_E_VLAN = CVMX_PKI_LTYPE_E_VLAN_M,
+	CVMX_PKI_LTYPE_E_SNAP_PAYLD = CVMX_PKI_LTYPE_E_SNAP_PAYLD_M,
+	CVMX_PKI_LTYPE_E_ARP = CVMX_PKI_LTYPE_E_ARP_M,
+	CVMX_PKI_LTYPE_E_RARP = CVMX_PKI_LTYPE_E_RARP_M,
+	CVMX_PKI_LTYPE_E_IP4 = CVMX_PKI_LTYPE_E_IP4_M,
+	CVMX_PKI_LTYPE_E_IP4_OPT = CVMX_PKI_LTYPE_E_IP4_OPT_M,
+	CVMX_PKI_LTYPE_E_IP6 = CVMX_PKI_LTYPE_E_IP6_M,
+	CVMX_PKI_LTYPE_E_IP6_OPT = CVMX_PKI_LTYPE_E_IP6_OPT_M,
+	CVMX_PKI_LTYPE_E_IPSEC_ESP = CVMX_PKI_LTYPE_E_IPSEC_ESP_M,
+	CVMX_PKI_LTYPE_E_IPFRAG = CVMX_PKI_LTYPE_E_IPFRAG_M,
+	CVMX_PKI_LTYPE_E_IPCOMP = CVMX_PKI_LTYPE_E_IPCOMP_M,
+	CVMX_PKI_LTYPE_E_TCP = CVMX_PKI_LTYPE_E_TCP_M,
+	CVMX_PKI_LTYPE_E_UDP = CVMX_PKI_LTYPE_E_UDP_M,
+	CVMX_PKI_LTYPE_E_SCTP = CVMX_PKI_LTYPE_E_SCTP_M,
+	CVMX_PKI_LTYPE_E_UDP_VXLAN = CVMX_PKI_LTYPE_E_UDP_VXLAN_M,
+	CVMX_PKI_LTYPE_E_GRE = CVMX_PKI_LTYPE_E_GRE_M,
+	CVMX_PKI_LTYPE_E_NVGRE = CVMX_PKI_LTYPE_E_NVGRE_M,
+	CVMX_PKI_LTYPE_E_GTP = CVMX_PKI_LTYPE_E_GTP_M,
+	CVMX_PKI_LTYPE_E_SW28 = CVMX_PKI_LTYPE_E_SW28_M,
+	CVMX_PKI_LTYPE_E_SW29 = CVMX_PKI_LTYPE_E_SW29_M,
+	CVMX_PKI_LTYPE_E_SW30 = CVMX_PKI_LTYPE_E_SW30_M,
+	CVMX_PKI_LTYPE_E_SW31 = CVMX_PKI_LTYPE_E_SW31_M,
+	CVMX_PKI_LTYPE_E_MAX = CVMX_PKI_LTYPE_E_SW31
+};
+
+typedef union {
+	u64 u64;
+	struct {
+		u64 ptr_vlan : 8;
+		u64 ptr_layer_g : 8;
+		u64 ptr_layer_f : 8;
+		u64 ptr_layer_e : 8;
+		u64 ptr_layer_d : 8;
+		u64 ptr_layer_c : 8;
+		u64 ptr_layer_b : 8;
+		u64 ptr_layer_a : 8;
+	};
+} cvmx_pki_wqe_word4_t;
+
+/**
+ * HW decode / err_code in work queue entry
+ */
+typedef union {
+	u64 u64;
+	struct {
+		u64 bufs : 8;
+		u64 ip_offset : 8;
+		u64 vlan_valid : 1;
+		u64 vlan_stacked : 1;
+		u64 unassigned : 1;
+		u64 vlan_cfi : 1;
+		u64 vlan_id : 12;
+		u64 varies : 12;
+		u64 dec_ipcomp : 1;
+		u64 tcp_or_udp : 1;
+		u64 dec_ipsec : 1;
+		u64 is_v6 : 1;
+		u64 software : 1;
+		u64 L4_error : 1;
+		u64 is_frag : 1;
+		u64 IP_exc : 1;
+		u64 is_bcast : 1;
+		u64 is_mcast : 1;
+		u64 not_IP : 1;
+		u64 rcv_error : 1;
+		u64 err_code : 8;
+	} s;
+	struct {
+		u64 bufs : 8;
+		u64 ip_offset : 8;
+		u64 vlan_valid : 1;
+		u64 vlan_stacked : 1;
+		u64 unassigned : 1;
+		u64 vlan_cfi : 1;
+		u64 vlan_id : 12;
+		u64 port : 12;
+		u64 dec_ipcomp : 1;
+		u64 tcp_or_udp : 1;
+		u64 dec_ipsec : 1;
+		u64 is_v6 : 1;
+		u64 software : 1;
+		u64 L4_error : 1;
+		u64 is_frag : 1;
+		u64 IP_exc : 1;
+		u64 is_bcast : 1;
+		u64 is_mcast : 1;
+		u64 not_IP : 1;
+		u64 rcv_error : 1;
+		u64 err_code : 8;
+	} s_cn68xx;
+	struct {
+		u64 bufs : 8;
+		u64 ip_offset : 8;
+		u64 vlan_valid : 1;
+		u64 vlan_stacked : 1;
+		u64 unassigned : 1;
+		u64 vlan_cfi : 1;
+		u64 vlan_id : 12;
+		u64 pr : 4;
+		u64 unassigned2a : 4;
+		u64 unassigned2 : 4;
+		u64 dec_ipcomp : 1;
+		u64 tcp_or_udp : 1;
+		u64 dec_ipsec : 1;
+		u64 is_v6 : 1;
+		u64 software : 1;
+		u64 L4_error : 1;
+		u64 is_frag : 1;
+		u64 IP_exc : 1;
+		u64 is_bcast : 1;
+		u64 is_mcast : 1;
+		u64 not_IP : 1;
+		u64 rcv_error : 1;
+		u64 err_code : 8;
+	} s_cn38xx;
+	struct {
+		u64 unused1 : 16;
+		u64 vlan : 16;
+		u64 unused2 : 32;
+	} svlan;
+	struct {
+		u64 bufs : 8;
+		u64 unused : 8;
+		u64 vlan_valid : 1;
+		u64 vlan_stacked : 1;
+		u64 unassigned : 1;
+		u64 vlan_cfi : 1;
+		u64 vlan_id : 12;
+		u64 varies : 12;
+		u64 unassigned2 : 4;
+		u64 software : 1;
+		u64 unassigned3 : 1;
+		u64 is_rarp : 1;
+		u64 is_arp : 1;
+		u64 is_bcast : 1;
+		u64 is_mcast : 1;
+		u64 not_IP : 1;
+		u64 rcv_error : 1;
+		u64 err_code : 8;
+	} snoip;
+	struct {
+		u64 bufs : 8;
+		u64 unused : 8;
+		u64 vlan_valid : 1;
+		u64 vlan_stacked : 1;
+		u64 unassigned : 1;
+		u64 vlan_cfi : 1;
+		u64 vlan_id : 12;
+		u64 port : 12;
+		u64 unassigned2 : 4;
+		u64 software : 1;
+		u64 unassigned3 : 1;
+		u64 is_rarp : 1;
+		u64 is_arp : 1;
+		u64 is_bcast : 1;
+		u64 is_mcast : 1;
+		u64 not_IP : 1;
+		u64 rcv_error : 1;
+		u64 err_code : 8;
+	} snoip_cn68xx;
+	struct {
+		u64 bufs : 8;
+		u64 unused : 8;
+		u64 vlan_valid : 1;
+		u64 vlan_stacked : 1;
+		u64 unassigned : 1;
+		u64 vlan_cfi : 1;
+		u64 vlan_id : 12;
+		u64 pr : 4;
+		u64 unassigned2a : 8;
+		u64 unassigned2 : 4;
+		u64 software : 1;
+		u64 unassigned3 : 1;
+		u64 is_rarp : 1;
+		u64 is_arp : 1;
+		u64 is_bcast : 1;
+		u64 is_mcast : 1;
+		u64 not_IP : 1;
+		u64 rcv_error : 1;
+		u64 err_code : 8;
+	} snoip_cn38xx;
+} cvmx_pip_wqe_word2_t;
+
+typedef union {
+	u64 u64;
+	struct {
+		u64 software : 1;
+		u64 lg_hdr_type : 5;
+		u64 lf_hdr_type : 5;
+		u64 le_hdr_type : 5;
+		u64 ld_hdr_type : 5;
+		u64 lc_hdr_type : 5;
+		u64 lb_hdr_type : 5;
+		u64 is_la_ether : 1;
+		u64 rsvd_0 : 8;
+		u64 vlan_valid : 1;
+		u64 vlan_stacked : 1;
+		u64 stat_inc : 1;
+		u64 pcam_flag4 : 1;
+		u64 pcam_flag3 : 1;
+		u64 pcam_flag2 : 1;
+		u64 pcam_flag1 : 1;
+		u64 is_frag : 1;
+		u64 is_l3_bcast : 1;
+		u64 is_l3_mcast : 1;
+		u64 is_l2_bcast : 1;
+		u64 is_l2_mcast : 1;
+		u64 is_raw : 1;
+		u64 err_level : 3;
+		u64 err_code : 8;
+	};
+} cvmx_pki_wqe_word2_t;
+
+typedef union {
+	u64 u64;
+	cvmx_pki_wqe_word2_t pki;
+	cvmx_pip_wqe_word2_t pip;
+} cvmx_wqe_word2_t;
+
+typedef union {
+	u64 u64;
+	struct {
+		u16 hw_chksum;
+		u8 unused;
+		u64 next_ptr : 40;
+	} cn38xx;
+	struct {
+		u64 l4ptr : 8;	  /* 56..63 */
+		u64 unused0 : 8;  /* 48..55 */
+		u64 l3ptr : 8;	  /* 40..47 */
+		u64 l2ptr : 8;	  /* 32..39 */
+		u64 unused1 : 18; /* 14..31 */
+		u64 bpid : 6;	  /* 8..13 */
+		u64 unused2 : 2;  /* 6..7 */
+		u64 pknd : 6;	  /* 0..5 */
+	} cn68xx;
+} cvmx_pip_wqe_word0_t;
+
+typedef union {
+	u64 u64;
+	struct {
+		u64 rsvd_0 : 4;
+		u64 aura : 12;
+		u64 rsvd_1 : 1;
+		u64 apad : 3;
+		u64 channel : 12;
+		u64 bufs : 8;
+		u64 style : 8;
+		u64 rsvd_2 : 10;
+		u64 pknd : 6;
+	};
+} cvmx_pki_wqe_word0_t;
+
+/* Use reserved bit, set by HW to 0, to indicate buf_ptr legacy translation*/
+#define pki_wqe_translated word0.rsvd_1
+
+typedef union {
+	u64 u64;
+	cvmx_pip_wqe_word0_t pip;
+	cvmx_pki_wqe_word0_t pki;
+	struct {
+		u64 unused : 24;
+		u64 next_ptr : 40; /* On cn68xx this is unused as well */
+	} raw;
+} cvmx_wqe_word0_t;
+
+typedef union {
+	u64 u64;
+	struct {
+		u64 len : 16;
+		u64 rsvd_0 : 2;
+		u64 rsvd_1 : 2;
+		u64 grp : 10;
+		cvmx_pow_tag_type_t tag_type : 2;
+		u64 tag : 32;
+	};
+} cvmx_pki_wqe_word1_t;
+
+#define pki_errata20776 word1.rsvd_0
+
+typedef union {
+	u64 u64;
+	struct {
+		u64 len : 16;
+		u64 varies : 14;
+		cvmx_pow_tag_type_t tag_type : 2;
+		u64 tag : 32;
+	};
+	cvmx_pki_wqe_word1_t cn78xx;
+	struct {
+		u64 len : 16;
+		u64 zero_0 : 1;
+		u64 qos : 3;
+		u64 zero_1 : 1;
+		u64 grp : 6;
+		u64 zero_2 : 3;
+		cvmx_pow_tag_type_t tag_type : 2;
+		u64 tag : 32;
+	} cn68xx;
+	struct {
+		u64 len : 16;
+		u64 ipprt : 6;
+		u64 qos : 3;
+		u64 grp : 4;
+		u64 zero_2 : 1;
+		cvmx_pow_tag_type_t tag_type : 2;
+		u64 tag : 32;
+	} cn38xx;
+} cvmx_wqe_word1_t;
+
+typedef union {
+	u64 u64;
+	struct {
+		u64 rsvd_0 : 8;
+		u64 hwerr : 8;
+		u64 rsvd_1 : 24;
+		u64 sqid : 8;
+		u64 rsvd_2 : 4;
+		u64 vfnum : 12;
+	};
+} cvmx_wqe_word3_t;
+
+typedef union {
+	u64 u64;
+	struct {
+		u64 rsvd_0 : 21;
+		u64 sqfc : 11;
+		u64 rsvd_1 : 5;
+		u64 sqtail : 11;
+		u64 rsvd_2 : 3;
+		u64 sqhead : 13;
+	};
+} cvmx_wqe_word4_t;
+
+/**
+ * Work queue entry format.
+ * Must be 8-byte aligned.
+ */
+typedef struct cvmx_wqe_s {
+	/*-------------------------------------------------------------------*/
+	/* WORD 0                                                            */
+	/*-------------------------------------------------------------------*/
+	/* HW WRITE: the following 64 bits are filled by HW when a packet
+	 * arrives.
+	 */
+	cvmx_wqe_word0_t word0;
+
+	/*-------------------------------------------------------------------*/
+	/* WORD 1                                                            */
+	/*-------------------------------------------------------------------*/
+	/* HW WRITE: the following 64 bits are filled by HW when a packet
+	 * arrives.
+	 */
+	cvmx_wqe_word1_t word1;
+
+	/*-------------------------------------------------------------------*/
+	/* WORD 2                                                            */
+	/*-------------------------------------------------------------------*/
+	/* HW WRITE: the following 64-bits are filled in by hardware when a
+	 * packet arrives. This indicates a variety of status and error
+	 *conditions.
+	 */
+	cvmx_pip_wqe_word2_t word2;
+
+	/* Pointer to the first segment of the packet. */
+	cvmx_buf_ptr_t packet_ptr;
+
+	/* HW WRITE: OCTEON will fill in a programmable amount from the packet,
+	 * up to (at most, but perhaps less) the amount needed to fill the work
+	 * queue entry to 128 bytes. If the packet is recognized to be IP, the
+	 * hardware starts (except that the IPv4 header is padded for
+	 * appropriate alignment) writing here where the IP header starts.
+	 * If the packet is not recognized to be IP, the hardware starts
+	 * writing the beginning of the packet here.
+	 */
+	u8 packet_data[96];
+
+	/* If desired, SW can make the work Q entry any length. For the purposes
+	 * of discussion here, Assume 128B always, as this is all that the hardware
+	 * deals with.
+	 */
+} CVMX_CACHE_LINE_ALIGNED cvmx_wqe_t;
+
+/**
+ * Work queue entry format for NQM
+ * Must be 8-byte aligned
+ */
+typedef struct cvmx_wqe_nqm_s {
+	/*-------------------------------------------------------------------*/
+	/* WORD 0                                                            */
+	/*-------------------------------------------------------------------*/
+	/* HW WRITE: the following 64 bits are filled by HW when a packet
+	 * arrives.
+	 */
+	cvmx_wqe_word0_t word0;
+
+	/*-------------------------------------------------------------------*/
+	/* WORD 1                                                            */
+	/*-------------------------------------------------------------------*/
+	/* HW WRITE: the following 64 bits are filled by HW when a packet
+	 * arrives.
+	 */
+	cvmx_wqe_word1_t word1;
+
+	/*-------------------------------------------------------------------*/
+	/* WORD 2                                                            */
+	/*-------------------------------------------------------------------*/
+	/* Reserved */
+	u64 word2;
+
+	/*-------------------------------------------------------------------*/
+	/* WORD 3                                                            */
+	/*-------------------------------------------------------------------*/
+	/* NVMe specific information.*/
+	cvmx_wqe_word3_t word3;
+
+	/*-------------------------------------------------------------------*/
+	/* WORD 4                                                            */
+	/*-------------------------------------------------------------------*/
+	/* NVMe specific information.*/
+	cvmx_wqe_word4_t word4;
+
+	/* HW WRITE: OCTEON will fill in a programmable amount from the packet,
+	 * up to (at most, but perhaps less) the amount needed to fill the work
+	 * queue entry to 128 bytes. If the packet is recognized to be IP, the
+	 * hardware starts (except that the IPv4 header is padded for
+	 * appropriate alignment) writing here where the IP header starts.
+	 * If the packet is not recognized to be IP, the hardware starts
+	 * writing the beginning of the packet here.
+	 */
+	u8 packet_data[88];
+
+	/* If desired, SW can make the work Q entry any length.
+	 * For the purposes of discussion here, assume 128B always, as this is
+	 * all that the hardware deals with.
+	 */
+} CVMX_CACHE_LINE_ALIGNED cvmx_wqe_nqm_t;
+
+/**
+ * Work queue entry format for 78XX.
+ * In 78XX packet data always resides in WQE buffer unless option
+ * DIS_WQ_DAT=1 in PKI_STYLE_BUF, which causes packet data to use separate buffer.
+ *
+ * Must be 8-byte aligned.
+ */
+typedef struct {
+	/*-------------------------------------------------------------------*/
+	/* WORD 0                                                            */
+	/*-------------------------------------------------------------------*/
+	/* HW WRITE: the following 64 bits are filled by HW when a packet
+	 * arrives.
+	 */
+	cvmx_pki_wqe_word0_t word0;
+
+	/*-------------------------------------------------------------------*/
+	/* WORD 1                                                            */
+	/*-------------------------------------------------------------------*/
+	/* HW WRITE: the following 64 bits are filled by HW when a packet
+	 * arrives.
+	 */
+	cvmx_pki_wqe_word1_t word1;
+
+	/*-------------------------------------------------------------------*/
+	/* WORD 2                                                            */
+	/*-------------------------------------------------------------------*/
+	/* HW WRITE: the following 64-bits are filled in by hardware when a
+	 * packet arrives. This indicates a variety of status and error
+	 * conditions.
+	 */
+	cvmx_pki_wqe_word2_t word2;
+
+	/*-------------------------------------------------------------------*/
+	/* WORD 3                                                            */
+	/*-------------------------------------------------------------------*/
+	/* Pointer to the first segment of the packet.*/
+	cvmx_buf_ptr_pki_t packet_ptr;
+
+	/*-------------------------------------------------------------------*/
+	/* WORD 4                                                            */
+	/*-------------------------------------------------------------------*/
+	/* HW WRITE: the following 64-bits are filled in by hardware when a
+	 * packet arrives contains a byte pointer to the start of Layer
+	 * A/B/C/D/E/F/G relative of start of packet.
+	 */
+	cvmx_pki_wqe_word4_t word4;
+
+	/*-------------------------------------------------------------------*/
+	/* WORDs 5/6/7 may be extended there, if WQE_HSZ is set.             */
+	/*-------------------------------------------------------------------*/
+	u64 wqe_data[11];
+
+} CVMX_CACHE_LINE_ALIGNED cvmx_wqe_78xx_t;
+
+/* Node LS-bit position in the WQE[grp] or PKI_QPG_TBL[grp_ok].*/
+#define CVMX_WQE_GRP_NODE_SHIFT 8
+
+/*
+ * This is an accessor function into the WQE that retreives the
+ * ingress port number, which can also be used as a destination
+ * port number for the same port.
+ *
+ * @param work - Work Queue Entrey pointer
+ * @returns returns the normalized port number, also known as "ipd" port
+ */
+static inline int cvmx_wqe_get_port(cvmx_wqe_t *work)
+{
+	int port;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		/* In 78xx wqe entry has channel number not port*/
+		port = work->word0.pki.channel;
+		/* For BGX interfaces (0x800 - 0xdff) the 4 LSBs indicate
+		 * the PFC channel, must be cleared to normalize to "ipd"
+		 */
+		if (port & 0x800)
+			port &= 0xff0;
+		/* Node number is in AURA field, make it part of port # */
+		port |= (work->word0.pki.aura >> 10) << 12;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		port = work->word2.s_cn68xx.port;
+	} else {
+		port = work->word1.cn38xx.ipprt;
+	}
+
+	return port;
+}
+
+static inline void cvmx_wqe_set_port(cvmx_wqe_t *work, int port)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		work->word0.pki.channel = port;
+	else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE))
+		work->word2.s_cn68xx.port = port;
+	else
+		work->word1.cn38xx.ipprt = port;
+}
+
+static inline int cvmx_wqe_get_grp(cvmx_wqe_t *work)
+{
+	int grp;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		/* legacy: GRP[0..2] :=QOS */
+		grp = (0xff & work->word1.cn78xx.grp) >> 3;
+	else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE))
+		grp = work->word1.cn68xx.grp;
+	else
+		grp = work->word1.cn38xx.grp;
+
+	return grp;
+}
+
+static inline void cvmx_wqe_set_xgrp(cvmx_wqe_t *work, int grp)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		work->word1.cn78xx.grp = grp;
+	else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE))
+		work->word1.cn68xx.grp = grp;
+	else
+		work->word1.cn38xx.grp = grp;
+}
+
+static inline int cvmx_wqe_get_xgrp(cvmx_wqe_t *work)
+{
+	int grp;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		grp = work->word1.cn78xx.grp;
+	else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE))
+		grp = work->word1.cn68xx.grp;
+	else
+		grp = work->word1.cn38xx.grp;
+
+	return grp;
+}
+
+static inline void cvmx_wqe_set_grp(cvmx_wqe_t *work, int grp)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		unsigned int node = cvmx_get_node_num();
+		/* Legacy: GRP[0..2] :=QOS */
+		work->word1.cn78xx.grp &= 0x7;
+		work->word1.cn78xx.grp |= 0xff & (grp << 3);
+		work->word1.cn78xx.grp |= (node << 8);
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		work->word1.cn68xx.grp = grp;
+	} else {
+		work->word1.cn38xx.grp = grp;
+	}
+}
+
+static inline int cvmx_wqe_get_qos(cvmx_wqe_t *work)
+{
+	int qos;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		/* Legacy: GRP[0..2] :=QOS */
+		qos = work->word1.cn78xx.grp & 0x7;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		qos = work->word1.cn68xx.qos;
+	} else {
+		qos = work->word1.cn38xx.qos;
+	}
+
+	return qos;
+}
+
+static inline void cvmx_wqe_set_qos(cvmx_wqe_t *work, int qos)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		/* legacy: GRP[0..2] :=QOS */
+		work->word1.cn78xx.grp &= ~0x7;
+		work->word1.cn78xx.grp |= qos & 0x7;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		work->word1.cn68xx.qos = qos;
+	} else {
+		work->word1.cn38xx.qos = qos;
+	}
+}
+
+static inline int cvmx_wqe_get_len(cvmx_wqe_t *work)
+{
+	int len;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		len = work->word1.cn78xx.len;
+	else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE))
+		len = work->word1.cn68xx.len;
+	else
+		len = work->word1.cn38xx.len;
+
+	return len;
+}
+
+static inline void cvmx_wqe_set_len(cvmx_wqe_t *work, int len)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		work->word1.cn78xx.len = len;
+	else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE))
+		work->word1.cn68xx.len = len;
+	else
+		work->word1.cn38xx.len = len;
+}
+
+/**
+ * This function returns, if there was L2/L1 errors detected in packet.
+ *
+ * @param work	pointer to work queue entry
+ *
+ * @return	0 if packet had no error, non-zero to indicate error code.
+ *
+ * Please refer to HRM for the specific model for full enumaration of error codes.
+ * With Octeon1/Octeon2 models, the returned code indicates L1/L2 errors.
+ * On CN73XX/CN78XX, the return code is the value of PKI_OPCODE_E,
+ * if it is non-zero, otherwise the returned code will be derived from
+ * PKI_ERRLEV_E such that an error indicated in LayerA will return 0x20,
+ * LayerB - 0x30, LayerC - 0x40 and so forth.
+ */
+static inline int cvmx_wqe_get_rcv_err(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		if (wqe->word2.err_level == CVMX_PKI_ERRLEV_E_RE || wqe->word2.err_code != 0)
+			return wqe->word2.err_code;
+		else
+			return (wqe->word2.err_level << 4) + 0x10;
+	} else if (work->word2.snoip.rcv_error) {
+		return work->word2.snoip.err_code;
+	}
+
+	return 0;
+}
+
+static inline u32 cvmx_wqe_get_tag(cvmx_wqe_t *work)
+{
+	return work->word1.tag;
+}
+
+static inline void cvmx_wqe_set_tag(cvmx_wqe_t *work, u32 tag)
+{
+	work->word1.tag = tag;
+}
+
+static inline int cvmx_wqe_get_tt(cvmx_wqe_t *work)
+{
+	return work->word1.tag_type;
+}
+
+static inline void cvmx_wqe_set_tt(cvmx_wqe_t *work, int tt)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		work->word1.cn78xx.tag_type = (cvmx_pow_tag_type_t)tt;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		work->word1.cn68xx.tag_type = (cvmx_pow_tag_type_t)tt;
+		work->word1.cn68xx.zero_2 = 0;
+	} else {
+		work->word1.cn38xx.tag_type = (cvmx_pow_tag_type_t)tt;
+		work->word1.cn38xx.zero_2 = 0;
+	}
+}
+
+static inline u8 cvmx_wqe_get_unused8(cvmx_wqe_t *work)
+{
+	u8 bits;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		bits = wqe->word2.rsvd_0;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		bits = work->word0.pip.cn68xx.unused1;
+	} else {
+		bits = work->word0.pip.cn38xx.unused;
+	}
+
+	return bits;
+}
+
+static inline void cvmx_wqe_set_unused8(cvmx_wqe_t *work, u8 v)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		wqe->word2.rsvd_0 = v;
+	} else if (octeon_has_feature(OCTEON_FEATURE_CN68XX_WQE)) {
+		work->word0.pip.cn68xx.unused1 = v;
+	} else {
+		work->word0.pip.cn38xx.unused = v;
+	}
+}
+
+static inline u8 cvmx_wqe_get_user_flags(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		return work->word0.pki.rsvd_2;
+	else
+		return 0;
+}
+
+static inline void cvmx_wqe_set_user_flags(cvmx_wqe_t *work, u8 v)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		work->word0.pki.rsvd_2 = v;
+}
+
+static inline int cvmx_wqe_get_channel(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		return (work->word0.pki.channel);
+	else
+		return cvmx_wqe_get_port(work);
+}
+
+static inline void cvmx_wqe_set_channel(cvmx_wqe_t *work, int channel)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		work->word0.pki.channel = channel;
+	else
+		debug("%s: ERROR: not supported for model\n", __func__);
+}
+
+static inline int cvmx_wqe_get_aura(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		return (work->word0.pki.aura);
+	else
+		return (work->packet_ptr.s.pool);
+}
+
+static inline void cvmx_wqe_set_aura(cvmx_wqe_t *work, int aura)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		work->word0.pki.aura = aura;
+	else
+		work->packet_ptr.s.pool = aura;
+}
+
+static inline int cvmx_wqe_get_style(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		return (work->word0.pki.style);
+	return 0;
+}
+
+static inline void cvmx_wqe_set_style(cvmx_wqe_t *work, int style)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE))
+		work->word0.pki.style = style;
+}
+
+static inline int cvmx_wqe_is_l3_ip(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+		/* Match all 4 values for v4/v6 with.without options */
+		if ((wqe->word2.lc_hdr_type & 0x1c) == CVMX_PKI_LTYPE_E_IP4)
+			return 1;
+		if ((wqe->word2.le_hdr_type & 0x1c) == CVMX_PKI_LTYPE_E_IP4)
+			return 1;
+		return 0;
+	} else {
+		return !work->word2.s_cn38xx.not_IP;
+	}
+}
+
+static inline int cvmx_wqe_is_l3_ipv4(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+		/* Match 2 values - with/wotuout options */
+		if ((wqe->word2.lc_hdr_type & 0x1e) == CVMX_PKI_LTYPE_E_IP4)
+			return 1;
+		if ((wqe->word2.le_hdr_type & 0x1e) == CVMX_PKI_LTYPE_E_IP4)
+			return 1;
+		return 0;
+	} else {
+		return (!work->word2.s_cn38xx.not_IP &&
+			!work->word2.s_cn38xx.is_v6);
+	}
+}
+
+static inline int cvmx_wqe_is_l3_ipv6(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+		/* Match 2 values - with/wotuout options */
+		if ((wqe->word2.lc_hdr_type & 0x1e) == CVMX_PKI_LTYPE_E_IP6)
+			return 1;
+		if ((wqe->word2.le_hdr_type & 0x1e) == CVMX_PKI_LTYPE_E_IP6)
+			return 1;
+		return 0;
+	} else {
+		return (!work->word2.s_cn38xx.not_IP &&
+			work->word2.s_cn38xx.is_v6);
+	}
+}
+
+static inline bool cvmx_wqe_is_l4_udp_or_tcp(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		if (wqe->word2.lf_hdr_type == CVMX_PKI_LTYPE_E_TCP)
+			return true;
+		if (wqe->word2.lf_hdr_type == CVMX_PKI_LTYPE_E_UDP)
+			return true;
+		return false;
+	}
+
+	if (work->word2.s_cn38xx.not_IP)
+		return false;
+
+	return (work->word2.s_cn38xx.tcp_or_udp != 0);
+}
+
+static inline int cvmx_wqe_is_l2_bcast(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		return wqe->word2.is_l2_bcast;
+	} else {
+		return work->word2.s_cn38xx.is_bcast;
+	}
+}
+
+static inline int cvmx_wqe_is_l2_mcast(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		return wqe->word2.is_l2_mcast;
+	} else {
+		return work->word2.s_cn38xx.is_mcast;
+	}
+}
+
+static inline void cvmx_wqe_set_l2_bcast(cvmx_wqe_t *work, bool bcast)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		wqe->word2.is_l2_bcast = bcast;
+	} else {
+		work->word2.s_cn38xx.is_bcast = bcast;
+	}
+}
+
+static inline void cvmx_wqe_set_l2_mcast(cvmx_wqe_t *work, bool mcast)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		wqe->word2.is_l2_mcast = mcast;
+	} else {
+		work->word2.s_cn38xx.is_mcast = mcast;
+	}
+}
+
+static inline int cvmx_wqe_is_l3_bcast(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		return wqe->word2.is_l3_bcast;
+	}
+	debug("%s: ERROR: not supported for model\n", __func__);
+	return 0;
+}
+
+static inline int cvmx_wqe_is_l3_mcast(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		return wqe->word2.is_l3_mcast;
+	}
+	debug("%s: ERROR: not supported for model\n", __func__);
+	return 0;
+}
+
+/**
+ * This function returns is there was IP error detected in packet.
+ * For 78XX it does not flag ipv4 options and ipv6 extensions.
+ * For older chips if PIP_GBL_CTL was proviosned to flag ip4_otions and
+ * ipv6 extension, it will be flag them.
+ * @param work	pointer to work queue entry
+ * @return	1 -- If IP error was found in packet
+ *          0 -- If no IP error was found in packet.
+ */
+static inline int cvmx_wqe_is_ip_exception(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		if (wqe->word2.err_level == CVMX_PKI_ERRLEV_E_LC)
+			return 1;
+		else
+			return 0;
+	}
+
+	return work->word2.s.IP_exc;
+}
+
+static inline int cvmx_wqe_is_l4_error(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		if (wqe->word2.err_level == CVMX_PKI_ERRLEV_E_LF)
+			return 1;
+		else
+			return 0;
+	} else {
+		return work->word2.s.L4_error;
+	}
+}
+
+static inline void cvmx_wqe_set_vlan(cvmx_wqe_t *work, bool set)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		wqe->word2.vlan_valid = set;
+	} else {
+		work->word2.s.vlan_valid = set;
+	}
+}
+
+static inline int cvmx_wqe_is_vlan(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		return wqe->word2.vlan_valid;
+	} else {
+		return work->word2.s.vlan_valid;
+	}
+}
+
+static inline int cvmx_wqe_is_vlan_stacked(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		return wqe->word2.vlan_stacked;
+	} else {
+		return work->word2.s.vlan_stacked;
+	}
+}
+
+/**
+ * Extract packet data buffer pointer from work queue entry.
+ *
+ * Returns the legacy (Octeon1/Octeon2) buffer pointer structure
+ * for the linked buffer list.
+ * On CN78XX, the native buffer pointer structure is converted into
+ * the legacy format.
+ * The legacy buf_ptr is then stored in the WQE, and word0 reserved
+ * field is set to indicate that the buffer pointers were translated.
+ * If the packet data is only found inside the work queue entry,
+ * a standard buffer pointer structure is created for it.
+ */
+cvmx_buf_ptr_t cvmx_wqe_get_packet_ptr(cvmx_wqe_t *work);
+
+static inline int cvmx_wqe_get_bufs(cvmx_wqe_t *work)
+{
+	int bufs;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		bufs = work->word0.pki.bufs;
+	} else {
+		/* Adjust for packet-in-WQE cases */
+		if (cvmx_unlikely(work->word2.s_cn38xx.bufs == 0 && !work->word2.s.software))
+			(void)cvmx_wqe_get_packet_ptr(work);
+		bufs = work->word2.s_cn38xx.bufs;
+	}
+	return bufs;
+}
+
+/**
+ * Free Work Queue Entry memory
+ *
+ * Will return the WQE buffer to its pool, unless the WQE contains
+ * non-redundant packet data.
+ * This function is intended to be called AFTER the packet data
+ * has been passed along to PKO for transmission and release.
+ * It can also follow a call to cvmx_helper_free_packet_data()
+ * to release the WQE after associated data was released.
+ */
+void cvmx_wqe_free(cvmx_wqe_t *work);
+
+/**
+ * Check if a work entry has been intiated by software
+ *
+ */
+static inline bool cvmx_wqe_is_soft(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		return wqe->word2.software;
+	} else {
+		return work->word2.s.software;
+	}
+}
+
+/**
+ * Allocate a work-queue entry for delivering software-initiated
+ * event notifications.
+ * The application data is copied into the work-queue entry,
+ * if the space is sufficient.
+ */
+cvmx_wqe_t *cvmx_wqe_soft_create(void *data_p, unsigned int data_sz);
+
+/* Errata (PKI-20776) PKI_BUFLINK_S's are endian-swapped
+ * CN78XX pass 1.x has a bug where the packet pointer in each segment is
+ * written in the opposite endianness of the configured mode. Fix these here.
+ */
+static inline void cvmx_wqe_pki_errata_20776(cvmx_wqe_t *work)
+{
+	cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X) && !wqe->pki_errata20776) {
+		u64 bufs;
+		cvmx_buf_ptr_pki_t buffer_next;
+
+		bufs = wqe->word0.bufs;
+		buffer_next = wqe->packet_ptr;
+		while (bufs > 1) {
+			cvmx_buf_ptr_pki_t next;
+			void *nextaddr = cvmx_phys_to_ptr(buffer_next.addr - 8);
+
+			memcpy(&next, nextaddr, sizeof(next));
+			next.u64 = __builtin_bswap64(next.u64);
+			memcpy(nextaddr, &next, sizeof(next));
+			buffer_next = next;
+			bufs--;
+		}
+		wqe->pki_errata20776 = 1;
+	}
+}
+
+/**
+ * @INTERNAL
+ *
+ * Extract the native PKI-specific buffer pointer from WQE.
+ *
+ * NOTE: Provisional, may be superceded.
+ */
+static inline cvmx_buf_ptr_pki_t cvmx_wqe_get_pki_pkt_ptr(cvmx_wqe_t *work)
+{
+	cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+	if (!octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_buf_ptr_pki_t x = { 0 };
+		return x;
+	}
+
+	cvmx_wqe_pki_errata_20776(work);
+	return wqe->packet_ptr;
+}
+
+/**
+ * Set the buffer segment count for a packet.
+ *
+ * @return Returns the actual resulting value in the WQE fielda
+ *
+ */
+static inline unsigned int cvmx_wqe_set_bufs(cvmx_wqe_t *work, unsigned int bufs)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		work->word0.pki.bufs = bufs;
+		return work->word0.pki.bufs;
+	}
+
+	work->word2.s.bufs = bufs;
+	return work->word2.s.bufs;
+}
+
+/**
+ * Get the offset of Layer-3 header,
+ * only supported when Layer-3 protocol is IPv4 or IPv6.
+ *
+ * @return Returns the offset, or 0 if the offset is not known or unsupported.
+ *
+ * FIXME: Assuming word4 is present.
+ */
+static inline unsigned int cvmx_wqe_get_l3_offset(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+		/* Match 4 values: IPv4/v6 w/wo options */
+		if ((wqe->word2.lc_hdr_type & 0x1c) == CVMX_PKI_LTYPE_E_IP4)
+			return wqe->word4.ptr_layer_c;
+	} else {
+		return work->word2.s.ip_offset;
+	}
+
+	return 0;
+}
+
+/**
+ * Set the offset of Layer-3 header in a packet.
+ * Typically used when an IP packet is generated by software
+ * or when the Layer-2 header length is modified, and
+ * a subsequent recalculation of checksums is anticipated.
+ *
+ * @return Returns the actual value of the work entry offset field.
+ *
+ * FIXME: Assuming word4 is present.
+ */
+static inline unsigned int cvmx_wqe_set_l3_offset(cvmx_wqe_t *work, unsigned int ip_off)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+		/* Match 4 values: IPv4/v6 w/wo options */
+		if ((wqe->word2.lc_hdr_type & 0x1c) == CVMX_PKI_LTYPE_E_IP4)
+			wqe->word4.ptr_layer_c = ip_off;
+	} else {
+		work->word2.s.ip_offset = ip_off;
+	}
+
+	return cvmx_wqe_get_l3_offset(work);
+}
+
+/**
+ * Set the indication that the packet contains a IPv4 Layer-3 * header.
+ * Use 'cvmx_wqe_set_l3_ipv6()' if the protocol is IPv6.
+ * When 'set' is false, the call will result in an indication
+ * that the Layer-3 protocol is neither IPv4 nor IPv6.
+ *
+ * FIXME: Add IPV4_OPT handling based on L3 header length.
+ */
+static inline void cvmx_wqe_set_l3_ipv4(cvmx_wqe_t *work, bool set)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		if (set)
+			wqe->word2.lc_hdr_type = CVMX_PKI_LTYPE_E_IP4;
+		else
+			wqe->word2.lc_hdr_type = CVMX_PKI_LTYPE_E_NONE;
+	} else {
+		work->word2.s.not_IP = !set;
+		if (set)
+			work->word2.s_cn38xx.is_v6 = 0;
+	}
+}
+
+/**
+ * Set packet Layer-3 protocol to IPv6.
+ *
+ * FIXME: Add IPV6_OPT handling based on presence of extended headers.
+ */
+static inline void cvmx_wqe_set_l3_ipv6(cvmx_wqe_t *work, bool set)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		if (set)
+			wqe->word2.lc_hdr_type = CVMX_PKI_LTYPE_E_IP6;
+		else
+			wqe->word2.lc_hdr_type = CVMX_PKI_LTYPE_E_NONE;
+	} else {
+		work->word2.s_cn38xx.not_IP = !set;
+		if (set)
+			work->word2.s_cn38xx.is_v6 = 1;
+	}
+}
+
+/**
+ * Set a packet Layer-4 protocol type to UDP.
+ */
+static inline void cvmx_wqe_set_l4_udp(cvmx_wqe_t *work, bool set)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		if (set)
+			wqe->word2.lf_hdr_type = CVMX_PKI_LTYPE_E_UDP;
+		else
+			wqe->word2.lf_hdr_type = CVMX_PKI_LTYPE_E_NONE;
+	} else {
+		if (!work->word2.s_cn38xx.not_IP)
+			work->word2.s_cn38xx.tcp_or_udp = set;
+	}
+}
+
+/**
+ * Set a packet Layer-4 protocol type to TCP.
+ */
+static inline void cvmx_wqe_set_l4_tcp(cvmx_wqe_t *work, bool set)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		if (set)
+			wqe->word2.lf_hdr_type = CVMX_PKI_LTYPE_E_TCP;
+		else
+			wqe->word2.lf_hdr_type = CVMX_PKI_LTYPE_E_NONE;
+	} else {
+		if (!work->word2.s_cn38xx.not_IP)
+			work->word2.s_cn38xx.tcp_or_udp = set;
+	}
+}
+
+/**
+ * Set the "software" flag in a work entry.
+ */
+static inline void cvmx_wqe_set_soft(cvmx_wqe_t *work, bool set)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		wqe->word2.software = set;
+	} else {
+		work->word2.s.software = set;
+	}
+}
+
+/**
+ * Return true if the packet is an IP fragment.
+ */
+static inline bool cvmx_wqe_is_l3_frag(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		return (wqe->word2.is_frag != 0);
+	}
+
+	if (!work->word2.s_cn38xx.not_IP)
+		return (work->word2.s.is_frag != 0);
+
+	return false;
+}
+
+/**
+ * Set the indicator that the packet is an fragmented IP packet.
+ */
+static inline void cvmx_wqe_set_l3_frag(cvmx_wqe_t *work, bool set)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		wqe->word2.is_frag = set;
+	} else {
+		if (!work->word2.s_cn38xx.not_IP)
+			work->word2.s.is_frag = set;
+	}
+}
+
+/**
+ * Set the packet Layer-3 protocol to RARP.
+ */
+static inline void cvmx_wqe_set_l3_rarp(cvmx_wqe_t *work, bool set)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		if (set)
+			wqe->word2.lc_hdr_type = CVMX_PKI_LTYPE_E_RARP;
+		else
+			wqe->word2.lc_hdr_type = CVMX_PKI_LTYPE_E_NONE;
+	} else {
+		work->word2.snoip.is_rarp = set;
+	}
+}
+
+/**
+ * Set the packet Layer-3 protocol to ARP.
+ */
+static inline void cvmx_wqe_set_l3_arp(cvmx_wqe_t *work, bool set)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		if (set)
+			wqe->word2.lc_hdr_type = CVMX_PKI_LTYPE_E_ARP;
+		else
+			wqe->word2.lc_hdr_type = CVMX_PKI_LTYPE_E_NONE;
+	} else {
+		work->word2.snoip.is_arp = set;
+	}
+}
+
+/**
+ * Return true if the packet Layer-3 protocol is ARP.
+ */
+static inline bool cvmx_wqe_is_l3_arp(cvmx_wqe_t *work)
+{
+	if (octeon_has_feature(OCTEON_FEATURE_CN78XX_WQE)) {
+		cvmx_wqe_78xx_t *wqe = (cvmx_wqe_78xx_t *)work;
+
+		return (wqe->word2.lc_hdr_type == CVMX_PKI_LTYPE_E_ARP);
+	}
+
+	if (work->word2.s_cn38xx.not_IP)
+		return (work->word2.snoip.is_arp != 0);
+
+	return false;
+}
+
+#endif /* __CVMX_WQE_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/octeon-feature.h b/arch/mips/mach-octeon/include/mach/octeon-feature.h
index 1202716..2eb1714 100644
--- a/arch/mips/mach-octeon/include/mach/octeon-feature.h
+++ b/arch/mips/mach-octeon/include/mach/octeon-feature.h
@@ -6,6 +6,8 @@
 #ifndef __OCTEON_FEATURE_H__
 #define __OCTEON_FEATURE_H__
 
+#include "cvmx-fuse.h"
+
 /*
  * Octeon models are declared after the macros in octeon-model.h with the
  * suffix _FEATURE. The individual features are declared with the
diff --git a/arch/mips/mach-octeon/include/mach/octeon-model.h b/arch/mips/mach-octeon/include/mach/octeon-model.h
index 22d6df6..9164a4c 100644
--- a/arch/mips/mach-octeon/include/mach/octeon-model.h
+++ b/arch/mips/mach-octeon/include/mach/octeon-model.h
@@ -28,6 +28,8 @@
  * use only, and may change without notice.
  */
 
+#include <asm/mipsregs.h>
+
 #define OCTEON_FAMILY_MASK      0x00ffff00
 #define OCTEON_PRID_MASK	0x00ffffff
 
diff --git a/arch/mips/mach-octeon/include/mach/octeon_ddr.h b/arch/mips/mach-octeon/include/mach/octeon_ddr.h
index 4473be4..0b5be06 100644
--- a/arch/mips/mach-octeon/include/mach/octeon_ddr.h
+++ b/arch/mips/mach-octeon/include/mach/octeon_ddr.h
@@ -11,13 +11,9 @@
 #include <linux/delay.h>
 #include <linux/io.h>
 #include <mach/octeon-model.h>
-#include <mach/cvmx/cvmx-lmcx-defs.h>
-
-/* Mapping is done starting from 0x11800.80000000 */
-#define CVMX_L2C_CTL		0x00800000
-#define CVMX_L2C_BIG_CTL	0x00800030
-#define CVMX_L2C_TADX_INT(i)	(0x00a00028 + (((i) & 7) * 0x40000))
-#define CVMX_L2C_MCIX_INT(i)	(0x00c00028 + (((i) & 3) * 0x40000))
+#include <mach/cvmx-lmcx-defs.h>
+#include <mach/cvmx-regs.h>
+#include <mach/cvmx-l2c-defs.h>
 
 /* Some "external" (non-LMC) registers */
 #define CVMX_IPD_CLK_COUNT		0x00014F0000000338
@@ -68,34 +64,6 @@
 	iowrite64(val, priv->l2c_base + addr);
 }
 
-/* Access other CSR registers not located inside the LMC address space */
-static inline u64 csr_rd(u64 addr)
-{
-	void __iomem *base;
-
-	base = ioremap_nocache(addr, 0x100);
-	return ioread64(base);
-}
-
-static inline void csr_wr(u64 addr, u64 val)
-{
-	void __iomem *base;
-
-	base = ioremap_nocache(addr, 0x100);
-	return iowrite64(val, base);
-}
-
-/* "Normal" access, without any offsets and/or mapping */
-static inline u64 cvmx_read64_uint64(u64 addr)
-{
-	return readq((void *)addr);
-}
-
-static inline void cvmx_write64_uint64(u64 addr, u64 val)
-{
-	writeq(val, (void *)addr);
-}
-
 /* Failsafe mode */
 #define FLAG_FAILSAFE_MODE		0x01000
 /* Note that the DDR clock initialized flags must be contiguous */
@@ -152,8 +120,6 @@
 #define CVMX_TMP_STR(x) CVMX_TMP_STR2(x)
 #define CVMX_TMP_STR2(x) #x
 
-#define CVMX_SYNC asm volatile ("sync" : : : "memory")
-
 #define CVMX_CACHE(op, address, offset)					\
 	asm volatile ("cache " CVMX_TMP_STR(op) ", "			\
 		      CVMX_TMP_STR(offset) "(%[rbase])"			\
@@ -167,157 +133,6 @@
 #define CVMX_DCACHE_INVALIDATE					\
 	{ CVMX_SYNC; asm volatile ("cache 9, 0($0)" : : ); }
 
-/**
- * cvmx_l2c_cfg
- *
- * Specify the RSL base addresses for the block
- *
- *                  L2C_CFG = L2C Configuration
- *
- * Description:
- */
-union cvmx_l2c_cfg {
-	u64 u64;
-	struct cvmx_l2c_cfg_s {
-		uint64_t reserved_20_63:44;
-		uint64_t bstrun:1;
-		uint64_t lbist:1;
-		uint64_t xor_bank:1;
-		uint64_t dpres1:1;
-		uint64_t dpres0:1;
-		uint64_t dfill_dis:1;
-		uint64_t fpexp:4;
-		uint64_t fpempty:1;
-		uint64_t fpen:1;
-		uint64_t idxalias:1;
-		uint64_t mwf_crd:4;
-		uint64_t rsp_arb_mode:1;
-		uint64_t rfb_arb_mode:1;
-		uint64_t lrf_arb_mode:1;
-	} s;
-};
-
-/**
- * cvmx_l2c_ctl
- *
- * L2C_CTL = L2C Control
- *
- *
- * Notes:
- * (1) If MAXVAB is != 0, VAB_THRESH should be less than MAXVAB.
- *
- * (2) L2DFDBE and L2DFSBE allows software to generate L2DSBE, L2DDBE, VBFSBE,
- * and VBFDBE errors for the purposes of testing error handling code.  When
- * one (or both) of these bits are set a PL2 which misses in the L2 will fill
- * with the appropriate error in the first 2 OWs of the fill. Software can
- * determine which OW pair gets the error by choosing the desired fill order
- * (address<6:5>).  A PL2 which hits in the L2 will not inject any errors.
- * Therefore sending a WBIL2 prior to the PL2 is recommended to make a miss
- * likely (if multiple processors are involved software must be careful to be
- * sure no other processor or IO device can bring the block into the L2).
- *
- * To generate a VBFSBE or VBFDBE, software must first get the cache block
- * into the cache with an error using a PL2 which misses the L2.  Then a
- * store partial to a portion of the cache block without the error must
- * change the block to dirty.  Then, a subsequent WBL2/WBIL2/victim will
- * trigger the VBFSBE/VBFDBE error.
- */
-union cvmx_l2c_ctl {
-	u64 u64;
-	struct cvmx_l2c_ctl_s {
-		uint64_t reserved_29_63:35;
-		uint64_t rdf_fast:1;
-		uint64_t disstgl2i:1;
-		uint64_t l2dfsbe:1;
-		uint64_t l2dfdbe:1;
-		uint64_t discclk:1;
-		uint64_t maxvab:4;
-		uint64_t maxlfb:4;
-		uint64_t rsp_arb_mode:1;
-		uint64_t xmc_arb_mode:1;
-		uint64_t reserved_2_13:12;
-		uint64_t disecc:1;
-		uint64_t disidxalias:1;
-	} s;
-
-	struct cvmx_l2c_ctl_cn73xx {
-		uint64_t reserved_32_63:32;
-		uint64_t ocla_qos:3;
-		uint64_t reserved_28_28:1;
-		uint64_t disstgl2i:1;
-		uint64_t reserved_25_26:2;
-		uint64_t discclk:1;
-		uint64_t reserved_16_23:8;
-		uint64_t rsp_arb_mode:1;
-		uint64_t xmc_arb_mode:1;
-		uint64_t rdf_cnt:8;
-		uint64_t reserved_4_5:2;
-		uint64_t disldwb:1;
-		uint64_t dissblkdty:1;
-		uint64_t disecc:1;
-		uint64_t disidxalias:1;
-	} cn73xx;
-
-	struct cvmx_l2c_ctl_cn73xx cn78xx;
-};
-
-/**
- * cvmx_l2c_big_ctl
- *
- * L2C_BIG_CTL = L2C Big memory control register
- *
- *
- * Notes:
- * (1) BIGRD interrupts can occur during normal operation as the PP's are
- * allowed to prefetch to non-existent memory locations.  Therefore,
- * BIGRD is for informational purposes only.
- *
- * (2) When HOLEWR/BIGWR blocks a store L2C_VER_ID, L2C_VER_PP, L2C_VER_IOB,
- * and L2C_VER_MSC will be loaded just like a store which is blocked by VRTWR.
- * Additionally, L2C_ERR_XMC will be loaded.
- */
-union cvmx_l2c_big_ctl {
-	u64 u64;
-	struct cvmx_l2c_big_ctl_s {
-		uint64_t reserved_8_63:56;
-		uint64_t maxdram:4;
-		uint64_t reserved_0_3:4;
-	} s;
-	struct cvmx_l2c_big_ctl_cn61xx {
-		uint64_t reserved_8_63:56;
-		uint64_t maxdram:4;
-		uint64_t reserved_1_3:3;
-		uint64_t disable:1;
-	} cn61xx;
-	struct cvmx_l2c_big_ctl_cn61xx cn63xx;
-	struct cvmx_l2c_big_ctl_cn61xx cn66xx;
-	struct cvmx_l2c_big_ctl_cn61xx cn68xx;
-	struct cvmx_l2c_big_ctl_cn61xx cn68xxp1;
-	struct cvmx_l2c_big_ctl_cn70xx {
-		uint64_t reserved_8_63:56;
-		uint64_t maxdram:4;
-		uint64_t reserved_1_3:3;
-		uint64_t disbig:1;
-	} cn70xx;
-	struct cvmx_l2c_big_ctl_cn70xx cn70xxp1;
-	struct cvmx_l2c_big_ctl_cn70xx cn73xx;
-	struct cvmx_l2c_big_ctl_cn70xx cn78xx;
-	struct cvmx_l2c_big_ctl_cn70xx cn78xxp1;
-	struct cvmx_l2c_big_ctl_cn61xx cnf71xx;
-	struct cvmx_l2c_big_ctl_cn70xx cnf75xx;
-};
-
-struct rlevel_byte_data {
-	int delay;
-	int loop_total;
-	int loop_count;
-	int best;
-	u64 bm;
-	int bmerrs;
-	int sqerrs;
-	int bestsq;
-};
-
 #define DEBUG_VALIDATE_BITMASK 0
 #if DEBUG_VALIDATE_BITMASK
 #define debug_bitmask_print printf
diff --git a/arch/mips/mach-octeon/include/mach/octeon_eth.h b/arch/mips/mach-octeon/include/mach/octeon_eth.h
new file mode 100644
index 0000000..bfef0a6
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/octeon_eth.h
@@ -0,0 +1,141 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __OCTEON_ETH_H__
+#define __OCTEON_ETH_H__
+
+#include <phy.h>
+#include <miiphy.h>
+
+#include <mach/cvmx-helper.h>
+#include <mach/cvmx-helper-board.h>
+#include <mach/octeon_fdt.h>
+
+struct eth_device;
+
+/** Ethernet device private data structure for octeon ethernet */
+struct octeon_eth_info {
+	u64 link_state;
+	u32 port;		   /** ipd port */
+	u32 interface;		   /** Port interface */
+	u32 index;		   /** port index on interface */
+	int node;		   /** OCX node number */
+	u32 initted_flag;	   /** 0 if port not initialized */
+	struct mii_dev *mii_bus;   /** MII bus for PHY */
+	struct phy_device *phydev; /** PHY device */
+	struct eth_device *ethdev; /** Eth device this priv is part of */
+	int mii_addr;
+	int phy_fdt_offset;		    /** Offset of PHY info in device tree */
+	int fdt_offset;			    /** Offset of Eth interface in DT */
+	int phy_offset;			    /** Offset of PHY dev in device tree */
+	enum cvmx_phy_type phy_device_type; /** Type of PHY */
+	/* current link status, use to reconfigure on status changes */
+	u64 packets_sent;
+	u64 packets_received;
+	u32 link_speed : 2;
+	u32 link_duplex : 1;
+	u32 link_status : 1;
+	u32 loopback : 1;
+	u32 enabled : 1;
+	u32 is_c45 : 1;		    /** Set if we need to use clause 45 */
+	u32 vitesse_sfp_config : 1; /** Need Vitesse SFP config */
+	u32 ti_gpio_config : 1;	    /** Need TI GPIO config */
+	u32 bgx_mac_set : 1;	    /** Has the BGX MAC been set already */
+	u64 last_bgx_mac;	    /** Last BGX MAC address set */
+	u64 gmx_base;		    /** Base address to access GMX CSRs */
+	bool mod_abs;		    /** True if module is absent */
+
+	/**
+	 * User defined function to check if a SFP+ module is absent or not.
+	 *
+	 * @param	dev	Ethernet device
+	 * @param	data	User supplied data
+	 */
+	int (*check_mod_abs)(struct eth_device *dev, void *data);
+
+	/** User supplied data for check_mod_abs */
+	void *mod_abs_data;
+	/**
+	 * Called to check the status of a port.  This is used for some
+	 * Vitesse and Inphi phys to probe the sFP adapter.
+	 */
+	int (*phy_port_check)(struct phy_device *dev);
+	/**
+	 * Called whenever mod_abs changes state
+	 *
+	 * @param	dev	Ethernet device
+	 * @param	mod_abs	True if module is absent
+	 *
+	 * @return	0 for success, otherwise error
+	 */
+	int (*mod_abs_changed)(struct eth_device *dev, bool mod_abs);
+	/** SDK phy information data structure */
+	cvmx_phy_info_t phy_info;
+#ifdef CONFIG_OCTEON_SFP
+	/** Information about connected SFP/SFP+/SFP28/QSFP+/QSFP28 module */
+	struct octeon_sfp_info sfp;
+#endif
+};
+
+/**
+ * Searches for an ethernet device based on interface and index.
+ *
+ * @param interface - interface number to search for
+ * @param index - index to search for
+ *
+ * @returns pointer to ethernet device or NULL if not found.
+ */
+struct eth_device *octeon_find_eth_by_interface_index(int interface, int index);
+
+/**
+ * User-defined function called when the link state changes
+ *
+ * @param[in]	dev		Ethernet device
+ * @param	link_state	new link state
+ *
+ * NOTE: This is defined as a weak function.
+ */
+void board_net_set_link(struct eth_device *dev, cvmx_helper_link_info_t link_state);
+
+/**
+ * Registers a function to be called when the link goes down.  The function is
+ * often used for things like reading the SFP+ EEPROM.
+ *
+ * @param	dev		Ethernet device
+ * @param	phy_port_check	Function to call
+ */
+void octeon_eth_register_phy_port_check(struct eth_device *dev,
+					int (*phy_port_check)(struct phy_device *dev));
+
+/**
+ * This weak function is called after the phy driver is connected but before
+ * it is initialized.
+ *
+ * @param	dev	Ethernet device for phy
+ *
+ * @return	0 to continue, or -1 for error to stop setting up the phy
+ */
+int octeon_eth_board_post_setup_phy(struct eth_device *dev);
+
+/**
+ * Registers a function to be called whenever a mod_abs change is detected.
+ *
+ * @param	dev		Ethernet device
+ * @param	mod_abs_changed	Function to be called
+ */
+void octeon_eth_register_mod_abs_changed(struct eth_device *dev,
+					 int (*mod_abs_changed)(struct eth_device *dev,
+								bool mod_abs));
+
+/**
+ * Checks for state changes with the link state or module state
+ *
+ * @param	dev	Ethernet device to check
+ *
+ * NOTE: If the module state is changed then the module callback is called.
+ */
+void octeon_phy_port_check(struct eth_device *dev);
+
+#endif /* __OCTEON_ETH_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/octeon_fdt.h b/arch/mips/mach-octeon/include/mach/octeon_fdt.h
new file mode 100644
index 0000000..31878cb
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/octeon_fdt.h
@@ -0,0 +1,268 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __OCTEON_FDT_H__
+#define __OCTEON_FDT_H__
+
+struct phy_device;
+
+/** Type of GPIO pin */
+enum octeon_gpio_type {
+	GPIO_TYPE_OCTEON,  /** Native Octeon */
+	GPIO_TYPE_PCA953X, /** PCA953X i2c GPIO expander */
+	GPIO_TYPE_PCA9554, /** PCA9554 i2c GPIO expander */
+	GPIO_TYPE_PCA9555, /** PCA9555 i2c GPIO expander */
+	GPIO_TYPE_PCA9698, /** PCA9698 i2c GPIO expander */
+#ifdef CONFIG_PHY_VITESSE
+	GPIO_TYPE_VSC8488, /** Vitesse VSC8488 or related PHY GPIO */
+#endif
+	GPIO_TYPE_UNKNOWN /** Unknown GPIO type */
+};
+
+/**
+ * Trims nodes from the flat device tree.
+ *
+ * @param fdt - pointer to working FDT, usually in gd->fdt_blob
+ * @param fdt_key - key to preserve.  All non-matching keys are removed
+ * @param trim_name - name of property to look for.  If NULL use
+ *		      'cavium,qlm-trim'
+ * @param rename - set to TRUE to rename interfaces.
+ * @param callback - function to call on matched nodes.
+ * @param cbarg - passed to callback.
+ *
+ * The key should look something like device #, type where device # is a
+ * number from 0-9 and type is a string describing the type.  For QLM
+ * operations this would typically contain the QLM number followed by
+ * the type in the device tree, like "0,xaui", "0,sgmii", etc.  This function
+ * will trim all items in the device tree which match the device number but
+ * have a type which does not match.  For example, if a QLM has a xaui module
+ * installed on QLM 0 and "0,xaui" is passed as a key, then all FDT nodes that
+ * have "0,xaui" will be preserved but all others, i.e. "0,sgmii" will be
+ * removed.
+ *
+ * Note that the trim_name must also match.  If trim_name is NULL then it
+ * looks for the property "cavium,qlm-trim".
+ *
+ * Also, when the trim_name is "cavium,qlm-trim" or NULL that the interfaces
+ * will also be renamed based on their register values.
+ *
+ * For example, if a PIP interface is named "interface@W" and has the property
+ * reg = <0> then the interface will be renamed after this function to
+ * interface@0.
+ *
+ * @return 0 for success.
+ */
+int octeon_fdt_patch_rename(void *fdt, const char *fdt_key, const char *trim_name, bool rename,
+			    void (*callback)(void *fdt, int offset, void *arg), void *cbarg);
+
+/**
+ * Trims nodes from the flat device tree.
+ *
+ * @param fdt - pointer to working FDT, usually in gd->fdt_blob
+ * @param fdt_key - key to preserve.  All non-matching keys are removed
+ * @param trim_name - name of property to look for.  If NULL use
+ *		      'cavium,qlm-trim'
+ *
+ * The key should look something like device #, type where device # is a
+ * number from 0-9 and type is a string describing the type.  For QLM
+ * operations this would typically contain the QLM number followed by
+ * the type in the device tree, like "0,xaui", "0,sgmii", etc.  This function
+ * will trim all items in the device tree which match the device number but
+ * have a type which does not match.  For example, if a QLM has a xaui module
+ * installed on QLM 0 and "0,xaui" is passed as a key, then all FDT nodes that
+ * have "0,xaui" will be preserved but all others, i.e. "0,sgmii" will be
+ * removed.
+ *
+ * Note that the trim_name must also match.  If trim_name is NULL then it
+ * looks for the property "cavium,qlm-trim".
+ *
+ * Also, when the trim_name is "cavium,qlm-trim" or NULL that the interfaces
+ * will also be renamed based on their register values.
+ *
+ * For example, if a PIP interface is named "interface@W" and has the property
+ * reg = <0> then the interface will be renamed after this function to
+ * interface@0.
+ *
+ * @return 0 for success.
+ */
+int octeon_fdt_patch(void *fdt, const char *fdt_key, const char *trim_name);
+
+/**
+ * Fix up the MAC address in the flat device tree based on the MAC address
+ * stored in ethaddr or in the board descriptor.
+ *
+ * NOTE: This function is weak and an alias for __octeon_fixup_fdt_mac_addr.
+ */
+void octeon_fixup_fdt_mac_addr(void);
+
+/**
+ * This function fixes the clock-frequency in the flat device tree for the UART.
+ *
+ * NOTE: This function is weak and an alias for __octeon_fixup_fdt_uart.
+ */
+void octeon_fixup_fdt_uart(void);
+
+/**
+ * This function fills in the /memory portion of the flat device tree.
+ *
+ * NOTE: This function is weak and aliased to __octeon_fixup_fdt_memory.
+ */
+void octeon_fixup_fdt_memory(void);
+
+int board_fixup_fdt(void);
+
+void octeon_fixup_fdt(void);
+
+/**
+ * This is a helper function to find the offset of a PHY device given
+ * an Ethernet device.
+ *
+ * @param[in] eth - Ethernet device to search for PHY offset
+ *
+ * @returns offset of phy info in device tree or -1 if not found
+ */
+int octeon_fdt_find_phy(const struct udevice *eth);
+
+/**
+ * This helper function returns if a node contains the specified vendor name.
+ *
+ * @param[in]	fdt		pointer to device tree blob
+ * @param	nodeoffset	offset of the tree node
+ * @param[in]	vendor		name of vendor to check
+ *
+ * returns:
+ *	0, if the node has a compatible vendor string property
+ *	1, if the node does not contain the vendor string property
+ *	-FDT_ERR_NOTFOUND, if the given node has no 'compatible' property
+ *	-FDT_ERR_BADOFFSET, if nodeoffset does not refer to a BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int octeon_fdt_compat_vendor(const void *fdt, int nodeoffset, const char *vendor);
+
+/**
+ * Given a node in the device tree get the OCTEON OCX node number
+ *
+ * @param fdt		pointer to flat device tree
+ * @param nodeoffset	node offset to get OCX node for
+ *
+ * @return the Octeon OCX node number
+ */
+int octeon_fdt_get_soc_node(const void *fdt, int nodeoffset);
+
+/**
+ * Given a FDT node, check if it is compatible with a list of devices
+ *
+ * @param[in]	fdt		Flat device tree pointer
+ * @param	node_offset	Node offset in device tree
+ * @param[in]	strlist		Array of FDT devices to check, end must be NULL
+ *
+ * @return	0 if at least one device is compatible, 1 if not compatible.
+ */
+int octeon_fdt_node_check_compatible(const void *fdt, int node_offset, const char *const *strlist);
+/**
+ * Given a node offset, find the i2c bus number for that node
+ *
+ * @param[in]	fdt	Pointer to flat device tree
+ * @param	node_offset	Node offset in device tree
+ *
+ * @return	i2c bus number or -1 if error
+ */
+int octeon_fdt_i2c_get_bus(const void *fdt, int node_offset);
+
+/**
+ * Given an offset into the fdt, output the i2c bus and address of the device
+ *
+ * @param[in]	fdt	fdt blob pointer
+ * @param	node	offset in FDT of device
+ * @param[out]	bus	i2c bus number of device
+ * @param[out]	addr	address of device on i2c bus
+ *
+ * @return	0 for success, -1 on error
+ */
+int octeon_fdt_get_i2c_bus_addr(const void *fdt, int node, int *bus, int *addr);
+
+/**
+ * Reads a GPIO pin given the node of the GPIO device in the device tree and
+ * the pin number.
+ *
+ * @param[in]	fdt	fdt blob pointer
+ * @param	phandle	phandle of GPIO node
+ * @param	pin	pin number to read
+ *
+ * @return	0 = pin is low, 1 = pin is high, -1 = error
+ */
+int octeon_fdt_read_gpio(const void *fdt, int phandle, int pin);
+
+/**
+ * Reads a GPIO pin given the node of the GPIO device in the device tree and
+ * the pin number.
+ *
+ * @param[in]	fdt	fdt blob pointer
+ * @param	phandle	phandle of GPIO node
+ * @param	pin	pin number to read
+ * @param	val	value to write (1 = high, 0 = low)
+ *
+ * @return	0 = success, -1 = error
+ */
+int octeon_fdt_set_gpio(const void *fdt, int phandle, int pin, int val);
+
+/**
+ * Given the node to a MAC entry in the device tree, output the i2c bus, address
+ * and if the module is absent.
+ *
+ * @param[in]	fdt		flat device tree pointer
+ * @param	mac_node	node of Ethernet port in the FDT
+ * @param[out]	bus		i2c bus address of SFP EEPROM
+ * @param[out]	addr		i2c address of SFP EEPROM
+ * @param[out]	mod_abs		Set true if module is absent, false if present
+ *
+ * @return	0 for success, -1 if there are problems with the device tree
+ */
+int octeon_fdt_get_sfp_eeprom(const void *fdt, int mac_node, int *bus, int *addr, bool *mod_abs);
+
+/**
+ * Given a node to a MAC entry in the device tree, output the i2c bus, address
+ * and if the module is absent
+ *
+ * @param[in]	fdt		flat device tree pointer
+ * @param	mac_node	node of QSFP Ethernet port in FDT
+ * @param[out]	bus		i2c bus address of SFP EEPROM
+ * @param[out]	addr		i2c address of SFP eeprom
+ * @param[out]	mod_abs		Set true if module is absent, false if present
+ *
+ * @return	0 for success, -1 if there are problems with the device tree
+ */
+int octeon_fdt_get_qsfp_eeprom(const void *fdt, int mac_node, int *bus, int *addr, bool *mod_abs);
+
+/**
+ * Given the node of a GPIO entry output the GPIO type, i2c bus and i2c
+ * address.
+ *
+ * @param	fdt_node	node of GPIO in device tree, generally
+ *				derived from a phandle.
+ * @param[out]	type		Type of GPIO detected
+ * @param[out]	i2c_bus		For i2c GPIO expanders, the i2c bus number
+ * @param[out]	i2c_addr	For i2c GPIO expanders, the i2c address
+ *
+ * @return	0 for success, -1 for errors
+ *
+ * NOTE: It is up to the caller to determine the pin number.
+ */
+int octeon_fdt_get_gpio_info(int fdt_node, enum octeon_gpio_type *type, int *i2c_bus,
+			     int *i2c_addr);
+
+/**
+ * Get the PHY data structure for the specified FDT node and output the type
+ *
+ * @param	fdt_node	FDT node of phy
+ * @param[out]	type		Type of GPIO
+ *
+ * @return	pointer to phy device or NULL if no match found.
+ */
+struct phy_device *octeon_fdt_get_phy_gpio_info(int fdt_node, enum octeon_gpio_type *type);
+#endif /* __OCTEON_FDT_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/octeon_pci.h b/arch/mips/mach-octeon/include/mach/octeon_pci.h
new file mode 100644
index 0000000..3034f23
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/octeon_pci.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __OCTEON_PCI_H__
+#define __OCTEON_PCI_H__
+
+/**
+ * EEPROM entry struct
+ */
+union octeon_pcie_eeprom {
+	u64 u64;
+	struct octeon_data_s {
+		/**
+		 * 0x9DA1 valid entry, 0x6A5D end of table, 0xffff invalid
+		 * access
+		 */
+		u64 preamble : 16;
+u64: 1; /** Reserved */
+		/** Physical function number accessed by the write operation. */
+		u64 pf : 2;
+		/**
+		 * Specifies bit<31> of the address written by hardware.
+		 * 1 = configuration mask register, 0 = configuration register
+		 */
+		u64 cs2 : 1;
+		/**
+		 * Specifies bits<11:0> of the address written by hardware.
+		 * Bits<30:12> of this address are all 0s.
+		 */
+		u64 address : 12;
+		u64 data : 32;
+	} s;
+};
+
+void pci_dev_post_init(void);
+
+int octeon_pci_io_readb(unsigned int reg);
+void octeon_pci_io_writeb(int value, unsigned int reg);
+int octeon_pci_io_readw(unsigned int reg);
+void octeon_pci_io_writew(int value, unsigned int reg);
+int octeon_pci_io_readl(unsigned int reg);
+void octeon_pci_io_writel(int value, unsigned int reg);
+int octeon_pci_mem1_readb(unsigned int reg);
+void octeon_pci_mem1_writeb(int value, unsigned int reg);
+int octeon_pci_mem1_readw(unsigned int reg);
+void octeon_pci_mem1_writew(int value, unsigned int reg);
+int octeon_pci_mem1_readl(unsigned int reg);
+void octeon_pci_mem1_writel(int value, unsigned int reg);
+
+/* In the TLB mapped case, these also work with virtual addresses,
+** and do the required virt<->phys translations as well. */
+u32 octeon_pci_phys_to_bus(u32 phys);
+u32 octeon_pci_bus_to_phys(u32 bus);
+
+/**
+ * Searches PCIe EEPROM for override data specified by address and pf.
+ *
+ * @param	address - PCIe config space address
+ * @param	pf	- PCIe config space pf num
+ * @param[out]	id	- override device and vendor ID
+ *
+ * @return	0 if override found, 1 if not found.
+ */
+int octeon_find_pcie_id_override(unsigned int address, unsigned int pf, u32 *id);
+
+#endif /* __OCTEON_PCI_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/octeon_qlm.h b/arch/mips/mach-octeon/include/mach/octeon_qlm.h
new file mode 100644
index 0000000..219625b
--- /dev/null
+++ b/arch/mips/mach-octeon/include/mach/octeon_qlm.h
@@ -0,0 +1,109 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#ifndef __OCTEON_QLM_H__
+#define __OCTEON_QLM_H__
+
+/* Reference clock selector values for ref_clk_sel */
+#define OCTEON_QLM_REF_CLK_100MHZ 0 /** 100 MHz */
+#define OCTEON_QLM_REF_CLK_125MHZ 1 /** 125 MHz */
+#define OCTEON_QLM_REF_CLK_156MHZ 2 /** 156.25 MHz */
+#define OCTEON_QLM_REF_CLK_161MHZ 3 /** 161.1328125 MHz */
+
+/**
+ * Configure qlm/dlm speed and mode.
+ * @param qlm     The QLM or DLM to configure
+ * @param speed   The speed the QLM needs to be configured in Mhz.
+ * @param mode    The QLM to be configured as SGMII/XAUI/PCIe.
+ * @param rc      Only used for PCIe, rc = 1 for root complex mode, 0 for EP
+ *		  mode.
+ * @param pcie_mode Only used when qlm/dlm are in pcie mode.
+ * @param ref_clk_sel Reference clock to use for 70XX where:
+ *			0: 100MHz
+ *			1: 125MHz
+ *			2: 156.25MHz
+ *			3: 161.1328125MHz (CN73XX and CN78XX only)
+ * @param ref_clk_input	This selects which reference clock input to use.  For
+ *			cn70xx:
+ *				0: DLMC_REF_CLK0
+ *				1: DLMC_REF_CLK1
+ *				2: DLM0_REF_CLK
+ *			cn61xx: (not used)
+ *			cn78xx/cn76xx/cn73xx:
+ *				0: Internal clock (QLM[0-7]_REF_CLK)
+ *				1: QLMC_REF_CLK0
+ *				2: QLMC_REF_CLK1
+ *
+ * @return	Return 0 on success or -1.
+ *
+ * @note	When the 161MHz clock is used it can only be used for
+ *		XLAUI mode with a 6316 speed or XFI mode with a 103125 speed.
+ *		This rate is also only supported for CN73XX and CN78XX.
+ */
+int octeon_configure_qlm(int qlm, int speed, int mode, int rc, int pcie_mode, int ref_clk_sel,
+			 int ref_clk_input);
+
+int octeon_configure_qlm_cn78xx(int node, int qlm, int speed, int mode, int rc, int pcie_mode,
+				int ref_clk_sel, int ref_clk_input);
+
+/**
+ * Some QLM speeds need to override the default tuning parameters
+ *
+ * @param node     Node to configure
+ * @param qlm      QLM to configure
+ * @param baud_mhz Desired speed in MHz
+ * @param lane     Lane the apply the tuning parameters
+ * @param tx_swing Voltage swing.  The higher the value the lower the voltage,
+ *		   the default value is 7.
+ * @param tx_pre   pre-cursor pre-emphasis
+ * @param tx_post  post-cursor pre-emphasis.
+ * @param tx_gain   Transmit gain. Range 0-7
+ * @param tx_vboost Transmit voltage boost. Range 0-1
+ */
+void octeon_qlm_tune_per_lane_v3(int node, int qlm, int baud_mhz, int lane, int tx_swing,
+				 int tx_pre, int tx_post, int tx_gain, int tx_vboost);
+
+/**
+ * Some QLM speeds need to override the default tuning parameters
+ *
+ * @param node     Node to configure
+ * @param qlm      QLM to configure
+ * @param baud_mhz Desired speed in MHz
+ * @param tx_swing Voltage swing.  The higher the value the lower the voltage,
+ *		   the default value is 7.
+ * @param tx_premptap bits [0:3] pre-cursor pre-emphasis, bits[4:8] post-cursor
+ *		      pre-emphasis.
+ * @param tx_gain   Transmit gain. Range 0-7
+ * @param tx_vboost Transmit voltage boost. Range 0-1
+ */
+void octeon_qlm_tune_v3(int node, int qlm, int baud_mhz, int tx_swing, int tx_premptap, int tx_gain,
+			int tx_vboost);
+
+/**
+ * Disables DFE for the specified QLM lane(s).
+ * This function should only be called for low-loss channels.
+ *
+ * @param node     Node to configure
+ * @param qlm      QLM to configure
+ * @param lane     Lane to configure, or -1 all lanes
+ * @param baud_mhz The speed the QLM needs to be configured in Mhz.
+ * @param mode     The QLM to be configured as SGMII/XAUI/PCIe.
+ */
+void octeon_qlm_dfe_disable(int node, int qlm, int lane, int baud_mhz, int mode);
+
+/**
+ * Some QLMs need to override the default pre-ctle for low loss channels.
+ *
+ * @param node     Node to configure
+ * @param qlm      QLM to configure
+ * @param pre_ctle pre-ctle settings for low loss channels
+ */
+void octeon_qlm_set_channel_v3(int node, int qlm, int pre_ctle);
+
+void octeon_init_qlm(int node);
+
+int octeon_mcu_probe(int node);
+
+#endif /* __OCTEON_QLM_H__ */
diff --git a/arch/mips/mach-octeon/octeon_fdt.c b/arch/mips/mach-octeon/octeon_fdt.c
new file mode 100644
index 0000000..199f692
--- /dev/null
+++ b/arch/mips/mach-octeon/octeon_fdt.c
@@ -0,0 +1,1040 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#include <env.h>
+#include <log.h>
+#include <i2c.h>
+#include <net.h>
+#include <dm/device.h>
+#include <linux/delay.h>
+
+#include <mach/cvmx-regs.h>
+#include <mach/cvmx-csr.h>
+#include <mach/cvmx-bootmem.h>
+#include <mach/octeon-model.h>
+#include <mach/octeon_eth.h>
+#include <mach/octeon_fdt.h>
+#include <mach/cvmx-helper-fdt.h>
+#include <mach/cvmx-helper-gpio.h>
+#include <mach/cvmx-fuse.h>
+#include <mach/octeon-feature.h>
+#include <mach/cvmx-qlm.h>
+#include <mach/octeon_qlm.h>
+#include <asm/gpio.h>
+
+#ifdef CONFIG_PCA953X
+#include <pca953x.h>
+#endif
+#ifdef CONFIG_PCF857X
+#include <pcf857x.h>
+#endif
+#ifdef CONFIG_PCA9698
+#include <pca9698.h>
+#endif
+#ifdef CONFIG_PCA9554
+#include <pca9554.h>
+#endif
+#ifdef CONFIG_PCA9555
+#include <pca9555.h>
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifdef CONFIG_PCA9554
+static const char * const pca9554_gpio_list[] = {
+	"pca9554",
+	"nxp,pca9554",
+	"ti,pca9554",
+	NULL,
+};
+#endif
+
+#ifdef CONFIG_PCA9555
+static const char * const pca9555_gpio_list[] = {
+	"pca9535",    "nxp,pca9535", "pca9539", "nxp,pca9539", "pca9555",
+	"nxp,pca9555", "ti,pca9555", "max7312", "maxim,max7312", "max7313",
+	"maxim,max7313", "tca6416", "tca9539",    NULL,
+};
+#endif
+
+#ifdef CONFIG_PCA9698
+/** List of compatible strings supported by pca9698 driver */
+static const char * const pca9698_gpio_list[] = {
+	"nxp,pca9505", "pca9505", "nxp,pca9698", "pca9698", NULL,
+};
+#endif
+
+#ifdef CONFIG_PCA953X
+/** List of compatible strings supported by pca953x driver */
+static const char * const pca953x_gpio_list[] = {
+	"nxp,pca9534", "nxp,pca9535", "nxp,pca9536", "nxp,pca9537", "nxp,pca9538", "nxp,pca9539",
+	"nxp,pca953x", "nxp,pca9554", "nxp,pca9555", "nxp,pca9556", "nxp,pca9557", "nxp,pca6107",
+	"pca9534",     "pca9535",     "pca9536",     "pca9537",	    "pca9538",	   "pca9539",
+	"pca953x",     "pca9554",     "pca9555",     "pca9556",	    "pca9557",	   "max7310",
+	"max7312",     "max7313",     "max7315",     "pca6107",	    "tca6408",	   "tca6416",
+	"tca9555",     NULL
+};
+#endif
+
+#ifdef CONFIG_PHY_VITESSE
+static const char * const vitesse_vsc8488_gpio_list[] = {
+	"vitesse,vsc8486",   "microsemi,vsc8486", "vitesse,vsc8488",
+	"microsemi,vsc8488", "vitesse,vsc8489",	  "microsemi,vsc8489",
+	"vitesse,vsc8490",   "microsemi,vsc8490", NULL
+};
+#endif
+
+/** List of compatible strings supported by Octeon driver */
+static const char * const octeon_gpio_list[] = {
+	"cavium,octeon-7890-gpio",
+	"cavium,octeon-3860-gpio",
+	NULL
+};
+
+/**
+ * Trims nodes from the flat device tree.
+ *
+ * @param fdt - pointer to working FDT, usually in gd->fdt_blob
+ * @param fdt_key - key to preserve.  All non-matching keys are removed
+ * @param trim_name - name of property to look for.  If NULL use
+ *		      'cavium,qlm-trim'
+ *
+ * The key should look something like device #, type where device # is a
+ * number from 0-9 and type is a string describing the type.  For QLM
+ * operations this would typically contain the QLM number followed by
+ * the type in the device tree, like "0,xaui", "0,sgmii", etc.  This function
+ * will trim all items in the device tree which match the device number but
+ * have a type which does not match.  For example, if a QLM has a xaui module
+ * installed on QLM 0 and "0,xaui" is passed as a key, then all FDT nodes that
+ * have "0,xaui" will be preserved but all others, i.e. "0,sgmii" will be
+ * removed.
+ *
+ * Note that the trim_name must also match.  If trim_name is NULL then it
+ * looks for the property "cavium,qlm-trim".
+ *
+ * Also, when the trim_name is "cavium,qlm-trim" or NULL that the interfaces
+ * will also be renamed based on their register values.
+ *
+ * For example, if a PIP interface is named "interface@W" and has the property
+ * reg = <0> then the interface will be renamed after this function to
+ * interface@0.
+ *
+ * @return 0 for success.
+ */
+int __octeon_fdt_patch(void *fdt, const char *fdt_key, const char *trim_name)
+{
+	bool rename = !trim_name || !strcmp(trim_name, "cavium,qlm-trim");
+
+	return octeon_fdt_patch_rename(fdt, fdt_key, trim_name, rename, NULL, NULL);
+}
+
+int octeon_fdt_patch(void *fdt, const char *fdt_key, const char *trim_name)
+	__attribute__((weak, alias("__octeon_fdt_patch")));
+
+/**
+ * Trims nodes from the flat device tree.
+ *
+ * @param fdt - pointer to working FDT, usually in gd->fdt_blob
+ * @param fdt_key - key to preserve.  All non-matching keys are removed
+ * @param trim_name - name of property to look for.  If NULL use
+ *		      'cavium,qlm-trim'
+ * @param rename - set to TRUE to rename interfaces.
+ * @param callback - function to call on matched nodes.
+ * @param cbarg - passed to callback.
+ *
+ * The key should look something like device #, type where device # is a
+ * number from 0-9 and type is a string describing the type.  For QLM
+ * operations this would typically contain the QLM number followed by
+ * the type in the device tree, like "0,xaui", "0,sgmii", etc.  This function
+ * will trim all items in the device tree which match the device number but
+ * have a type which does not match.  For example, if a QLM has a xaui module
+ * installed on QLM 0 and "0,xaui" is passed as a key, then all FDT nodes that
+ * have "0,xaui" will be preserved but all others, i.e. "0,sgmii" will be
+ * removed.
+ *
+ * Note that the trim_name must also match.  If trim_name is NULL then it
+ * looks for the property "cavium,qlm-trim".
+ *
+ * Also, when the trim_name is "cavium,qlm-trim" or NULL that the interfaces
+ * will also be renamed based on their register values.
+ *
+ * For example, if a PIP interface is named "interface@W" and has the property
+ * reg = <0> then the interface will be renamed after this function to
+ * interface@0.
+ *
+ * @return 0 for success.
+ */
+int octeon_fdt_patch_rename(void *fdt, const char *fdt_key,
+			    const char *trim_name, bool rename,
+			    void (*callback)(void *fdt, int offset, void *arg),
+			    void *cbarg)
+	__attribute__((weak, alias("__octeon_fdt_patch_rename")));
+
+int __octeon_fdt_patch_rename(void *fdt, const char *fdt_key,
+			      const char *trim_name, bool rename,
+			      void (*callback)(void *fdt, int offset, void *arg),
+			      void *cbarg)
+{
+	int fdt_key_len;
+	int offset, next_offset;
+	int aliases;
+	const void *aprop;
+	char qlm[32];
+	char *mode;
+	int qlm_key_len;
+	int rc;
+	int cpu_node;
+
+	if (!trim_name)
+		trim_name = "cavium,qlm-trim";
+
+	strncpy(qlm, fdt_key, sizeof(qlm));
+	mode = qlm;
+	strsep(&mode, ",");
+	qlm_key_len = strlen(qlm);
+
+	debug("In %s: Patching FDT header at 0x%p with key \"%s\"\n", __func__, fdt, fdt_key);
+	if (!fdt || fdt_check_header(fdt) != 0) {
+		printf("%s: Invalid device tree\n", __func__);
+		return -1;
+	}
+
+	fdt_key_len = strlen(fdt_key) + 1;
+
+	/* Prune out the unwanted parts based on the QLM mode.  */
+	offset = 0;
+	for (offset = fdt_next_node(fdt, offset, NULL); offset >= 0; offset = next_offset) {
+		int len;
+		const char *val;
+		const char *val_comma;
+
+		next_offset = fdt_next_node(fdt, offset, NULL);
+
+		val = fdt_getprop(fdt, offset, trim_name, &len);
+		if (!val)
+			continue;
+
+		debug("fdt found trim name %s, comparing key \"%s\"(%d) with \"%s\"(%d)\n",
+		      trim_name, fdt_key, fdt_key_len, val, len);
+		val_comma = strchr(val, ',');
+		if (!val_comma || (val_comma - val) != qlm_key_len)
+			continue;
+		if (strncmp(val, qlm, qlm_key_len) != 0)
+			continue; /* Not this QLM. */
+
+		debug("fdt key number \"%s\" matches\n", val);
+		if (!fdt_stringlist_contains(val, len, fdt_key)) {
+			debug("Key \"%s\" does not match \"%s\"\n", val, fdt_key);
+			/* This QLM, but wrong mode.  Delete it. */
+			/* See if there's an alias that needs deleting */
+			val = fdt_getprop(fdt, offset, "cavium,qlm-trim-alias", NULL);
+			if (val) {
+				debug("Trimming alias \"%s\"\n", val);
+				aliases = fdt_path_offset(fdt, "/aliases");
+				if (aliases) {
+					aprop = fdt_getprop(fdt, aliases, val, NULL);
+					if (aprop) {
+						rc = fdt_nop_property(fdt, aliases, val);
+						if (rc) {
+							printf("Error: Could not NOP alias %s in fdt\n",
+							       val);
+						}
+					} else {
+						printf("Error: could not find /aliases/%s in device tree\n",
+						       val);
+					}
+				} else {
+					puts("Error: could not find /aliases in device tree\n");
+				}
+			}
+			debug("fdt trimming matching key %s\n", fdt_key);
+			next_offset = fdt_parent_offset(fdt, offset);
+			rc = fdt_nop_node(fdt, offset);
+			if (rc)
+				printf("Error %d noping node in device tree\n", rc);
+		}
+	}
+
+	debug("%s: Starting pass 2 for key %s\n", __func__, fdt_key);
+	/* Second pass: Rewrite names and remove key properties.  */
+	offset = -1;
+	for (offset = fdt_next_node(fdt, offset, NULL); offset >= 0; offset = next_offset) {
+		int len;
+		const char *val = fdt_getprop(fdt, offset, trim_name, &len);
+
+		next_offset = fdt_next_node(fdt, offset, NULL);
+
+		if (!val)
+			continue;
+		debug("Searching stringlist %s for %s\n", val, fdt_key);
+		if (fdt_stringlist_contains(val, len, fdt_key)) {
+			char new_name[64];
+			const char *name;
+			const char *at;
+			int reg;
+
+			debug("Found key %s at offset 0x%x\n", fdt_key, offset);
+			fdt_nop_property(fdt, offset, trim_name);
+
+			if (rename) {
+				name = fdt_get_name(fdt, offset, NULL);
+				debug("  name: %s\n", name);
+				if (!name)
+					continue;
+				at = strchr(name, '@');
+				if (!at)
+					continue;
+
+				reg = fdtdec_get_int(fdt, offset, "reg", -1);
+				if (reg == -1)
+					continue;
+
+				debug("  reg: %d\n", reg);
+				len = at - name + 1;
+				debug("  len: %d\n", len);
+				if (len + 9 >= sizeof(new_name))
+					continue;
+
+				memcpy(new_name, name, len);
+				cpu_node = cvmx_fdt_get_cpu_node(fdt, offset);
+				if (cpu_node > 0)
+					snprintf(new_name + len, sizeof(new_name) - len, "%x_%x",
+						 cpu_node, reg);
+				else
+					sprintf(new_name + len, "%x", reg);
+				debug("Renaming cpu node %d %s to %s\n", cpu_node, name, new_name);
+				fdt_set_name(fdt, offset, new_name);
+			}
+			if (callback)
+				callback(fdt, offset, cbarg);
+
+			/* Structure may have changed, start at the beginning. */
+			next_offset = 0;
+		}
+	}
+
+	return 0;
+}
+
+#ifdef CONFIG_CMD_NET
+static void octeon_set_one_fdt_mac(int node, uint64_t *mac)
+{
+	u8 mac_addr[6];
+	int r;
+
+	mac_addr[5] = *mac & 0xff;
+	mac_addr[4] = (*mac >> 8) & 0xff;
+	mac_addr[3] = (*mac >> 16) & 0xff;
+	mac_addr[2] = (*mac >> 24) & 0xff;
+	mac_addr[1] = (*mac >> 32) & 0xff;
+	mac_addr[0] = (*mac >> 40) & 0xff;
+
+	r = fdt_setprop_inplace(working_fdt, node, "local-mac-address", mac_addr, 6);
+	if (r == 0)
+		*mac = *mac + 1;
+}
+
+static uint64_t convert_mac(const u8 mac_addr[6])
+{
+	int i;
+	u64 mac = 0;
+
+	for (i = 0; i < 6; i++)
+		mac = (mac << 8) | mac_addr[i];
+	return mac;
+}
+
+/**
+ * Fix up the MAC address in the flat device tree based on the MAC address
+ * stored in ethaddr or in the board descriptor.
+ *
+ * NOTE: This function is weak and an alias for __octeon_fixup_fdt_mac_addr.
+ */
+void octeon_fixup_fdt_mac_addr(void) __attribute__((weak, alias("__octeon_fixup_fdt_mac_addr")));
+
+void __octeon_fixup_fdt_mac_addr(void)
+{
+	int node, pip, interface, ethernet;
+	int i, e;
+	u64 mac = 0;
+	uchar mac_addr[6];
+	char name[20];
+	bool env_mac_addr_valid;
+	const char *p;
+
+	debug("%s: env ethaddr: %s\n", __func__, (p = env_get("ethaddr")) ? p : "not set");
+	if (eth_env_get_enetaddr("ethaddr", mac_addr)) {
+		mac = convert_mac(mac_addr);
+		env_mac_addr_valid = true;
+	} else {
+		mac = convert_mac((uint8_t *)gd->arch.mac_desc.mac_addr_base);
+		env_mac_addr_valid = false;
+	}
+
+	debug("%s: mac_addr: %pM, board mac: %pM, env valid: %s\n", __func__, mac_addr,
+	      gd->arch.mac_desc.mac_addr_base, env_mac_addr_valid ? "true" : "false");
+
+	if (env_mac_addr_valid && memcmp(mac_addr, (void *)gd->arch.mac_desc.mac_addr_base, 6))
+		printf("Warning: the environment variable ethaddr is set to %pM\n"
+		       "which does not match the board descriptor MAC address %pM.\n"
+		       "Please clear the ethaddr environment variable with the command\n"
+		       "\"setenv -f ethaddr; saveenv\" or change the board MAC address with the command\n"
+		       "\"tlv_eeprom set mac %pM\" to change the board MAC address so that it matches\n"
+		       "the environment address.\n"
+		       "Note: the correct MAC address is usually the one stored in the tlv EEPROM.\n",
+		       mac_addr, gd->arch.mac_desc.mac_addr_base, mac_addr);
+
+	for (i = 0; i < 2; i++) {
+		sprintf(name, "mix%x", i);
+		p = fdt_get_alias(working_fdt, name);
+		if (p) {
+			node = fdt_path_offset(working_fdt, p);
+			if (node > 0)
+				octeon_set_one_fdt_mac(node, &mac);
+		}
+	}
+
+	for (i = 0; i < 2; i++) {
+		sprintf(name, "rgmii%x", i);
+		p = fdt_get_alias(working_fdt, name);
+		if (p) {
+			node = fdt_path_offset(working_fdt, p);
+			if (node > 0)
+				octeon_set_one_fdt_mac(node, &mac);
+		}
+	}
+
+	pip = fdt_node_offset_by_compatible(working_fdt, -1, "cavium,octeon-3860-pip");
+
+	if (pip > 0)
+		for (i = 0; i < 8; i++) {
+			sprintf(name, "interface@%d", i);
+			interface = fdt_subnode_offset(working_fdt, pip, name);
+			if (interface <= 0)
+				continue;
+			for (e = 0; e < 16; e++) {
+				sprintf(name, "ethernet@%d", e);
+				ethernet = fdt_subnode_offset(working_fdt, interface, name);
+				if (ethernet <= 0)
+					continue;
+				octeon_set_one_fdt_mac(ethernet, &mac);
+			}
+		}
+
+	/* Assign 78XX addresses in the order they appear in the device tree. */
+	node = fdt_node_offset_by_compatible(working_fdt, -1, "cavium,octeon-7890-bgx-port");
+	while (node != -FDT_ERR_NOTFOUND) {
+		octeon_set_one_fdt_mac(node, &mac);
+		node = fdt_node_offset_by_compatible(working_fdt, node,
+						     "cavium,octeon-7890-bgx-port");
+	}
+}
+#endif
+
+/**
+ * This function fixes the clock-frequency in the flat device tree for the UART.
+ *
+ * NOTE: This function is weak and an alias for __octeon_fixup_fdt_uart.
+ */
+void octeon_fixup_fdt_uart(void) __attribute__((weak, alias("__octeon_fixup_fdt_uart")));
+
+void __octeon_fixup_fdt_uart(void)
+{
+	u32 clk;
+	int node;
+
+	clk = gd->bus_clk;
+
+	/* Device trees already have good values for fast simulator
+	 * output, real boards need the correct value.
+	 */
+	node = fdt_node_offset_by_compatible(working_fdt, -1, "cavium,octeon-3860-uart");
+	while (node != -FDT_ERR_NOTFOUND) {
+		fdt_setprop_inplace_cell(working_fdt, node, "clock-frequency", clk);
+		node = fdt_node_offset_by_compatible(working_fdt, node, "cavium,octeon-3860-uart");
+	}
+}
+
+/**
+ * This function fills in the /memory portion of the flat device tree.
+ *
+ * NOTE: This function is weak and aliased to __octeon_fixup_fdt_memory.
+ */
+void octeon_fixup_fdt_memory(void) __attribute__((weak, alias("__octeon_fixup_fdt_memory")));
+
+void __octeon_fixup_fdt_memory(void)
+{
+	u64 sizes[3], addresses[3];
+	u64 size_left = gd->ram_size;
+	int num_addresses = 0;
+	int rc;
+	int node;
+
+	size_left = gd->ram_size;
+	sizes[num_addresses] = min_t(u64, size_left, 256 * 1024 * 1024);
+	size_left -= sizes[num_addresses];
+	addresses[num_addresses] = 0;
+	num_addresses++;
+
+	if (size_left > 0) {
+		sizes[num_addresses] = size_left;
+		addresses[num_addresses] = 0x20000000ULL;
+		num_addresses++;
+	}
+
+	node = fdt_path_offset(working_fdt, "/memory");
+	if (node < 0)
+		node = fdt_add_subnode(working_fdt, fdt_path_offset(working_fdt, "/"), "memory");
+	if (node < 0) {
+		printf("Could not add memory section to fdt: %s\n", fdt_strerror(node));
+		return;
+	}
+	rc = fdt_fixup_memory_banks(working_fdt, addresses, sizes, num_addresses);
+	if (rc != 0)
+		printf("%s: fdt_fixup_memory_banks returned %d when adding %d addresses\n",
+		       __func__, rc, num_addresses);
+}
+
+void octeon_fixup_fdt(void) __attribute__((weak, alias("__octeon_fixup_fdt")));
+
+void __octeon_fixup_fdt(void)
+{
+	if (!working_fdt)
+		return;
+
+#ifdef CONFIG_CMD_NET
+	octeon_fixup_fdt_mac_addr();
+#endif /* CONFIG_CMD_NET */
+
+#if !CONFIG_OCTEON_SIM_SPEED
+	octeon_fixup_fdt_uart();
+#endif
+
+	octeon_fixup_fdt_memory();
+}
+
+int __board_fixup_fdt(void)
+{
+	/*
+	 * Nothing to do in this dummy implementation
+	 */
+	return 0;
+}
+
+int board_fixup_fdt(void) __attribute__((weak, alias("__board_fixup_fdt")));
+
+/**
+ * This is a helper function to find the offset of a PHY device given
+ * an Ethernet device.
+ *
+ * @param[in] eth - Ethernet device to search for PHY offset
+ *
+ * @returns offset of phy info in device tree or -1 if not found
+ */
+//int octeon_fdt_find_phy(const struct eth_device *eth)
+int octeon_fdt_find_phy(const struct udevice *eth)
+{
+	int aliases;
+	const void *fdt = gd->fdt_blob;
+	const char *pip_path;
+	int pip;
+	char buffer[64];
+#if 0
+	struct octeon_eth_info *oct_eth_info =
+				 (struct octeon_eth_info *)eth->priv;
+#else
+	struct octeon_eth_info *oct_eth_info = dev_get_priv(eth);
+#endif
+	int interface, index;
+	int phandle;
+	int phy;
+	u32 *phy_handle;
+
+	aliases = fdt_path_offset(fdt, "/aliases");
+	if (aliases < 0) {
+		puts("/aliases not found in device tree!\n");
+		return -1;
+	}
+	pip_path = fdt_getprop(fdt, aliases, "pip", NULL);
+	if (!pip_path) {
+		puts("pip not found in aliases in device tree\n");
+		return -1;
+	}
+	pip = fdt_path_offset(fdt, pip_path);
+	if (pip < 0) {
+		puts("pip not found in device tree\n");
+		return -1;
+	}
+	snprintf(buffer, sizeof(buffer), "interface@%d", oct_eth_info->interface);
+	interface = fdt_subnode_offset(fdt, pip, buffer);
+	if (interface < 0) {
+		printf("%s: interface@%d not found in device tree for %s\n", __func__,
+		       oct_eth_info->interface, eth->name);
+		return -1;
+	}
+	snprintf(buffer, sizeof(buffer), "ethernet@%x", oct_eth_info->index);
+	index = fdt_subnode_offset(fdt, interface, buffer);
+	if (index < 0) {
+		printf("%s: ethernet@%x not found in device tree for %s\n", __func__,
+		       oct_eth_info->index, eth->name);
+		return -1;
+	}
+	phy_handle = (uint32_t *)fdt_getprop(fdt, index, "phy-handle", NULL);
+	if (phy_handle < 0) {
+		printf("%s: phy-handle not found for %s\n", __func__, eth->name);
+		return -1;
+	}
+	phandle = fdt32_to_cpu(*phy_handle);
+	phy = fdt_node_offset_by_phandle(fdt, phandle);
+	if (phy < 0) {
+		printf("%s: phy not found for %s\n", __func__, eth->name);
+		return -1;
+	}
+
+	return phy;
+}
+
+/**
+ * This helper function returns if a node contains the specified vendor name.
+ *
+ * @param[in]	fdt		pointer to device tree blob
+ * @param	nodeoffset	offset of the tree node
+ * @param[in]	vendor		name of vendor to check
+ *
+ * returns:
+ *	0, if the node has a compatible vendor string property
+ *	1, if the node does not contain the vendor string property
+ *	-FDT_ERR_NOTFOUND, if the given node has no 'compatible' property
+ *	-FDT_ERR_BADOFFSET, if nodeoffset does not refer to a BEGIN_NODE tag
+ *	-FDT_ERR_BADMAGIC,
+ *	-FDT_ERR_BADVERSION,
+ *	-FDT_BADSTATE,
+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
+ */
+int octeon_fdt_compat_vendor(const void *fdt, int nodeoffset, const char *vendor)
+{
+	const char *strlist;
+	const char *p;
+	int len;
+	int listlen;
+
+	strlist = fdt_getprop(fdt, nodeoffset, "compatible", &listlen);
+	if (!strlist)
+		return listlen;
+
+	len = strlen(vendor);
+
+	debug("%s(%p, %d, %s (%p)) strlist: %s (%p), len: %d\n", __func__, fdt, nodeoffset, vendor,
+	      vendor, strlist, strlist, len);
+	while (listlen >= len) {
+		debug("  Comparing %d bytes of %s and %s\n", len, vendor, strlist);
+		if ((memcmp(vendor, strlist, len) == 0) &&
+		    ((strlist[len] == ',') || (strlist[len] == '\0')))
+			return 0;
+		p = memchr(strlist, '\0', listlen);
+		if (!p)
+			return 1; /* malformed strlist.. */
+		listlen -= (p - strlist) + 1;
+		strlist = p + 1;
+	}
+	return 1;
+}
+
+/**
+ * Given a node in the device tree get the OCTEON OCX node number
+ *
+ * @param fdt		pointer to flat device tree
+ * @param nodeoffset	node offset to get OCX node for
+ *
+ * @return the Octeon OCX node number
+ */
+int octeon_fdt_get_soc_node(const void *fdt, int nodeoffset)
+{
+	return 0;
+}
+
+/**
+ * Given a FDT node, check if it is compatible with a list of devices
+ *
+ * @param[in]	fdt		Flat device tree pointer
+ * @param	node_offset	Node offset in device tree
+ * @param[in]	strlist		Array of FDT devices to check, end must be NULL
+ *
+ * @return	0 if at least one device is compatible, 1 if not compatible.
+ */
+int octeon_fdt_node_check_compatible(const void *fdt, int node_offset,
+				     const char *const *strlist)
+{
+	while (*strlist && **strlist) {
+		debug("%s: Checking %s\n", __func__, *strlist);
+		if (!fdt_node_check_compatible(fdt, node_offset, *strlist)) {
+			debug("%s: match found\n", __func__);
+			return 0;
+		}
+		strlist++;
+	}
+	debug("%s: No match found\n", __func__);
+	return 1;
+}
+
+/**
+ * Given a node offset, find the i2c bus number for that node
+ *
+ * @param[in]	fdt	Pointer to flat device tree
+ * @param	node_offset	Node offset in device tree
+ *
+ * @return	i2c bus number or -1 if error
+ */
+int octeon_fdt_i2c_get_bus(const void *fdt, int node_offset)
+{
+	const char *compat;
+	const u64 addresses[] = { 0x1180000001000, 0x1180000001200 };
+	u64 reg;
+	int i;
+	int bus = -1;
+	bool found = false;
+
+	if (octeon_has_feature(OCTEON_FEATURE_CIU3))
+		compat = "cavium,octeon-7890-twsi";
+	else
+		compat = "cavium,octeon-3860-twsi";
+
+	while (node_offset > 0 &&
+	       !(found = !fdt_node_check_compatible(fdt, node_offset, compat))) {
+		node_offset = fdt_parent_offset(fdt, node_offset);
+#ifdef CONFIG_OCTEON_I2C_FDT
+		bus = i2c_get_bus_num_fdt(node_offset);
+		if (bus >= 0) {
+			debug("%s: Found bus 0x%x\n", __func__, bus);
+			return bus;
+		}
+#endif
+	}
+	if (!found) {
+		printf("Error: node %d in device tree is not a child of the I2C bus\n",
+		       node_offset);
+		return -1;
+	}
+
+	reg = fdtdec_get_addr(fdt, node_offset, "reg");
+	if (reg == FDT_ADDR_T_NONE) {
+		printf("%s: Error: invalid reg address for TWSI bus\n", __func__);
+		return -1;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(addresses); i++)
+		if (reg == addresses[i]) {
+			bus = i;
+			break;
+		}
+
+	debug("%s: bus 0x%x\n", __func__, bus);
+	return bus;
+}
+
+/**
+ * Given an offset into the fdt, output the i2c bus and address of the device
+ *
+ * @param[in]	fdt	fdt blob pointer
+ * @param	node	offset in FDT of device
+ * @param[out]	bus	i2c bus number of device
+ * @param[out]	addr	address of device on i2c bus
+ *
+ * @return	0 for success, -1 on error
+ */
+int octeon_fdt_get_i2c_bus_addr(const void *fdt, int node, int *bus, int *addr)
+{
+	*bus = octeon_fdt_i2c_get_bus(fdt, fdt_parent_offset(fdt, node));
+	if (*bus < 0) {
+		printf("%s: Could not get parent i2c bus\n", __func__);
+		return -1;
+	}
+	*addr = fdtdec_get_int(fdt, node, "reg", -1);
+	if (*addr < 0)
+		return -1;
+	return 0;
+}
+
+/**
+ * Reads a GPIO pin given the node of the GPIO device in the device tree and
+ * the pin number.
+ *
+ * @param[in]	fdt	fdt blob pointer
+ * @param	phandle	phandle of GPIO node
+ * @param	pin	pin number to read
+ *
+ * @return	0 = pin is low, 1 = pin is high, -1 = error
+ */
+int octeon_fdt_read_gpio(const void *fdt, int phandle, int pin)
+{
+	enum cvmx_gpio_type type;
+	__maybe_unused int node;
+	__maybe_unused int addr;
+	__maybe_unused int bus;
+	__maybe_unused int old_bus;
+	int num_pins;
+	int value;
+
+	type = cvmx_fdt_get_gpio_type(fdt, phandle, &num_pins);
+	if ((pin & 0xff) >= num_pins) {
+		debug("%s: pin number %d out of range\n", __func__, pin);
+		return -1;
+	}
+	switch (type) {
+#ifdef CONFIG_PCA953X
+	case CVMX_GPIO_PIN_PCA953X:
+		node = fdt_node_offset_by_phandle(fdt, phandle);
+		if (octeon_fdt_get_i2c_bus_addr(fdt, node, &bus, &addr)) {
+			printf("%s: Could not get gpio bus and/or address\n", __func__);
+			return -1;
+		}
+		value = pca953x_get_val(bus, addr);
+		if (value < 0) {
+			printf("%s: Error reading PCA953X GPIO at 0x%x:0x%x\n", __func__, bus,
+			       addr);
+			return -1;
+		}
+		value = (value >> pin) & 1;
+		break;
+#endif
+#ifdef CONFIG_PCF857X
+	case CVMX_GPIO_PIN_PCF857X:
+		node = fdt_node_offset_by_phandle(fdt, phandle);
+		if (octeon_fdt_get_i2c_bus_addr(fdt, node, &bus, &addr)) {
+			printf("%s: Could not get gpio bus and/or address\n", __func__);
+			return -1;
+		}
+		value = pcf857x_get_val(bus, addr);
+		if (value < 0) {
+			printf("%s: Error reading PCF857X GPIO at 0x%x:0x%x\n", __func__, bus,
+			       addr);
+			return -1;
+		}
+		value = (value >> pin) & 1;
+		break;
+#endif
+#ifdef CONFIG_PCA9698
+	case CVMX_GPIO_PIN_PCA9698:
+		node = fdt_node_offset_by_phandle(fdt, phandle);
+		if (octeon_fdt_get_i2c_bus_addr(fdt, node, &bus, &addr)) {
+			printf("%s: Could not get gpio bus and/or address\n", __func__);
+			return -1;
+		}
+		old_bus = i2c_get_bus_num();
+		i2c_set_bus_num(bus);
+		value = pca9698_get_value(addr, pin);
+		i2c_set_bus_num(old_bus);
+		break;
+#endif
+	case CVMX_GPIO_PIN_OCTEON:
+		value = gpio_get_value(pin);
+		break;
+	default:
+		printf("%s: Unknown GPIO type %d\n", __func__, type);
+		return -1;
+	}
+	return value;
+}
+
+/**
+ * Reads a GPIO pin given the node of the GPIO device in the device tree and
+ * the pin number.
+ *
+ * @param[in]	fdt	fdt blob pointer
+ * @param	phandle	phandle of GPIO node
+ * @param	pin	pin number to read
+ * @param	val	value to write (1 = high, 0 = low)
+ *
+ * @return	0 = success, -1 = error
+ */
+int octeon_fdt_set_gpio(const void *fdt, int phandle, int pin, int val)
+{
+	enum cvmx_gpio_type type;
+	int node;
+	int num_pins;
+	__maybe_unused int addr;
+	__maybe_unused int bus;
+	__maybe_unused int old_bus;
+	__maybe_unused int rc;
+
+	node = fdt_node_offset_by_phandle(fdt, phandle);
+	if (node < 0) {
+		printf("%s: Invalid phandle\n", __func__);
+		return -1;
+	}
+
+	type = cvmx_fdt_get_gpio_type(fdt, phandle, &num_pins);
+	if ((pin & 0xff) >= num_pins) {
+		debug("%s: pin number %d out of range\n", __func__, pin);
+		return -1;
+	}
+	switch (type) {
+#ifdef CONFIG_PCA953X
+	case CVMX_GPIO_PIN_PCA953X:
+		if (octeon_fdt_get_i2c_bus_addr(fdt, node, &bus, &addr)) {
+			printf("%s: Could not get gpio bus and/or address\n", __func__);
+			return -1;
+		}
+
+		return pca953x_set_val(bus, addr, 1 << pin, val << pin);
+#endif
+#ifdef CONFIG_PCF857X
+	case CVMX_GPIO_PIN_PCF857X:
+		if (octeon_fdt_get_i2c_bus_addr(fdt, node, &bus, &addr)) {
+			printf("%s: Could not get gpio bus and/or address\n", __func__);
+			return -1;
+		}
+		return pcf957x_set_val(bus, addr, 1 << pin, val << pin);
+#endif
+#ifdef CONFIG_PCA9698
+	case CVMX_GPIO_PIN_PCA9698:
+		if (octeon_fdt_get_i2c_bus_addr(fdt, node, &bus, &addr)) {
+			printf("%s: Could not get gpio bus and/or address\n", __func__);
+			return -1;
+		}
+		old_bus = i2c_get_bus_num();
+		i2c_set_bus_num(bus);
+		rc = pca9698_set_value(addr, pin, val);
+		i2c_set_bus_num(old_bus);
+		return rc;
+#endif
+	case CVMX_GPIO_PIN_OCTEON:
+		return gpio_set_value(pin, val);
+	default:
+		printf("%s: Unknown GPIO type %d\n", __func__, type);
+		return -1;
+	}
+}
+
+/**
+ * Given the node of a GPIO entry output the GPIO type, i2c bus and i2c
+ * address.
+ *
+ * @param	fdt_node	node of GPIO in device tree, generally
+ *				derived from a phandle.
+ * @param[out]	type		Type of GPIO detected
+ * @param[out]	i2c_bus		For i2c GPIO expanders, the i2c bus number
+ * @param[out]	i2c_addr	For i2c GPIO expanders, the i2c address
+ *
+ * @return	0 for success, -1 for errors
+ *
+ * NOTE: It is up to the caller to determine the pin number.
+ */
+int octeon_fdt_get_gpio_info(int fdt_node, enum octeon_gpio_type *type,
+			     int *i2c_bus, int *i2c_addr)
+{
+	const void *fdt = gd->fdt_blob;
+
+	int i2c_bus_node __attribute__((unused));
+
+	*type = GPIO_TYPE_UNKNOWN;
+
+	if (!octeon_fdt_node_check_compatible(fdt, fdt_node, octeon_gpio_list)) {
+		debug("%s: Found Octeon compatible GPIO\n", __func__);
+		*type = GPIO_TYPE_OCTEON;
+		if (i2c_bus)
+			*i2c_bus = -1;
+		if (i2c_addr)
+			*i2c_addr = -1;
+		return 0;
+	}
+#ifdef CONFIG_PCA9555
+	if (!octeon_fdt_node_check_compatible(fdt, fdt_node, pca9555_gpio_list)) {
+		debug("%s: Found PCA9555 type compatible GPIO\n", __func__);
+		*type = GPIO_TYPE_PCA9555;
+	}
+#endif
+#ifdef CONFIG_PCA9554
+	if (!octeon_fdt_node_check_compatible(fdt, fdt_node, pca9554_gpio_list)) {
+		debug("%s: Found PCA9555 type compatible GPIO\n", __func__);
+		*type = GPIO_TYPE_PCA9554;
+	}
+#endif
+#ifdef CONFIG_PCA953X
+	if (!octeon_fdt_node_check_compatible(fdt, fdt_node, pca953x_gpio_list)) {
+		debug("%s: Found PCA953x compatible GPIO", __func__);
+		*type = GPIO_TYPE_PCA953X;
+	}
+#endif
+#ifdef CONFIG_PCA9698
+	if (!octeon_fdt_node_check_compatible(fdt, fdt_node, pca9698_gpio_list)) {
+		debug("%s: Found PCA9698 compatible GPIO", __func__);
+		*type = GPIO_TYPE_PCA9698;
+	}
+#endif
+#if defined(CONFIG_PCA953X) || defined(CONFIG_PCA9698) || \
+	defined(CONFIG_PCA9555) || defined(CONFIG_PCA9554)
+	if (!i2c_addr || !i2c_bus) {
+		printf("%s: Error: i2c_addr or i2c_bus is NULL\n", __func__);
+		return -1;
+	}
+
+	*i2c_addr = fdtdec_get_int(fdt, fdt_node, "reg", -1);
+	i2c_bus_node = fdt_parent_offset(fdt, fdt_node);
+	if (i2c_bus_node < 0) {
+		printf("%s: Invalid parent\n", __func__);
+		return -1;
+	}
+	*i2c_bus = i2c_get_bus_num_fdt(i2c_bus_node);
+#endif
+	return (*type != GPIO_TYPE_UNKNOWN) ? 0 : -1;
+}
+
+#ifdef CONFIG_PHY_VITESSE
+/**
+ * Given a node in the flat device tree, return the matching PHY device
+ *
+ * @param	fdt_node	FDT node in device tree
+ *
+ * @return	pointer to PHY device or NULL if none found.
+ */
+static struct phy_device *octeon_fdt_get_phy_device_from_node(int fdt_node)
+{
+	struct eth_device *dev;
+	int i = 0;
+	struct octeon_eth_info *ethinfo = NULL;
+
+	do {
+		dev = eth_get_dev_by_index(i++);
+		if (!dev)
+			return NULL;
+		ethinfo = dev->priv;
+		if (ethinfo->phy_offset == fdt_node)
+			return ethinfo->phydev;
+	} while (dev);
+	return NULL;
+}
+#endif
+
+/**
+ * Get the PHY data structure for the specified FDT node and output the type
+ *
+ * @param	fdt_node	FDT node of phy
+ * @param[out]	type		Type of GPIO
+ *
+ * @return	pointer to phy device or NULL if no match found.
+ */
+struct phy_device *octeon_fdt_get_phy_gpio_info(int fdt_node, enum octeon_gpio_type *type)
+{
+#ifdef CONFIG_PHY_VITESSE
+	struct phy_device *phydev;
+
+	if (!octeon_fdt_node_check_compatible(gd->fdt_blob, fdt_node,
+					      vitesse_vsc8488_gpio_list)) {
+		phydev = octeon_fdt_get_phy_device_from_node(fdt_node);
+		if (phydev) {
+			debug("%s: Found Vitesse VSC848X compatible GPIO\n", __func__);
+			*type = GPIO_TYPE_VSC8488;
+			return phydev;
+		}
+
+		debug("%s: Error: phy device not found!\n", __func__);
+		return NULL;
+	}
+
+	debug("%s: No compatible Vitesse PHY type found\n", __func__);
+#endif
+	return NULL;
+}
diff --git a/arch/mips/mach-octeon/octeon_qlm.c b/arch/mips/mach-octeon/octeon_qlm.c
new file mode 100644
index 0000000..7636927
--- /dev/null
+++ b/arch/mips/mach-octeon/octeon_qlm.c
@@ -0,0 +1,5853 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ */
+
+#include <dm.h>
+#include <time.h>
+#include <linux/delay.h>
+
+#include <mach/cvmx-regs.h>
+#include <mach/octeon-model.h>
+#include <mach/cvmx-fuse.h>
+#include <mach/cvmx-qlm.h>
+#include <mach/octeon_qlm.h>
+#include <mach/cvmx-pcie.h>
+
+#include <mach/cvmx-bgxx-defs.h>
+#include <mach/cvmx-ciu-defs.h>
+#include <mach/cvmx-gmxx-defs.h>
+#include <mach/cvmx-gserx-defs.h>
+#include <mach/cvmx-mio-defs.h>
+#include <mach/cvmx-pciercx-defs.h>
+#include <mach/cvmx-pemx-defs.h>
+#include <mach/cvmx-pexp-defs.h>
+#include <mach/cvmx-rst-defs.h>
+#include <mach/cvmx-sata-defs.h>
+#include <mach/cvmx-sli-defs.h>
+#include <mach/cvmx-sriomaintx-defs.h>
+#include <mach/cvmx-sriox-defs.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/** 2.5GHz with 100MHz reference clock */
+#define R_2_5G_REFCLK100 0x0
+/** 5.0GHz with 100MHz reference clock */
+#define R_5G_REFCLK100 0x1
+/** 8.0GHz with 100MHz reference clock */
+#define R_8G_REFCLK100 0x2
+/** 1.25GHz with 156.25MHz reference clock */
+#define R_125G_REFCLK15625_KX 0x3
+/** 3.125Ghz with 156.25MHz reference clock (XAUI) */
+#define R_3125G_REFCLK15625_XAUI 0x4
+/** 10.3125GHz with 156.25MHz reference clock (XFI/XLAUI) */
+#define R_103125G_REFCLK15625_KR 0x5
+/** 1.25GHz with 156.25MHz reference clock (SGMII) */
+#define R_125G_REFCLK15625_SGMII 0x6
+/** 5GHz with 156.25MHz reference clock (QSGMII) */
+#define R_5G_REFCLK15625_QSGMII 0x7
+/** 6.25GHz with 156.25MHz reference clock (RXAUI/25G) */
+#define R_625G_REFCLK15625_RXAUI 0x8
+/** 2.5GHz with 125MHz reference clock */
+#define R_2_5G_REFCLK125 0x9
+/** 5GHz with 125MHz reference clock */
+#define R_5G_REFCLK125 0xa
+/** 8GHz with 125MHz reference clock */
+#define R_8G_REFCLK125 0xb
+/** Must be last, number of modes */
+#define R_NUM_LANE_MODES 0xc
+
+int cvmx_qlm_is_ref_clock(int qlm, int reference_mhz)
+{
+	int ref_clock = cvmx_qlm_measure_clock(qlm);
+	int mhz = ref_clock / 1000000;
+	int range = reference_mhz / 10;
+
+	return ((mhz >= reference_mhz - range) && (mhz <= reference_mhz + range));
+}
+
+static int __get_qlm_spd(int qlm, int speed)
+{
+	int qlm_spd = 0xf;
+
+	if (cvmx_qlm_is_ref_clock(qlm, 100)) {
+		if (speed == 1250)
+			qlm_spd = 0x3;
+		else if (speed == 2500)
+			qlm_spd = 0x2;
+		else if (speed == 5000)
+			qlm_spd = 0x0;
+		else
+			qlm_spd = 0xf;
+	} else if (cvmx_qlm_is_ref_clock(qlm, 125)) {
+		if (speed == 1250)
+			qlm_spd = 0xa;
+		else if (speed == 2500)
+			qlm_spd = 0x9;
+		else if (speed == 3125)
+			qlm_spd = 0x8;
+		else if (speed == 5000)
+			qlm_spd = 0x6;
+		else if (speed == 6250)
+			qlm_spd = 0x5;
+		else
+			qlm_spd = 0xf;
+	} else if (cvmx_qlm_is_ref_clock(qlm, 156)) {
+		if (speed == 1250)
+			qlm_spd = 0x4;
+		else if (speed == 2500)
+			qlm_spd = 0x7;
+		else if (speed == 3125)
+			qlm_spd = 0xe;
+		else if (speed == 3750)
+			qlm_spd = 0xd;
+		else if (speed == 5000)
+			qlm_spd = 0xb;
+		else if (speed == 6250)
+			qlm_spd = 0xc;
+		else
+			qlm_spd = 0xf;
+	} else if (cvmx_qlm_is_ref_clock(qlm, 161)) {
+		if (speed == 6316)
+			qlm_spd = 0xc;
+	}
+	return qlm_spd;
+}
+
+static void __set_qlm_pcie_mode_61xx(int pcie_port, int root_complex)
+{
+	int rc = root_complex ? 1 : 0;
+	int ep = root_complex ? 0 : 1;
+	cvmx_ciu_soft_prst1_t soft_prst1;
+	cvmx_ciu_soft_prst_t soft_prst;
+	cvmx_mio_rst_ctlx_t rst_ctl;
+
+	if (pcie_port) {
+		soft_prst1.u64 = csr_rd(CVMX_CIU_SOFT_PRST1);
+		soft_prst1.s.soft_prst = 1;
+		csr_wr(CVMX_CIU_SOFT_PRST1, soft_prst1.u64);
+	} else {
+		soft_prst.u64 = csr_rd(CVMX_CIU_SOFT_PRST);
+		soft_prst.s.soft_prst = 1;
+		csr_wr(CVMX_CIU_SOFT_PRST, soft_prst.u64);
+	}
+
+	rst_ctl.u64 = csr_rd(CVMX_MIO_RST_CTLX(pcie_port));
+
+	rst_ctl.s.prst_link = rc;
+	rst_ctl.s.rst_link = ep;
+	rst_ctl.s.prtmode = rc;
+	rst_ctl.s.rst_drv = rc;
+	rst_ctl.s.rst_rcv = 0;
+	rst_ctl.s.rst_chip = ep;
+	csr_wr(CVMX_MIO_RST_CTLX(pcie_port), rst_ctl.u64);
+
+	if (root_complex == 0) {
+		if (pcie_port) {
+			soft_prst1.u64 = csr_rd(CVMX_CIU_SOFT_PRST1);
+			soft_prst1.s.soft_prst = 0;
+			csr_wr(CVMX_CIU_SOFT_PRST1, soft_prst1.u64);
+		} else {
+			soft_prst.u64 = csr_rd(CVMX_CIU_SOFT_PRST);
+			soft_prst.s.soft_prst = 0;
+			csr_wr(CVMX_CIU_SOFT_PRST, soft_prst.u64);
+		}
+	}
+}
+
+/**
+ * Configure qlm speed and mode. MIO_QLMX_CFG[speed,mode] are not set
+ * for CN61XX.
+ *
+ * @param qlm     The QLM to configure
+ * @param speed   The speed the QLM needs to be configured in Mhz.
+ * @param mode    The QLM to be configured as SGMII/XAUI/PCIe.
+ *                  QLM 0: 0 = PCIe0 1X4, 1 = Reserved, 2 = SGMII1, 3 = XAUI1
+ *                  QLM 1: 0 = PCIe1 1x2, 1 = PCIe(0/1) 2x1, 2 - 3 = Reserved
+ *                  QLM 2: 0 - 1 = Reserved, 2 = SGMII0, 3 = XAUI0
+ * @param rc      Only used for PCIe, rc = 1 for root complex mode, 0 for EP
+ *		  mode.
+ * @param pcie2x1 Only used when QLM1 is in PCIE2x1 mode.  The QLM_SPD has a
+ *		  different value on how PEMx needs to be configured:
+ *                   0x0 - both PEM0 & PEM1 are in gen1 mode.
+ *                   0x1 - PEM0 in gen2 and PEM1 in gen1 mode.
+ *                   0x2 - PEM0 in gen1 and PEM1 in gen2 mode.
+ *                   0x3 - both PEM0 & PEM1 are in gen2 mode.
+ *               SPEED value is ignored in this mode. QLM_SPD is set based on
+ *               pcie2x1 value in this mode.
+ *
+ * @return       Return 0 on success or -1.
+ */
+static int octeon_configure_qlm_cn61xx(int qlm, int speed, int mode, int rc, int pcie2x1)
+{
+	cvmx_mio_qlmx_cfg_t qlm_cfg;
+
+	/* The QLM speed varies for SGMII/XAUI and PCIe mode. And depends on
+	 * reference clock.
+	 */
+	if (!OCTEON_IS_MODEL(OCTEON_CN61XX))
+		return -1;
+
+	if (qlm < 3) {
+		qlm_cfg.u64 = csr_rd(CVMX_MIO_QLMX_CFG(qlm));
+	} else {
+		debug("WARNING: Invalid QLM(%d) passed\n", qlm);
+		return -1;
+	}
+
+	switch (qlm) {
+		/* SGMII/XAUI mode */
+	case 2: {
+		if (mode < 2) {
+			qlm_cfg.s.qlm_spd = 0xf;
+			break;
+		}
+		qlm_cfg.s.qlm_spd = __get_qlm_spd(qlm, speed);
+		qlm_cfg.s.qlm_cfg = mode;
+		break;
+	}
+	case 1: {
+		if (mode == 1) { /* 2x1 mode */
+			cvmx_mio_qlmx_cfg_t qlm0;
+
+			/* When QLM0 is configured as PCIe(QLM_CFG=0x0)
+			 * and enabled (QLM_SPD != 0xf), QLM1 cannot be
+			 * configured as PCIe 2x1 mode (QLM_CFG=0x1)
+			 * and enabled (QLM_SPD != 0xf).
+			 */
+			qlm0.u64 = csr_rd(CVMX_MIO_QLMX_CFG(0));
+			if (qlm0.s.qlm_spd != 0xf && qlm0.s.qlm_cfg == 0) {
+				debug("Invalid mode(%d) for QLM(%d) as QLM1 is PCIe mode\n",
+				      mode, qlm);
+				qlm_cfg.s.qlm_spd = 0xf;
+				break;
+			}
+
+			/* Set QLM_SPD based on reference clock and mode */
+			if (cvmx_qlm_is_ref_clock(qlm, 100)) {
+				if (pcie2x1 == 0x3)
+					qlm_cfg.s.qlm_spd = 0x0;
+				else if (pcie2x1 == 0x1)
+					qlm_cfg.s.qlm_spd = 0x2;
+				else if (pcie2x1 == 0x2)
+					qlm_cfg.s.qlm_spd = 0x1;
+				else if (pcie2x1 == 0x0)
+					qlm_cfg.s.qlm_spd = 0x3;
+				else
+					qlm_cfg.s.qlm_spd = 0xf;
+			} else if (cvmx_qlm_is_ref_clock(qlm, 125)) {
+				if (pcie2x1 == 0x3)
+					qlm_cfg.s.qlm_spd = 0x4;
+				else if (pcie2x1 == 0x1)
+					qlm_cfg.s.qlm_spd = 0x6;
+				else if (pcie2x1 == 0x2)
+					qlm_cfg.s.qlm_spd = 0x9;
+				else if (pcie2x1 == 0x0)
+					qlm_cfg.s.qlm_spd = 0x7;
+				else
+					qlm_cfg.s.qlm_spd = 0xf;
+			}
+			qlm_cfg.s.qlm_cfg = mode;
+			csr_wr(CVMX_MIO_QLMX_CFG(qlm), qlm_cfg.u64);
+
+			/* Set PCIe mode bits */
+			__set_qlm_pcie_mode_61xx(0, rc);
+			__set_qlm_pcie_mode_61xx(1, rc);
+			return 0;
+		} else if (mode > 1) {
+			debug("Invalid mode(%d) for QLM(%d).\n", mode, qlm);
+			qlm_cfg.s.qlm_spd = 0xf;
+			break;
+		}
+
+		/* Set speed and mode for PCIe 1x2 mode. */
+		if (cvmx_qlm_is_ref_clock(qlm, 100)) {
+			if (speed == 5000)
+				qlm_cfg.s.qlm_spd = 0x1;
+			else if (speed == 2500)
+				qlm_cfg.s.qlm_spd = 0x2;
+			else
+				qlm_cfg.s.qlm_spd = 0xf;
+		} else if (cvmx_qlm_is_ref_clock(qlm, 125)) {
+			if (speed == 5000)
+				qlm_cfg.s.qlm_spd = 0x4;
+			else if (speed == 2500)
+				qlm_cfg.s.qlm_spd = 0x6;
+			else
+				qlm_cfg.s.qlm_spd = 0xf;
+		} else {
+			qlm_cfg.s.qlm_spd = 0xf;
+		}
+
+		qlm_cfg.s.qlm_cfg = mode;
+		csr_wr(CVMX_MIO_QLMX_CFG(qlm), qlm_cfg.u64);
+
+		/* Set PCIe mode bits */
+		__set_qlm_pcie_mode_61xx(1, rc);
+		return 0;
+	}
+	case 0: {
+		/* QLM_CFG = 0x1 - Reserved */
+		if (mode == 1) {
+			qlm_cfg.s.qlm_spd = 0xf;
+			break;
+		}
+		/* QLM_CFG = 0x0 - PCIe 1x4(PEM0) */
+		if (mode == 0 && speed != 5000 && speed != 2500) {
+			qlm_cfg.s.qlm_spd = 0xf;
+			break;
+		}
+
+		/* Set speed and mode */
+		qlm_cfg.s.qlm_spd = __get_qlm_spd(qlm, speed);
+		qlm_cfg.s.qlm_cfg = mode;
+		csr_wr(CVMX_MIO_QLMX_CFG(qlm), qlm_cfg.u64);
+
+		/* Set PCIe mode bits */
+		if (mode == 0)
+			__set_qlm_pcie_mode_61xx(0, rc);
+
+		return 0;
+	}
+	default:
+		debug("WARNING: Invalid QLM(%d) passed\n", qlm);
+		qlm_cfg.s.qlm_spd = 0xf;
+	}
+	csr_wr(CVMX_MIO_QLMX_CFG(qlm), qlm_cfg.u64);
+	return 0;
+}
+
+/* qlm      : DLM to configure
+ * baud_mhz : speed of the DLM
+ * ref_clk_sel  :  reference clock speed selection where:
+ *			0:	100MHz
+ *			1:	125MHz
+ *			2:	156.25MHz
+ *
+ * ref_clk_input:  reference clock input where:
+ *			0:	DLMC_REF_CLK0_[P,N]
+ *			1:	DLMC_REF_CLK1_[P,N]
+ *			2:	DLM0_REF_CLK_[P,N] (only valid for QLM 0)
+ * is_sff7000_rxaui : boolean to indicate whether qlm is RXAUI on SFF7000
+ */
+static int __dlm_setup_pll_cn70xx(int qlm, int baud_mhz, int ref_clk_sel, int ref_clk_input,
+				  int is_sff7000_rxaui)
+{
+	cvmx_gserx_dlmx_test_powerdown_t dlmx_test_powerdown;
+	cvmx_gserx_dlmx_ref_ssp_en_t dlmx_ref_ssp_en;
+	cvmx_gserx_dlmx_mpll_en_t dlmx_mpll_en;
+	cvmx_gserx_dlmx_phy_reset_t dlmx_phy_reset;
+	cvmx_gserx_dlmx_tx_amplitude_t tx_amplitude;
+	cvmx_gserx_dlmx_tx_preemph_t tx_preemph;
+	cvmx_gserx_dlmx_rx_eq_t rx_eq;
+	cvmx_gserx_dlmx_ref_clkdiv2_t ref_clkdiv2;
+	cvmx_gserx_dlmx_mpll_multiplier_t mpll_multiplier;
+	int gmx_ref_clk = 100;
+
+	debug("%s(%d, %d, %d, %d, %d)\n", __func__, qlm, baud_mhz, ref_clk_sel, ref_clk_input,
+	      is_sff7000_rxaui);
+	if (ref_clk_sel == 1)
+		gmx_ref_clk = 125;
+	else if (ref_clk_sel == 2)
+		gmx_ref_clk = 156;
+
+	if (qlm != 0 && ref_clk_input == 2) {
+		printf("%s: Error: can only use reference clock inputs 0 or 1 for DLM %d\n",
+		       __func__, qlm);
+		return -1;
+	}
+
+	/* Hardware defaults are invalid */
+	tx_amplitude.u64 = csr_rd(CVMX_GSERX_DLMX_TX_AMPLITUDE(qlm, 0));
+	if (is_sff7000_rxaui) {
+		tx_amplitude.s.tx0_amplitude = 100;
+		tx_amplitude.s.tx1_amplitude = 100;
+	} else {
+		tx_amplitude.s.tx0_amplitude = 65;
+		tx_amplitude.s.tx1_amplitude = 65;
+	}
+
+	csr_wr(CVMX_GSERX_DLMX_TX_AMPLITUDE(qlm, 0), tx_amplitude.u64);
+
+	tx_preemph.u64 = csr_rd(CVMX_GSERX_DLMX_TX_PREEMPH(qlm, 0));
+
+	if (is_sff7000_rxaui) {
+		tx_preemph.s.tx0_preemph = 0;
+		tx_preemph.s.tx1_preemph = 0;
+	} else {
+		tx_preemph.s.tx0_preemph = 22;
+		tx_preemph.s.tx1_preemph = 22;
+	}
+	csr_wr(CVMX_GSERX_DLMX_TX_PREEMPH(qlm, 0), tx_preemph.u64);
+
+	rx_eq.u64 = csr_rd(CVMX_GSERX_DLMX_RX_EQ(qlm, 0));
+	rx_eq.s.rx0_eq = 0;
+	rx_eq.s.rx1_eq = 0;
+	csr_wr(CVMX_GSERX_DLMX_RX_EQ(qlm, 0), rx_eq.u64);
+
+	/* 1. Write GSER0_DLM0_REF_USE_PAD[REF_USE_PAD] = 1 (to select
+	 *    reference-clock input)
+	 *    The documentation for this register in the HRM is useless since
+	 *    it says it selects between two different clocks that are not
+	 *    documented anywhere.  What it really does is select between
+	 *    DLM0_REF_CLK_[P,N] if 1 and DLMC_REF_CLK[0,1]_[P,N] if 0.
+	 *
+	 *    This register must be 0 for DLMs 1 and 2 and can only be 1 for
+	 *    DLM 0.
+	 */
+	csr_wr(CVMX_GSERX_DLMX_REF_USE_PAD(0, 0), ((ref_clk_input == 2) && (qlm == 0)) ? 1 : 0);
+
+	/* Reference clock was already chosen before we got here */
+
+	/* 2. Write GSER0_DLM0_REFCLK_SEL[REFCLK_SEL] if required for
+	 *    reference-clock selection.
+	 *
+	 *    If GSERX_DLMX_REF_USE_PAD is 1 then this register is ignored.
+	 */
+	csr_wr(CVMX_GSERX_DLMX_REFCLK_SEL(0, 0), ref_clk_input & 1);
+
+	/* Reference clock was already chosen before we got here */
+
+	/* 3. If required, write GSER0_DLM0_REF_CLKDIV2[REF_CLKDIV2] (must be
+	 *    set if reference clock > 100 MHz)
+	 */
+	/* Apply workaround for Errata (G-20669) MPLL may not come up. */
+	ref_clkdiv2.u64 = csr_rd(CVMX_GSERX_DLMX_REF_CLKDIV2(qlm, 0));
+	if (gmx_ref_clk == 100)
+		ref_clkdiv2.s.ref_clkdiv2 = 0;
+	else
+		ref_clkdiv2.s.ref_clkdiv2 = 1;
+	csr_wr(CVMX_GSERX_DLMX_REF_CLKDIV2(qlm, 0), ref_clkdiv2.u64);
+
+	/* 1. Ensure GSER(0)_DLM(0..2)_PHY_RESET[PHY_RESET] is set. */
+	dlmx_phy_reset.u64 = csr_rd(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0));
+	dlmx_phy_reset.s.phy_reset = 1;
+	csr_wr(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0), dlmx_phy_reset.u64);
+
+	/* 2. If SGMII or QSGMII or RXAUI (i.e. if DLM0) set
+	 *    GSER(0)_DLM(0)_MPLL_EN[MPLL_EN] to one.
+	 */
+	/* 7. Set GSER0_DLM0_MPLL_EN[MPLL_EN] = 1 */
+	dlmx_mpll_en.u64 = csr_rd(CVMX_GSERX_DLMX_MPLL_EN(0, 0));
+	dlmx_mpll_en.s.mpll_en = 1;
+	csr_wr(CVMX_GSERX_DLMX_MPLL_EN(0, 0), dlmx_mpll_en.u64);
+
+	/* 3. Set GSER(0)_DLM(0..2)_MPLL_MULTIPLIER[MPLL_MULTIPLIER]
+	 *    to the value in the preceding table, which is different
+	 *    than the desired setting prescribed by the HRM.
+	 */
+	mpll_multiplier.u64 = csr_rd(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0));
+	if (gmx_ref_clk == 100)
+		mpll_multiplier.s.mpll_multiplier = 35;
+	else if (gmx_ref_clk == 125)
+		mpll_multiplier.s.mpll_multiplier = 56;
+	else
+		mpll_multiplier.s.mpll_multiplier = 45;
+	debug("%s: Setting mpll multiplier to %u for DLM%d, baud %d, clock rate %uMHz\n",
+	      __func__, mpll_multiplier.s.mpll_multiplier, qlm, baud_mhz, gmx_ref_clk);
+
+	csr_wr(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0), mpll_multiplier.u64);
+
+	/* 5. Clear GSER0_DLM0_TEST_POWERDOWN[TEST_POWERDOWN] */
+	dlmx_test_powerdown.u64 = csr_rd(CVMX_GSERX_DLMX_TEST_POWERDOWN(qlm, 0));
+	dlmx_test_powerdown.s.test_powerdown = 0;
+	csr_wr(CVMX_GSERX_DLMX_TEST_POWERDOWN(qlm, 0), dlmx_test_powerdown.u64);
+
+	/* 6. Set GSER0_DLM0_REF_SSP_EN[REF_SSP_EN] = 1 */
+	dlmx_ref_ssp_en.u64 = csr_rd(CVMX_GSERX_DLMX_REF_SSP_EN(qlm, 0));
+	dlmx_ref_ssp_en.s.ref_ssp_en = 1;
+	csr_wr(CVMX_GSERX_DLMX_REF_SSP_EN(0, 0), dlmx_ref_ssp_en.u64);
+
+	/* 8. Clear GSER0_DLM0_PHY_RESET[PHY_RESET] = 0 */
+	dlmx_phy_reset.u64 = csr_rd(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0));
+	dlmx_phy_reset.s.phy_reset = 0;
+	csr_wr(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0), dlmx_phy_reset.u64);
+
+	/* 5. If PCIe or SATA (i.e. if DLM1 or DLM2), set both MPLL_EN
+	 * and MPLL_EN_OVRD to one in GSER(0)_PHY(1..2)_OVRD_IN_LO.
+	 */
+
+	/* 6. Decrease MPLL_MULTIPLIER by one continually until it
+	 * reaches the desired long-term setting, ensuring that each
+	 * MPLL_MULTIPLIER value is constant for at least 1 msec before
+	 * changing to the next value.  The desired long-term setting is
+	 * as indicated in HRM tables 21-1, 21-2, and 21-3.  This is not
+	 * required with the HRM sequence.
+	 */
+	mpll_multiplier.u64 = csr_rd(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0));
+	__cvmx_qlm_set_mult(qlm, baud_mhz, mpll_multiplier.s.mpll_multiplier);
+
+	/* 9. Poll until the MPLL locks. Wait for
+	 *    GSER0_DLM0_MPLL_STATUS[MPLL_STATUS] = 1
+	 */
+	if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_DLMX_MPLL_STATUS(qlm, 0),
+				  cvmx_gserx_dlmx_mpll_status_t, mpll_status, ==, 1, 10000)) {
+		printf("PLL for DLM%d failed to lock\n", qlm);
+		return -1;
+	}
+	return 0;
+}
+
+static int __dlm0_setup_tx_cn70xx(int speed, int ref_clk_sel)
+{
+	int need0, need1;
+	cvmx_gmxx_inf_mode_t mode0, mode1;
+	cvmx_gserx_dlmx_tx_rate_t rate;
+	cvmx_gserx_dlmx_tx_en_t en;
+	cvmx_gserx_dlmx_tx_cm_en_t cm_en;
+	cvmx_gserx_dlmx_tx_data_en_t data_en;
+	cvmx_gserx_dlmx_tx_reset_t tx_reset;
+
+	debug("%s(%d, %d)\n", __func__, speed, ref_clk_sel);
+	mode0.u64 = csr_rd(CVMX_GMXX_INF_MODE(0));
+	mode1.u64 = csr_rd(CVMX_GMXX_INF_MODE(1));
+
+	/* Which lanes do we need? */
+	need0 = (mode0.s.mode != CVMX_GMX_INF_MODE_DISABLED);
+	need1 = (mode1.s.mode != CVMX_GMX_INF_MODE_DISABLED) ||
+		(mode0.s.mode == CVMX_GMX_INF_MODE_RXAUI);
+
+	/* 1. Write GSER0_DLM0_TX_RATE[TXn_RATE] (Set according to required
+	 *    data rate (see Table 21-1).
+	 */
+	rate.u64 = csr_rd(CVMX_GSERX_DLMX_TX_RATE(0, 0));
+	debug("%s: speed: %d\n", __func__, speed);
+	switch (speed) {
+	case 1250:
+	case 2500:
+		switch (ref_clk_sel) {
+		case OCTEON_QLM_REF_CLK_100MHZ: /* 100MHz */
+		case OCTEON_QLM_REF_CLK_125MHZ: /* 125MHz */
+		case OCTEON_QLM_REF_CLK_156MHZ: /* 156.25MHz */
+			rate.s.tx0_rate = (mode0.s.mode == CVMX_GMX_INF_MODE_SGMII) ? 2 : 0;
+			rate.s.tx1_rate = (mode1.s.mode == CVMX_GMX_INF_MODE_SGMII) ? 2 : 0;
+			break;
+		default:
+			printf("Invalid reference clock select %d\n", ref_clk_sel);
+			return -1;
+		}
+		break;
+	case 3125:
+		switch (ref_clk_sel) {
+		case OCTEON_QLM_REF_CLK_125MHZ: /* 125MHz */
+		case OCTEON_QLM_REF_CLK_156MHZ: /* 156.25MHz */
+			rate.s.tx0_rate = (mode0.s.mode == CVMX_GMX_INF_MODE_SGMII) ? 1 : 0;
+			rate.s.tx1_rate = (mode1.s.mode == CVMX_GMX_INF_MODE_SGMII) ? 1 : 0;
+			break;
+		default:
+			printf("Invalid reference clock select %d\n", ref_clk_sel);
+			return -1;
+		}
+		break;
+	case 5000: /* QSGMII only */
+		switch (ref_clk_sel) {
+		case OCTEON_QLM_REF_CLK_100MHZ: /* 100MHz */
+			rate.s.tx0_rate = 0;
+			rate.s.tx1_rate = 0;
+			break;
+		case OCTEON_QLM_REF_CLK_125MHZ: /* 125MHz */
+		case OCTEON_QLM_REF_CLK_156MHZ: /* 156.25MHz */
+			rate.s.tx0_rate = 0;
+			rate.s.tx1_rate = 0;
+			break;
+		default:
+			printf("Invalid reference clock select %d\n", ref_clk_sel);
+			return -1;
+		}
+		break;
+	case 6250:
+		switch (ref_clk_sel) {
+		case OCTEON_QLM_REF_CLK_125MHZ: /* 125MHz */
+		case OCTEON_QLM_REF_CLK_156MHZ: /* 156.25MHz */
+			rate.s.tx0_rate = 0;
+			rate.s.tx1_rate = 0;
+			break;
+		default:
+			printf("Invalid reference clock select %d\n", ref_clk_sel);
+			return -1;
+		}
+		break;
+	default:
+		printf("%s: Invalid rate %d\n", __func__, speed);
+		return -1;
+	}
+	debug("%s: tx 0 rate: %d, tx 1 rate: %d\n", __func__, rate.s.tx0_rate, rate.s.tx1_rate);
+	csr_wr(CVMX_GSERX_DLMX_TX_RATE(0, 0), rate.u64);
+
+	/* 2. Set GSER0_DLM0_TX_EN[TXn_EN] = 1 */
+	en.u64 = csr_rd(CVMX_GSERX_DLMX_TX_EN(0, 0));
+	en.s.tx0_en = need0;
+	en.s.tx1_en = need1;
+	csr_wr(CVMX_GSERX_DLMX_TX_EN(0, 0), en.u64);
+
+	/* 3 set GSER0_DLM0_TX_CM_EN[TXn_CM_EN] = 1 */
+	cm_en.u64 = csr_rd(CVMX_GSERX_DLMX_TX_CM_EN(0, 0));
+	cm_en.s.tx0_cm_en = need0;
+	cm_en.s.tx1_cm_en = need1;
+	csr_wr(CVMX_GSERX_DLMX_TX_CM_EN(0, 0), cm_en.u64);
+
+	/* 4. Set GSER0_DLM0_TX_DATA_EN[TXn_DATA_EN] = 1 */
+	data_en.u64 = csr_rd(CVMX_GSERX_DLMX_TX_DATA_EN(0, 0));
+	data_en.s.tx0_data_en = need0;
+	data_en.s.tx1_data_en = need1;
+	csr_wr(CVMX_GSERX_DLMX_TX_DATA_EN(0, 0), data_en.u64);
+
+	/* 5. Clear GSER0_DLM0_TX_RESET[TXn_DATA_EN] = 0 */
+	tx_reset.u64 = csr_rd(CVMX_GSERX_DLMX_TX_RESET(0, 0));
+	tx_reset.s.tx0_reset = !need0;
+	tx_reset.s.tx1_reset = !need1;
+	csr_wr(CVMX_GSERX_DLMX_TX_RESET(0, 0), tx_reset.u64);
+
+	/* 6. Poll GSER0_DLM0_TX_STATUS[TXn_STATUS, TXn_CM_STATUS] until both
+	 *    are set to 1. This prevents GMX from transmitting until the DLM
+	 *    is ready.
+	 */
+	if (need0) {
+		if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_DLMX_TX_STATUS(0, 0),
+					  cvmx_gserx_dlmx_tx_status_t, tx0_status, ==, 1, 10000)) {
+			printf("DLM0 TX0 status fail\n");
+			return -1;
+		}
+		if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_DLMX_TX_STATUS(0, 0),
+					  cvmx_gserx_dlmx_tx_status_t, tx0_cm_status, ==, 1,
+					  10000)) {
+			printf("DLM0 TX0 CM status fail\n");
+			return -1;
+		}
+	}
+	if (need1) {
+		if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_DLMX_TX_STATUS(0, 0),
+					  cvmx_gserx_dlmx_tx_status_t, tx1_status, ==, 1, 10000)) {
+			printf("DLM0 TX1 status fail\n");
+			return -1;
+		}
+		if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_DLMX_TX_STATUS(0, 0),
+					  cvmx_gserx_dlmx_tx_status_t, tx1_cm_status, ==, 1,
+					  10000)) {
+			printf("DLM0 TX1 CM status fail\n");
+			return -1;
+		}
+	}
+	return 0;
+}
+
+static int __dlm0_setup_rx_cn70xx(int speed, int ref_clk_sel)
+{
+	int need0, need1;
+	cvmx_gmxx_inf_mode_t mode0, mode1;
+	cvmx_gserx_dlmx_rx_rate_t rate;
+	cvmx_gserx_dlmx_rx_pll_en_t pll_en;
+	cvmx_gserx_dlmx_rx_data_en_t data_en;
+	cvmx_gserx_dlmx_rx_reset_t rx_reset;
+
+	debug("%s(%d, %d)\n", __func__, speed, ref_clk_sel);
+	mode0.u64 = csr_rd(CVMX_GMXX_INF_MODE(0));
+	mode1.u64 = csr_rd(CVMX_GMXX_INF_MODE(1));
+
+	/* Which lanes do we need? */
+	need0 = (mode0.s.mode != CVMX_GMX_INF_MODE_DISABLED);
+	need1 = (mode1.s.mode != CVMX_GMX_INF_MODE_DISABLED) ||
+		(mode0.s.mode == CVMX_GMX_INF_MODE_RXAUI);
+
+	/* 1. Write GSER0_DLM0_RX_RATE[RXn_RATE] (must match the
+	 * GER0_DLM0_TX_RATE[TXn_RATE] setting).
+	 */
+	rate.u64 = csr_rd(CVMX_GSERX_DLMX_RX_RATE(0, 0));
+	switch (speed) {
+	case 1250:
+	case 2500:
+		switch (ref_clk_sel) {
+		case OCTEON_QLM_REF_CLK_100MHZ: /* 100MHz */
+		case OCTEON_QLM_REF_CLK_125MHZ: /* 125MHz */
+		case OCTEON_QLM_REF_CLK_156MHZ: /* 156.25MHz */
+			rate.s.rx0_rate = (mode0.s.mode == CVMX_GMX_INF_MODE_SGMII) ? 2 : 0;
+			rate.s.rx1_rate = (mode1.s.mode == CVMX_GMX_INF_MODE_SGMII) ? 2 : 0;
+			break;
+		default:
+			printf("Invalid reference clock select %d\n", ref_clk_sel);
+			return -1;
+		}
+		break;
+	case 3125:
+		switch (ref_clk_sel) {
+		case OCTEON_QLM_REF_CLK_125MHZ: /* 125MHz */
+		case OCTEON_QLM_REF_CLK_156MHZ: /* 156.25MHz */
+			rate.s.rx0_rate = (mode0.s.mode == CVMX_GMX_INF_MODE_SGMII) ? 1 : 0;
+			rate.s.rx1_rate = (mode1.s.mode == CVMX_GMX_INF_MODE_SGMII) ? 1 : 0;
+			break;
+		default:
+			printf("Invalid reference clock select %d\n", ref_clk_sel);
+			return -1;
+		}
+		break;
+	case 5000: /* QSGMII only */
+		switch (ref_clk_sel) {
+		case OCTEON_QLM_REF_CLK_100MHZ: /* 100MHz */
+		case OCTEON_QLM_REF_CLK_125MHZ: /* 125MHz */
+		case OCTEON_QLM_REF_CLK_156MHZ: /* 156.25MHz */
+			rate.s.rx0_rate = 0;
+			rate.s.rx1_rate = 0;
+			break;
+		default:
+			printf("Invalid reference clock select %d\n", ref_clk_sel);
+			return -1;
+		}
+		break;
+	case 6250:
+		switch (ref_clk_sel) {
+		case OCTEON_QLM_REF_CLK_125MHZ: /* 125MHz */
+		case OCTEON_QLM_REF_CLK_156MHZ: /* 156.25MHz */
+			rate.s.rx0_rate = 0;
+			rate.s.rx1_rate = 0;
+			break;
+		default:
+			printf("Invalid reference clock select %d\n", ref_clk_sel);
+			return -1;
+		}
+		break;
+	default:
+		printf("%s: Invalid rate %d\n", __func__, speed);
+		return -1;
+	}
+	debug("%s: rx 0 rate: %d, rx 1 rate: %d\n", __func__, rate.s.rx0_rate, rate.s.rx1_rate);
+	csr_wr(CVMX_GSERX_DLMX_RX_RATE(0, 0), rate.u64);
+
+	/* 2. Set GSER0_DLM0_RX_PLL_EN[RXn_PLL_EN] = 1 */
+	pll_en.u64 = csr_rd(CVMX_GSERX_DLMX_RX_PLL_EN(0, 0));
+	pll_en.s.rx0_pll_en = need0;
+	pll_en.s.rx1_pll_en = need1;
+	csr_wr(CVMX_GSERX_DLMX_RX_PLL_EN(0, 0), pll_en.u64);
+
+	/* 3. Set GSER0_DLM0_RX_DATA_EN[RXn_DATA_EN] = 1 */
+	data_en.u64 = csr_rd(CVMX_GSERX_DLMX_RX_DATA_EN(0, 0));
+	data_en.s.rx0_data_en = need0;
+	data_en.s.rx1_data_en = need1;
+	csr_wr(CVMX_GSERX_DLMX_RX_DATA_EN(0, 0), data_en.u64);
+
+	/* 4. Clear GSER0_DLM0_RX_RESET[RXn_DATA_EN] = 0. Now the GMX can be
+	 * enabled: set GMX(0..1)_INF_MODE[EN] = 1
+	 */
+	rx_reset.u64 = csr_rd(CVMX_GSERX_DLMX_RX_RESET(0, 0));
+	rx_reset.s.rx0_reset = !need0;
+	rx_reset.s.rx1_reset = !need1;
+	csr_wr(CVMX_GSERX_DLMX_RX_RESET(0, 0), rx_reset.u64);
+
+	return 0;
+}
+
+static int a_clk;
+
+static int __dlm2_sata_uctl_init_cn70xx(void)
+{
+	cvmx_sata_uctl_ctl_t uctl_ctl;
+	const int MAX_A_CLK = 333000000; /* Max of 333Mhz */
+	int divisor, a_clkdiv;
+
+	/* Wait for all voltages to reach a stable stable. Ensure the
+	 * reference clock is up and stable.
+	 */
+
+	/* 2. Wait for IOI reset to deassert. */
+
+	/* 3. Optionally program the GPIO CSRs for SATA features.
+	 *    a. For cold-presence detect:
+	 *	 i. Select a GPIO for the input and program GPIO_SATA_CTL[sel]
+	 *	    for port0 and port1.
+	 *	 ii. Select a GPIO for the output and program
+	 *	     GPIO_BIT_CFG*[OUTPUT_SEL] for port0 and port1.
+	 *    b. For mechanical-presence detect, select a GPIO for the input
+	 *	 and program GPIO_SATA_CTL[SEL] for port0/port1.
+	 *    c. For LED activity, select a GPIO for the output and program
+	 *	 GPIO_BIT_CFG*[OUTPUT_SEL] for port0/port1.
+	 */
+
+	/* 4. Assert all resets:
+	 *    a. UAHC reset: SATA_UCTL_CTL[UAHC_RST] = 1
+	 *    a. UCTL reset: SATA_UCTL_CTL[UCTL_RST] = 1
+	 */
+
+	uctl_ctl.u64 = csr_rd(CVMX_SATA_UCTL_CTL);
+	uctl_ctl.s.sata_uahc_rst = 1;
+	uctl_ctl.s.sata_uctl_rst = 1;
+	csr_wr(CVMX_SATA_UCTL_CTL, uctl_ctl.u64);
+
+	/* 5. Configure the ACLK:
+	 *    a. Reset the clock dividers: SATA_UCTL_CTL[A_CLKDIV_RST] = 1.
+	 *    b. Select the ACLK frequency (400 MHz maximum)
+	 *	 i. SATA_UCTL_CTL[A_CLKDIV] = desired value,
+	 *	 ii. SATA_UCTL_CTL[A_CLKDIV_EN] = 1 to enable the ACLK,
+	 *    c. Deassert the ACLK clock divider reset:
+	 *	 SATA_UCTL_CTL[A_CLKDIV_RST] = 0
+	 */
+	uctl_ctl.u64 = csr_rd(CVMX_SATA_UCTL_CTL);
+	uctl_ctl.s.a_clkdiv_rst = 1;
+	csr_wr(CVMX_SATA_UCTL_CTL, uctl_ctl.u64);
+
+	uctl_ctl.u64 = csr_rd(CVMX_SATA_UCTL_CTL);
+
+	divisor = (gd->bus_clk + MAX_A_CLK - 1) / MAX_A_CLK;
+	if (divisor <= 4) {
+		a_clkdiv = divisor - 1;
+	} else if (divisor <= 6) {
+		a_clkdiv = 4;
+		divisor = 6;
+	} else if (divisor <= 8) {
+		a_clkdiv = 5;
+		divisor = 8;
+	} else if (divisor <= 16) {
+		a_clkdiv = 6;
+		divisor = 16;
+	} else if (divisor <= 24) {
+		a_clkdiv = 7;
+		divisor = 24;
+	} else {
+		printf("Unable to determine SATA clock divisor\n");
+		return -1;
+	}
+
+	/* Calculate the final clock rate */
+	a_clk = gd->bus_clk / divisor;
+
+	uctl_ctl.s.a_clkdiv_sel = a_clkdiv;
+	uctl_ctl.s.a_clk_en = 1;
+	uctl_ctl.s.a_clk_byp_sel = 0;
+	csr_wr(CVMX_SATA_UCTL_CTL, uctl_ctl.u64);
+
+	uctl_ctl.u64 = csr_rd(CVMX_SATA_UCTL_CTL);
+	uctl_ctl.s.a_clkdiv_rst = 0;
+	csr_wr(CVMX_SATA_UCTL_CTL, uctl_ctl.u64);
+
+	udelay(1);
+
+	return 0;
+}
+
+static int __sata_dlm_init_cn70xx(int qlm, int baud_mhz, int ref_clk_sel, int ref_clk_input)
+{
+	cvmx_gserx_sata_cfg_t sata_cfg;
+	cvmx_gserx_sata_lane_rst_t sata_lane_rst;
+	cvmx_gserx_dlmx_phy_reset_t dlmx_phy_reset;
+	cvmx_gserx_dlmx_test_powerdown_t dlmx_test_powerdown;
+	cvmx_gserx_sata_ref_ssp_en_t ref_ssp_en;
+	cvmx_gserx_dlmx_mpll_multiplier_t mpll_multiplier;
+	cvmx_gserx_dlmx_ref_clkdiv2_t ref_clkdiv2;
+	cvmx_sata_uctl_shim_cfg_t shim_cfg;
+	cvmx_gserx_phyx_ovrd_in_lo_t ovrd_in;
+	cvmx_sata_uctl_ctl_t uctl_ctl;
+	int sata_ref_clk;
+
+	debug("%s(%d, %d, %d, %d)\n", __func__, qlm, baud_mhz, ref_clk_sel, ref_clk_input);
+
+	switch (ref_clk_sel) {
+	case 0:
+		sata_ref_clk = 100;
+		break;
+	case 1:
+		sata_ref_clk = 125;
+		break;
+	case 2:
+		sata_ref_clk = 156;
+		break;
+	default:
+		printf("%s: Invalid reference clock select %d for qlm %d\n", __func__,
+		       ref_clk_sel, qlm);
+		return -1;
+	}
+
+	/* 5. Set GSERX0_SATA_CFG[SATA_EN] = 1 to configure DLM2 multiplexing.
+	 */
+	sata_cfg.u64 = csr_rd(CVMX_GSERX_SATA_CFG(0));
+	sata_cfg.s.sata_en = 1;
+	csr_wr(CVMX_GSERX_SATA_CFG(0), sata_cfg.u64);
+
+	/* 1. Write GSER(0)_DLM2_REFCLK_SEL[REFCLK_SEL] if required for
+	 *    reference-clock selection.
+	 */
+	if (ref_clk_input < 2) {
+		csr_wr(CVMX_GSERX_DLMX_REFCLK_SEL(qlm, 0), ref_clk_input);
+		csr_wr(CVMX_GSERX_DLMX_REF_USE_PAD(qlm, 0), 0);
+	} else {
+		csr_wr(CVMX_GSERX_DLMX_REF_USE_PAD(qlm, 0), 1);
+	}
+
+	ref_ssp_en.u64 = csr_rd(CVMX_GSERX_SATA_REF_SSP_EN(0));
+	ref_ssp_en.s.ref_ssp_en = 1;
+	csr_wr(CVMX_GSERX_SATA_REF_SSP_EN(0), ref_ssp_en.u64);
+
+	/* Apply workaround for Errata (G-20669) MPLL may not come up. */
+
+	/* Set REF_CLKDIV2 based on the Ref Clock */
+	ref_clkdiv2.u64 = csr_rd(CVMX_GSERX_DLMX_REF_CLKDIV2(qlm, 0));
+	if (sata_ref_clk == 100)
+		ref_clkdiv2.s.ref_clkdiv2 = 0;
+	else
+		ref_clkdiv2.s.ref_clkdiv2 = 1;
+	csr_wr(CVMX_GSERX_DLMX_REF_CLKDIV2(qlm, 0), ref_clkdiv2.u64);
+
+	/* 1. Ensure GSER(0)_DLM(0..2)_PHY_RESET[PHY_RESET] is set. */
+	dlmx_phy_reset.u64 = csr_rd(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0));
+	dlmx_phy_reset.s.phy_reset = 1;
+	csr_wr(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0), dlmx_phy_reset.u64);
+
+	/* 2. If SGMII or QSGMII or RXAUI (i.e. if DLM0) set
+	 *    GSER(0)_DLM(0)_MPLL_EN[MPLL_EN] to one.
+	 */
+
+	/* 3. Set GSER(0)_DLM(0..2)_MPLL_MULTIPLIER[MPLL_MULTIPLIER]
+	 *    to the value in the preceding table, which is different
+	 *    than the desired setting prescribed by the HRM.
+	 */
+
+	mpll_multiplier.u64 = csr_rd(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0));
+	if (sata_ref_clk == 100)
+		mpll_multiplier.s.mpll_multiplier = 35;
+	else
+		mpll_multiplier.s.mpll_multiplier = 56;
+	csr_wr(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0), mpll_multiplier.u64);
+
+	/* 3. Clear GSER0_DLM2_TEST_POWERDOWN[TEST_POWERDOWN] = 0 */
+	dlmx_test_powerdown.u64 = csr_rd(CVMX_GSERX_DLMX_TEST_POWERDOWN(qlm, 0));
+	dlmx_test_powerdown.s.test_powerdown = 0;
+	csr_wr(CVMX_GSERX_DLMX_TEST_POWERDOWN(qlm, 0), dlmx_test_powerdown.u64);
+
+	/* 4. Clear either/both lane0 and lane1 resets:
+	 *    GSER0_SATA_LANE_RST[L0_RST, L1_RST] = 0.
+	 */
+	sata_lane_rst.u64 = csr_rd(CVMX_GSERX_SATA_LANE_RST(0));
+	sata_lane_rst.s.l0_rst = 0;
+	sata_lane_rst.s.l1_rst = 0;
+	csr_wr(CVMX_GSERX_SATA_LANE_RST(0), sata_lane_rst.u64);
+
+	udelay(1);
+
+	/* 5. Clear GSER0_DLM2_PHY_RESET */
+	dlmx_phy_reset.u64 = csr_rd(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0));
+	dlmx_phy_reset.s.phy_reset = 0;
+	csr_wr(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0), dlmx_phy_reset.u64);
+
+	/* 6. If PCIe or SATA (i.e. if DLM1 or DLM2), set both MPLL_EN
+	 * and MPLL_EN_OVRD to one in GSER(0)_PHY(1..2)_OVRD_IN_LO.
+	 */
+	ovrd_in.u64 = csr_rd(CVMX_GSERX_PHYX_OVRD_IN_LO(qlm, 0));
+	ovrd_in.s.mpll_en = 1;
+	ovrd_in.s.mpll_en_ovrd = 1;
+	csr_wr(CVMX_GSERX_PHYX_OVRD_IN_LO(qlm, 0), ovrd_in.u64);
+
+	/* 7. Decrease MPLL_MULTIPLIER by one continually until it reaches
+	 *   the desired long-term setting, ensuring that each MPLL_MULTIPLIER
+	 *   value is constant for at least 1 msec before changing to the next
+	 *   value. The desired long-term setting is as indicated in HRM tables
+	 *   21-1, 21-2, and 21-3. This is not required with the HRM
+	 *   sequence.
+	 */
+	mpll_multiplier.u64 = csr_rd(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0));
+	if (sata_ref_clk == 100)
+		mpll_multiplier.s.mpll_multiplier = 0x1e;
+	else
+		mpll_multiplier.s.mpll_multiplier = 0x30;
+	csr_wr(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0), mpll_multiplier.u64);
+
+	if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_DLMX_MPLL_STATUS(qlm, 0),
+				  cvmx_gserx_dlmx_mpll_status_t, mpll_status, ==, 1, 10000)) {
+		printf("ERROR: SATA MPLL failed to set\n");
+		return -1;
+	}
+
+	if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_DLMX_RX_STATUS(qlm, 0), cvmx_gserx_dlmx_rx_status_t,
+				  rx0_status, ==, 1, 10000)) {
+		printf("ERROR: SATA RX0_STATUS failed to set\n");
+		return -1;
+	}
+	if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_DLMX_RX_STATUS(qlm, 0), cvmx_gserx_dlmx_rx_status_t,
+				  rx1_status, ==, 1, 10000)) {
+		printf("ERROR: SATA RX1_STATUS failed to set\n");
+		return -1;
+	}
+
+	/* 8. Deassert UCTL and UAHC resets:
+	 *    a. SATA_UCTL_CTL[UCTL_RST] = 0
+	 *    b. SATA_UCTL_CTL[UAHC_RST] = 0
+	 *    c. Wait 10 ACLK cycles before accessing any ACLK-only registers.
+	 */
+	uctl_ctl.u64 = csr_rd(CVMX_SATA_UCTL_CTL);
+	uctl_ctl.s.sata_uctl_rst = 0;
+	uctl_ctl.s.sata_uahc_rst = 0;
+	csr_wr(CVMX_SATA_UCTL_CTL, uctl_ctl.u64);
+
+	udelay(1);
+
+	/* 9. Enable conditional SCLK of UCTL by writing
+	 *    SATA_UCTL_CTL[CSCLK_EN] = 1
+	 */
+	uctl_ctl.u64 = csr_rd(CVMX_SATA_UCTL_CTL);
+	uctl_ctl.s.csclk_en = 1;
+	csr_wr(CVMX_SATA_UCTL_CTL, uctl_ctl.u64);
+
+	/* 10. Initialize UAHC as described in the AHCI Specification (UAHC_*
+	 *     registers
+	 */
+
+	/* set-up endian mode */
+	shim_cfg.u64 = csr_rd(CVMX_SATA_UCTL_SHIM_CFG);
+	shim_cfg.s.dma_endian_mode = 1;
+	shim_cfg.s.csr_endian_mode = 3;
+	csr_wr(CVMX_SATA_UCTL_SHIM_CFG, shim_cfg.u64);
+
+	return 0;
+}
+
+/**
+ * Initializes DLM 4 for SATA
+ *
+ * @param qlm		Must be 4.
+ * @param baud_mhz	Baud rate for SATA
+ * @param ref_clk_sel	Selects the speed of the reference clock where:
+ *			0 = 100MHz, 1 = 125MHz and 2 = 156.25MHz
+ * @param ref_clk_input	Reference clock input where 0 = external QLM clock,
+ *			1 = qlmc_ref_clk0 and 2 = qlmc_ref_clk1
+ */
+static int __sata_dlm_init_cn73xx(int qlm, int baud_mhz, int ref_clk_sel, int ref_clk_input)
+{
+	cvmx_sata_uctl_shim_cfg_t shim_cfg;
+	cvmx_gserx_refclk_sel_t refclk_sel;
+	cvmx_gserx_phy_ctl_t phy_ctl;
+	cvmx_gserx_rx_pwr_ctrl_p2_t pwr_ctrl_p2;
+	cvmx_gserx_lanex_misc_cfg_0_t misc_cfg_0;
+	cvmx_gserx_sata_lane_rst_t lane_rst;
+	cvmx_gserx_pll_px_mode_0_t pmode_0;
+	cvmx_gserx_pll_px_mode_1_t pmode_1;
+	cvmx_gserx_lane_px_mode_0_t lane_pmode_0;
+	cvmx_gserx_lane_px_mode_1_t lane_pmode_1;
+	cvmx_gserx_cfg_t gserx_cfg;
+	cvmx_sata_uctl_ctl_t uctl_ctl;
+	int l;
+	int i;
+
+	/*
+	 * 1. Configure the SATA
+	 */
+
+	/*
+	 * 2. Configure the QLM Reference clock
+	 *    Set GSERX_REFCLK_SEL.COM_CLK_SEL to source reference clock
+	 *    from the external clock mux.
+	 *      GSERX_REFCLK_SEL.USE_COM1 to select qlmc_refclkn/p_1 or
+	 *      leave clear to select qlmc_refclkn/p_0
+	 */
+	refclk_sel.u64 = 0;
+	if (ref_clk_input == 0) { /* External ref clock */
+		refclk_sel.s.com_clk_sel = 0;
+		refclk_sel.s.use_com1 = 0;
+	} else if (ref_clk_input == 1) { /* Common reference clock 0 */
+		refclk_sel.s.com_clk_sel = 1;
+		refclk_sel.s.use_com1 = 0;
+	} else { /* Common reference clock 1 */
+		refclk_sel.s.com_clk_sel = 1;
+		refclk_sel.s.use_com1 = 1;
+	}
+
+	if (ref_clk_sel != 0) {
+		printf("Wrong reference clock selected for QLM4\n");
+		return -1;
+	}
+
+	csr_wr(CVMX_GSERX_REFCLK_SEL(qlm), refclk_sel.u64);
+
+	/* Reset the QLM after changing the reference clock */
+	phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_reset = 1;
+	csr_wr(CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+
+	udelay(1);
+
+	/*
+	 * 3. Configure the QLM for SATA mode set GSERX_CFG.SATA
+	 */
+	gserx_cfg.u64 = 0;
+	gserx_cfg.s.sata = 1;
+	csr_wr(CVMX_GSERX_CFG(qlm), gserx_cfg.u64);
+
+	/*
+	 * 12. Clear the appropriate lane resets
+	 *     clear GSERX_SATA_LANE_RST.LX_RST  where X is the lane number 0-1.
+	 */
+	lane_rst.u64 = csr_rd(CVMX_GSERX_SATA_LANE_RST(qlm));
+	lane_rst.s.l0_rst = 0;
+	lane_rst.s.l1_rst = 0;
+	csr_wr(CVMX_GSERX_SATA_LANE_RST(qlm), lane_rst.u64);
+	csr_rd(CVMX_GSERX_SATA_LANE_RST(qlm));
+
+	udelay(1);
+
+	/*
+	 * 4. Take the PHY out of reset
+	 *    Write GSERX_PHY_CTL.PHY_RESET to a zero
+	 */
+	phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_reset = 0;
+	csr_wr(CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+
+	/* Wait for reset to complete and the PLL to lock */
+	/* PCIe mode doesn't become ready until the PEM block attempts to bring
+	 * the interface up. Skip this check for PCIe
+	 */
+	if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_QLM_STAT(qlm), cvmx_gserx_qlm_stat_t,
+				  rst_rdy, ==, 1, 10000)) {
+		printf("QLM%d: Timeout waiting for GSERX_QLM_STAT[rst_rdy]\n", qlm);
+		return -1;
+	}
+
+	/* Workaround for errata GSER-30310: SATA HDD Not Ready due to
+	 * PHY SDLL/LDLL lockup at 3GHz
+	 */
+	for (i = 0; i < 2; i++) {
+		cvmx_gserx_slicex_pcie1_mode_t pcie1;
+		cvmx_gserx_slicex_pcie2_mode_t pcie2;
+		cvmx_gserx_slicex_pcie3_mode_t pcie3;
+
+		pcie1.u64 = csr_rd(CVMX_GSERX_SLICEX_PCIE1_MODE(i, qlm));
+		pcie1.s.rx_pi_bwsel = 1;
+		pcie1.s.rx_ldll_bwsel = 1;
+		pcie1.s.rx_sdll_bwsel = 1;
+		csr_wr(CVMX_GSERX_SLICEX_PCIE1_MODE(i, qlm), pcie1.u64);
+
+		pcie2.u64 = csr_rd(CVMX_GSERX_SLICEX_PCIE2_MODE(i, qlm));
+		pcie2.s.rx_pi_bwsel = 1;
+		pcie2.s.rx_ldll_bwsel = 1;
+		pcie2.s.rx_sdll_bwsel = 1;
+		csr_wr(CVMX_GSERX_SLICEX_PCIE2_MODE(i, qlm), pcie2.u64);
+
+		pcie3.u64 = csr_rd(CVMX_GSERX_SLICEX_PCIE3_MODE(i, qlm));
+		pcie3.s.rx_pi_bwsel = 1;
+		pcie3.s.rx_ldll_bwsel = 1;
+		pcie3.s.rx_sdll_bwsel = 1;
+		csr_wr(CVMX_GSERX_SLICEX_PCIE3_MODE(i, qlm), pcie3.u64);
+	}
+
+	/*
+	 * 7. Change P2 termination
+	 *    Clear GSERX_RX_PWR_CTRL_P2.P2_RX_SUBBLK_PD[0] (Termination)
+	 */
+	pwr_ctrl_p2.u64 = csr_rd(CVMX_GSERX_RX_PWR_CTRL_P2(qlm));
+	pwr_ctrl_p2.s.p2_rx_subblk_pd &= 0x1e;
+	csr_wr(CVMX_GSERX_RX_PWR_CTRL_P2(qlm), pwr_ctrl_p2.u64);
+
+	/*
+	 * 8. Modify the Electrical IDLE Detect on delay
+	 *    Change GSERX_LANE(0..3)_MISC_CFG_0.EIE_DET_STL_ON_TIME to a 0x4
+	 */
+	for (i = 0; i < 2; i++) {
+		misc_cfg_0.u64 = csr_rd(CVMX_GSERX_LANEX_MISC_CFG_0(i, qlm));
+		misc_cfg_0.s.eie_det_stl_on_time = 4;
+		csr_wr(CVMX_GSERX_LANEX_MISC_CFG_0(i, qlm), misc_cfg_0.u64);
+	}
+
+	/*
+	 * 9. Modify the PLL and Lane Protocol Mode registers to configure
+	 *    the PHY for SATA.
+	 *    (Configure all 3 PLLs, doesn't matter what speed it is configured)
+	 */
+
+	/* Errata (GSER-26724) SATA never indicates GSER QLM_STAT[RST_RDY]
+	 * We program PLL_PX_MODE_0 last due to this errata
+	 */
+	for (l = 0; l < 3; l++) {
+		pmode_1.u64 = csr_rd(CVMX_GSERX_PLL_PX_MODE_1(l, qlm));
+		lane_pmode_0.u64 = csr_rd(CVMX_GSERX_LANE_PX_MODE_0(l, qlm));
+		lane_pmode_1.u64 = csr_rd(CVMX_GSERX_LANE_PX_MODE_1(l, qlm));
+
+		pmode_1.s.pll_cpadj = 0x2;
+		pmode_1.s.pll_opr = 0x0;
+		pmode_1.s.pll_div = 0x1e;
+		pmode_1.s.pll_pcie3en = 0x0;
+		pmode_1.s.pll_16p5en = 0x0;
+
+		lane_pmode_0.s.ctle = 0x0;
+		lane_pmode_0.s.pcie = 0x0;
+		lane_pmode_0.s.tx_ldiv = 0x0;
+		lane_pmode_0.s.srate = 0;
+		lane_pmode_0.s.tx_mode = 0x3;
+		lane_pmode_0.s.rx_mode = 0x3;
+
+		lane_pmode_1.s.vma_mm = 1;
+		lane_pmode_1.s.vma_fine_cfg_sel = 0;
+		lane_pmode_1.s.cdr_fgain = 0xa;
+		lane_pmode_1.s.ph_acc_adj = 0x15;
+
+		if (l == R_2_5G_REFCLK100)
+			lane_pmode_0.s.rx_ldiv = 0x2;
+		else if (l == R_5G_REFCLK100)
+			lane_pmode_0.s.rx_ldiv = 0x1;
+		else
+			lane_pmode_0.s.rx_ldiv = 0x0;
+
+		csr_wr(CVMX_GSERX_PLL_PX_MODE_1(l, qlm), pmode_1.u64);
+		csr_wr(CVMX_GSERX_LANE_PX_MODE_0(l, qlm), lane_pmode_0.u64);
+		csr_wr(CVMX_GSERX_LANE_PX_MODE_1(l, qlm), lane_pmode_1.u64);
+	}
+
+	for (l = 0; l < 3; l++) {
+		pmode_0.u64 = csr_rd(CVMX_GSERX_PLL_PX_MODE_0(l, qlm));
+		pmode_0.s.pll_icp = 0x1;
+		pmode_0.s.pll_rloop = 0x3;
+		pmode_0.s.pll_pcs_div = 0x5;
+		csr_wr(CVMX_GSERX_PLL_PX_MODE_0(l, qlm), pmode_0.u64);
+	}
+
+	for (i = 0; i < 2; i++) {
+		cvmx_gserx_slicex_rx_sdll_ctrl_t rx_sdll;
+
+		rx_sdll.u64 = csr_rd(CVMX_GSERX_SLICEX_RX_SDLL_CTRL(i, qlm));
+		rx_sdll.s.pcs_sds_oob_clk_ctrl = 2;
+		rx_sdll.s.pcs_sds_rx_sdll_tune = 0;
+		rx_sdll.s.pcs_sds_rx_sdll_swsel = 0;
+		csr_wr(CVMX_GSERX_SLICEX_RX_SDLL_CTRL(i, qlm), rx_sdll.u64);
+	}
+
+	for (i = 0; i < 2; i++) {
+		cvmx_gserx_lanex_misc_cfg_0_t misc_cfg;
+
+		misc_cfg.u64 = csr_rd(CVMX_GSERX_LANEX_MISC_CFG_0(i, qlm));
+		misc_cfg.s.use_pma_polarity = 0;
+		misc_cfg.s.cfg_pcs_loopback = 0;
+		misc_cfg.s.pcs_tx_mode_ovrrd_en = 0;
+		misc_cfg.s.pcs_rx_mode_ovrrd_en = 0;
+		misc_cfg.s.cfg_eie_det_cnt = 0;
+		misc_cfg.s.eie_det_stl_on_time = 4;
+		misc_cfg.s.eie_det_stl_off_time = 0;
+		misc_cfg.s.tx_bit_order = 1;
+		misc_cfg.s.rx_bit_order = 1;
+		csr_wr(CVMX_GSERX_LANEX_MISC_CFG_0(i, qlm), misc_cfg.u64);
+	}
+
+	/* Wait for reset to complete and the PLL to lock */
+	/* PCIe mode doesn't become ready until the PEM block attempts to bring
+	 * the interface up. Skip this check for PCIe
+	 */
+	if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_QLM_STAT(qlm), cvmx_gserx_qlm_stat_t,
+				  rst_rdy, ==, 1, 10000)) {
+		printf("QLM%d: Timeout waiting for GSERX_QLM_STAT[rst_rdy]\n", qlm);
+		return -1;
+	}
+
+	/* Poll GSERX_SATA_STATUS for P0_RDY = 1 */
+	if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_SATA_STATUS(qlm), cvmx_gserx_sata_status_t,
+				  p0_rdy, ==, 1, 10000)) {
+		printf("QLM4: Timeout waiting for GSERX_SATA_STATUS[p0_rdy]\n");
+		return -1;
+	}
+
+	/* Poll GSERX_SATA_STATUS for P1_RDY = 1 */
+	if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_SATA_STATUS(qlm), cvmx_gserx_sata_status_t,
+				  p1_rdy, ==, 1, 10000)) {
+		printf("QLM4: Timeout waiting for GSERX_SATA_STATUS[p1_rdy]\n");
+		return -1;
+	}
+
+	udelay(2000);
+
+	/* 6. Deassert UCTL and UAHC resets:
+	 *    a. SATA_UCTL_CTL[UCTL_RST] = 0
+	 *    b. SATA_UCTL_CTL[UAHC_RST] = 0
+	 *    c. Wait 10 ACLK cycles before accessing any ACLK-only registers.
+	 */
+	uctl_ctl.u64 = csr_rd(CVMX_SATA_UCTL_CTL);
+	uctl_ctl.s.sata_uctl_rst = 0;
+	uctl_ctl.s.sata_uahc_rst = 0;
+	csr_wr(CVMX_SATA_UCTL_CTL, uctl_ctl.u64);
+
+	udelay(1);
+
+	/* 7. Enable conditional SCLK of UCTL by writing
+	 *    SATA_UCTL_CTL[CSCLK_EN] = 1
+	 */
+	uctl_ctl.u64 = csr_rd(CVMX_SATA_UCTL_CTL);
+	uctl_ctl.s.csclk_en = 1;
+	csr_wr(CVMX_SATA_UCTL_CTL, uctl_ctl.u64);
+
+	/* set-up endian mode */
+	shim_cfg.u64 = csr_rd(CVMX_SATA_UCTL_SHIM_CFG);
+	shim_cfg.s.dma_endian_mode = 1;
+	shim_cfg.s.csr_endian_mode = 3;
+	csr_wr(CVMX_SATA_UCTL_SHIM_CFG, shim_cfg.u64);
+
+	return 0;
+}
+
+static int __dlm2_sata_uahc_init_cn70xx(int baud_mhz)
+{
+	cvmx_sata_uahc_gbl_cap_t gbl_cap;
+	cvmx_sata_uahc_px_sctl_t sctl;
+	cvmx_sata_uahc_gbl_pi_t pi;
+	cvmx_sata_uahc_px_cmd_t cmd;
+	cvmx_sata_uahc_px_sctl_t sctl0, sctl1;
+	cvmx_sata_uahc_px_ssts_t ssts;
+	cvmx_sata_uahc_px_tfd_t tfd;
+	cvmx_sata_uahc_gbl_timer1ms_t gbl_timer1ms;
+	u64 done;
+	int result = -1;
+	int retry_count = 0;
+	int spd;
+
+	/* From the synopsis data book, SATA_UAHC_GBL_TIMER1MS is the
+	 * AMBA clock in MHz * 1000, which is a_clk(Hz) / 1000
+	 */
+	gbl_timer1ms.u32 = csr_rd32(CVMX_SATA_UAHC_GBL_TIMER1MS);
+	gbl_timer1ms.s.timv = a_clk / 1000;
+	csr_wr32(CVMX_SATA_UAHC_GBL_TIMER1MS, gbl_timer1ms.u32);
+	gbl_timer1ms.u32 = csr_rd32(CVMX_SATA_UAHC_GBL_TIMER1MS);
+
+	/* Set-u global capabilities reg (GBL_CAP) */
+	gbl_cap.u32 = csr_rd32(CVMX_SATA_UAHC_GBL_CAP);
+	debug("%s: SATA_UAHC_GBL_CAP before: 0x%x\n", __func__, gbl_cap.u32);
+	gbl_cap.s.sss = 1;
+	gbl_cap.s.smps = 1;
+	csr_wr32(CVMX_SATA_UAHC_GBL_CAP, gbl_cap.u32);
+	gbl_cap.u32 = csr_rd32(CVMX_SATA_UAHC_GBL_CAP);
+	debug("%s: SATA_UAHC_GBL_CAP after: 0x%x\n", __func__, gbl_cap.u32);
+
+	/* Set-up global hba control reg (interrupt enables) */
+	/* Set-up port SATA control registers (speed limitation) */
+	if (baud_mhz == 1500)
+		spd = 1;
+	else if (baud_mhz == 3000)
+		spd = 2;
+	else
+		spd = 3;
+
+	sctl.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SCTL(0));
+	debug("%s: SATA_UAHC_P0_SCTL before: 0x%x\n", __func__, sctl.u32);
+	sctl.s.spd = spd;
+	csr_wr32(CVMX_SATA_UAHC_PX_SCTL(0), sctl.u32);
+	sctl.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SCTL(0));
+	debug("%s: SATA_UAHC_P0_SCTL after: 0x%x\n", __func__, sctl.u32);
+	sctl.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SCTL(1));
+	debug("%s: SATA_UAHC_P1_SCTL before: 0x%x\n", __func__, sctl.u32);
+	sctl.s.spd = spd;
+	csr_wr32(CVMX_SATA_UAHC_PX_SCTL(1), sctl.u32);
+	sctl.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SCTL(1));
+	debug("%s: SATA_UAHC_P1_SCTL after: 0x%x\n", __func__, sctl.u32);
+
+	/* Set-up ports implemented reg. */
+	pi.u32 = csr_rd32(CVMX_SATA_UAHC_GBL_PI);
+	debug("%s: SATA_UAHC_GBL_PI before: 0x%x\n", __func__, pi.u32);
+	pi.s.pi = 3;
+	csr_wr32(CVMX_SATA_UAHC_GBL_PI, pi.u32);
+	pi.u32 = csr_rd32(CVMX_SATA_UAHC_GBL_PI);
+	debug("%s: SATA_UAHC_GBL_PI after: 0x%x\n", __func__, pi.u32);
+
+retry0:
+	/* Clear port SERR and IS registers */
+	csr_wr32(CVMX_SATA_UAHC_PX_SERR(0), csr_rd32(CVMX_SATA_UAHC_PX_SERR(0)));
+	csr_wr32(CVMX_SATA_UAHC_PX_IS(0), csr_rd32(CVMX_SATA_UAHC_PX_IS(0)));
+
+	/* Set spin-up, power on, FIS RX enable, start, active */
+	cmd.u32 = csr_rd32(CVMX_SATA_UAHC_PX_CMD(0));
+	debug("%s: SATA_UAHC_P0_CMD before: 0x%x\n", __func__, cmd.u32);
+	cmd.s.fre = 1;
+	cmd.s.sud = 1;
+	cmd.s.pod = 1;
+	cmd.s.st = 1;
+	cmd.s.icc = 1;
+	cmd.s.fbscp = 1; /* Enable FIS-based switching */
+	csr_wr32(CVMX_SATA_UAHC_PX_CMD(0), cmd.u32);
+	cmd.u32 = csr_rd32(CVMX_SATA_UAHC_PX_CMD(0));
+	debug("%s: SATA_UAHC_P0_CMD after: 0x%x\n", __func__, cmd.u32);
+
+	sctl0.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SCTL(0));
+	sctl0.s.det = 1;
+	csr_wr32(CVMX_SATA_UAHC_PX_SCTL(0), sctl0.u32);
+
+	/* check status */
+	done = get_timer(0);
+	while (1) {
+		ssts.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SSTS(0));
+
+		if (ssts.s.ipm == 1 && ssts.s.det == 3) {
+			result = 0;
+			break;
+		} else if (get_timer(done) > 100) {
+			result = -1;
+			break;
+		}
+
+		udelay(100);
+	}
+
+	if (result != -1) {
+		/* Clear the PxSERR Register, by writing '1s' to each
+		 * implemented bit location
+		 */
+		csr_wr32(CVMX_SATA_UAHC_PX_SERR(0), -1);
+
+		/*
+		 * Wait for indication that SATA drive is ready. This is
+		 * determined via an examination of PxTFD.STS. If PxTFD.STS.BSY
+		 * PxTFD.STS.DRQ, and PxTFD.STS.ERR are all '0', prior to the
+		 * maximum allowed time as specified in the ATA/ATAPI-7
+		 * specification, the device is ready.
+		 */
+		/*
+		 * Wait for the device to be ready. BSY(7), DRQ(3), and ERR(0)
+		 * must be clear
+		 */
+		done = get_timer(0);
+		while (1) {
+			tfd.u32 = csr_rd32(CVMX_SATA_UAHC_PX_TFD(0));
+			if ((tfd.s.sts & 0x89) == 0) {
+				result = 0;
+				break;
+			} else if (get_timer(done) > 500) {
+				if (retry_count < 3) {
+					sctl0.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SCTL(0));
+					sctl0.s.det = 1; /* Perform interface reset */
+					csr_wr32(CVMX_SATA_UAHC_PX_SCTL(0), sctl0.u32);
+					udelay(1000); /* 1ms dicated by AHCI 1.3 spec */
+					sctl0.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SCTL(0));
+					sctl0.s.det = 0; /* Perform interface reset */
+					csr_wr32(CVMX_SATA_UAHC_PX_SCTL(0), sctl0.u32);
+					retry_count++;
+					goto retry0;
+				}
+				result = -1;
+				break;
+			}
+
+			udelay(100);
+		}
+	}
+
+	if (result == -1)
+		printf("SATA0: not available\n");
+	else
+		printf("SATA0: available\n");
+
+	sctl1.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SCTL(1));
+	sctl1.s.det = 1;
+	csr_wr32(CVMX_SATA_UAHC_PX_SCTL(1), sctl1.u32);
+
+	result = -1;
+	retry_count = 0;
+
+retry1:
+	/* Clear port SERR and IS registers */
+	csr_wr32(CVMX_SATA_UAHC_PX_SERR(1), csr_rd32(CVMX_SATA_UAHC_PX_SERR(1)));
+	csr_wr32(CVMX_SATA_UAHC_PX_IS(1), csr_rd32(CVMX_SATA_UAHC_PX_IS(1)));
+
+	/* Set spin-up, power on, FIS RX enable, start, active */
+	cmd.u32 = csr_rd32(CVMX_SATA_UAHC_PX_CMD(1));
+	debug("%s: SATA_UAHC_P1_CMD before: 0x%x\n", __func__, cmd.u32);
+	cmd.s.fre = 1;
+	cmd.s.sud = 1;
+	cmd.s.pod = 1;
+	cmd.s.st = 1;
+	cmd.s.icc = 1;
+	cmd.s.fbscp = 1; /* Enable FIS-based switching */
+	csr_wr32(CVMX_SATA_UAHC_PX_CMD(1), cmd.u32);
+	cmd.u32 = csr_rd32(CVMX_SATA_UAHC_PX_CMD(1));
+	debug("%s: SATA_UAHC_P1_CMD after: 0x%x\n", __func__, cmd.u32);
+
+	/* check status */
+	done = get_timer(0);
+	while (1) {
+		ssts.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SSTS(1));
+
+		if (ssts.s.ipm == 1 && ssts.s.det == 3) {
+			result = 0;
+			break;
+		} else if (get_timer(done) > 1000) {
+			result = -1;
+			break;
+		}
+
+		udelay(100);
+	}
+
+	if (result != -1) {
+		/* Clear the PxSERR Register, by writing '1s' to each
+		 * implemented bit location
+		 */
+		csr_wr32(CVMX_SATA_UAHC_PX_SERR(1), csr_rd32(CVMX_SATA_UAHC_PX_SERR(1)));
+
+		/*
+		 * Wait for indication that SATA drive is ready. This is
+		 * determined via an examination of PxTFD.STS. If PxTFD.STS.BSY
+		 * PxTFD.STS.DRQ, and PxTFD.STS.ERR are all '0', prior to the
+		 * maximum allowed time as specified in the ATA/ATAPI-7
+		 * specification, the device is ready.
+		 */
+		/*
+		 * Wait for the device to be ready. BSY(7), DRQ(3), and ERR(0)
+		 * must be clear
+		 */
+		done = get_timer(0);
+		while (1) {
+			tfd.u32 = csr_rd32(CVMX_SATA_UAHC_PX_TFD(1));
+			if ((tfd.s.sts & 0x89) == 0) {
+				result = 0;
+				break;
+			} else if (get_timer(done) > 500) {
+				if (retry_count < 3) {
+					sctl0.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SCTL(1));
+					sctl0.s.det = 1; /* Perform interface reset */
+					csr_wr32(CVMX_SATA_UAHC_PX_SCTL(1), sctl0.u32);
+					udelay(1000); /* 1ms dicated by AHCI 1.3 spec */
+					sctl0.u32 = csr_rd32(CVMX_SATA_UAHC_PX_SCTL(1));
+					sctl0.s.det = 0; /* Perform interface reset */
+					csr_wr32(CVMX_SATA_UAHC_PX_SCTL(1), sctl0.u32);
+					retry_count++;
+					goto retry1;
+				}
+				result = -1;
+				break;
+			}
+
+			udelay(100);
+		}
+	}
+
+	if (result == -1)
+		printf("SATA1: not available\n");
+	else
+		printf("SATA1: available\n");
+
+	return 0;
+}
+
+static int __sata_bist_cn70xx(int qlm, int baud_mhz, int ref_clk_sel, int ref_clk_input)
+{
+	cvmx_sata_uctl_bist_status_t bist_status;
+	cvmx_sata_uctl_ctl_t uctl_ctl;
+	cvmx_sata_uctl_shim_cfg_t shim_cfg;
+	u64 done;
+	int result = -1;
+
+	debug("%s(%d, %d, %d, %d)\n", __func__, qlm, baud_mhz, ref_clk_sel, ref_clk_input);
+	bist_status.u64 = csr_rd(CVMX_SATA_UCTL_BIST_STATUS);
+
+	{
+		if (__dlm2_sata_uctl_init_cn70xx()) {
+			printf("ERROR: Failed to initialize SATA UCTL CSRs\n");
+			return -1;
+		}
+		if (OCTEON_IS_MODEL(OCTEON_CN73XX))
+			result = __sata_dlm_init_cn73xx(qlm, baud_mhz, ref_clk_sel, ref_clk_input);
+		else
+			result = __sata_dlm_init_cn70xx(qlm, baud_mhz, ref_clk_sel, ref_clk_input);
+		if (result) {
+			printf("ERROR: Failed to initialize SATA GSER CSRs\n");
+			return -1;
+		}
+
+		uctl_ctl.u64 = csr_rd(CVMX_SATA_UCTL_CTL);
+		uctl_ctl.s.start_bist = 1;
+		csr_wr(CVMX_SATA_UCTL_CTL, uctl_ctl.u64);
+
+		/* Set-up for a 1 sec timer. */
+		done = get_timer(0);
+		while (1) {
+			bist_status.u64 = csr_rd(CVMX_SATA_UCTL_BIST_STATUS);
+			if ((bist_status.s.uctl_xm_r_bist_ndone |
+			     bist_status.s.uctl_xm_w_bist_ndone |
+			     bist_status.s.uahc_p0_rxram_bist_ndone |
+			     bist_status.s.uahc_p1_rxram_bist_ndone |
+			     bist_status.s.uahc_p0_txram_bist_ndone |
+			     bist_status.s.uahc_p1_txram_bist_ndone) == 0) {
+				result = 0;
+				break;
+			} else if (get_timer(done) > 1000) {
+				result = -1;
+				break;
+			}
+
+			udelay(100);
+		}
+		if (result == -1) {
+			printf("ERROR: SATA_UCTL_BIST_STATUS = 0x%llx\n",
+			       (unsigned long long)bist_status.u64);
+			return -1;
+		}
+
+		debug("%s: Initializing UAHC\n", __func__);
+		if (__dlm2_sata_uahc_init_cn70xx(baud_mhz)) {
+			printf("ERROR: Failed to initialize SATA UAHC CSRs\n");
+			return -1;
+		}
+	}
+
+	/* Change CSR_ENDIAN_MODE to big endian to use Open Source AHCI SATA
+	 * driver
+	 */
+	shim_cfg.u64 = csr_rd(CVMX_SATA_UCTL_SHIM_CFG);
+	shim_cfg.s.csr_endian_mode = 1;
+	csr_wr(CVMX_SATA_UCTL_SHIM_CFG, shim_cfg.u64);
+
+	return 0;
+}
+
+static int __setup_sata(int qlm, int baud_mhz, int ref_clk_sel, int ref_clk_input)
+{
+	debug("%s(%d, %d, %d, %d)\n", __func__, qlm, baud_mhz, ref_clk_sel, ref_clk_input);
+	return __sata_bist_cn70xx(qlm, baud_mhz, ref_clk_sel, ref_clk_input);
+}
+
+static int __dlmx_setup_pcie_cn70xx(int qlm, enum cvmx_qlm_mode mode, int gen2, int rc,
+				    int ref_clk_sel, int ref_clk_input)
+{
+	cvmx_gserx_dlmx_phy_reset_t dlmx_phy_reset;
+	cvmx_gserx_dlmx_test_powerdown_t dlmx_test_powerdown;
+	cvmx_gserx_dlmx_mpll_multiplier_t mpll_multiplier;
+	cvmx_gserx_dlmx_ref_clkdiv2_t ref_clkdiv2;
+	static const u8 ref_clk_mult[2] = { 35, 56 }; /* 100 & 125 MHz ref clock supported. */
+
+	debug("%s(%d, %d, %d, %d, %d, %d)\n", __func__, qlm, mode, gen2, rc, ref_clk_sel,
+	      ref_clk_input);
+	if (rc == 0) {
+		debug("Skipping initializing PCIe dlm %d in endpoint mode\n", qlm);
+		return 0;
+	}
+
+	if (qlm > 0 && ref_clk_input > 1) {
+		printf("%s: Error: ref_clk_input can only be 0 or 1 for QLM %d\n",
+		       __func__, qlm);
+		return -1;
+	}
+
+	if (ref_clk_sel > OCTEON_QLM_REF_CLK_125MHZ) {
+		printf("%s: Error: ref_clk_sel can only be 100 or 125 MHZ.\n", __func__);
+		return -1;
+	}
+
+	/* 1. Write GSER0_DLM(1..2)_REFCLK_SEL[REFCLK_SEL] if required for
+	 *    reference-clock selection
+	 */
+
+	csr_wr(CVMX_GSERX_DLMX_REFCLK_SEL(qlm, 0), ref_clk_input);
+
+	/* 2. If required, write GSER0_DLM(1..2)_REF_CLKDIV2[REF_CLKDIV2] = 1
+	 *    (must be set if reference clock >= 100 MHz)
+	 */
+
+	/* 4. Configure the PCIE PIPE:
+	 *  a. Write GSER0_PCIE_PIPE_PORT_SEL[PIPE_PORT_SEL] to configure the
+	 *     PCIE PIPE.
+	 *	0x0 = disables all pipes
+	 *	0x1 = enables pipe0 only (PEM0 4-lane)
+	 *	0x2 = enables pipes 0 and 1 (PEM0 and PEM1 2-lanes each)
+	 *	0x3 = enables pipes 0, 1, 2, and 3 (PEM0, PEM1, and PEM3 are
+	 *	      one-lane each)
+	 *  b. Configure GSER0_PCIE_PIPE_PORT_SEL[CFG_PEM1_DLM2]. If PEM1 is
+	 *     to be configured, this bit must reflect which DLM it is logically
+	 *     tied to. This bit sets multiplexing logic in GSER, and it is used
+	 *     by the RST logic to determine when the MAC can come out of reset.
+	 *	0 = PEM1 is tied to DLM1 (for 3 x 1 PCIe mode).
+	 *	1 = PEM1 is tied to DLM2 (for all other PCIe modes).
+	 */
+	if (qlm == 1) {
+		cvmx_gserx_pcie_pipe_port_sel_t pipe_port;
+
+		pipe_port.u64 = csr_rd(CVMX_GSERX_PCIE_PIPE_PORT_SEL(0));
+		pipe_port.s.cfg_pem1_dlm2 = (mode == CVMX_QLM_MODE_PCIE_1X1) ? 1 : 0;
+		pipe_port.s.pipe_port_sel =
+				(mode == CVMX_QLM_MODE_PCIE) ? 1 : /* PEM0 only */
+				(mode == CVMX_QLM_MODE_PCIE_1X2) ? 2 : /* PEM0-1 */
+				(mode == CVMX_QLM_MODE_PCIE_1X1) ? 3 : /* PEM0-2 */
+				(mode == CVMX_QLM_MODE_PCIE_2X1) ? 3 : /* PEM0-1 */
+				0; /* PCIe disabled */
+		csr_wr(CVMX_GSERX_PCIE_PIPE_PORT_SEL(0), pipe_port.u64);
+	}
+
+	/* Apply workaround for Errata (G-20669) MPLL may not come up. */
+
+	/* Set REF_CLKDIV2 based on the Ref Clock */
+	ref_clkdiv2.u64 = csr_rd(CVMX_GSERX_DLMX_REF_CLKDIV2(qlm, 0));
+	ref_clkdiv2.s.ref_clkdiv2 = ref_clk_sel > 0;
+	csr_wr(CVMX_GSERX_DLMX_REF_CLKDIV2(qlm, 0), ref_clkdiv2.u64);
+
+	/* 1. Ensure GSER(0)_DLM(0..2)_PHY_RESET[PHY_RESET] is set. */
+	dlmx_phy_reset.u64 = csr_rd(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0));
+	dlmx_phy_reset.s.phy_reset = 1;
+	csr_wr(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0), dlmx_phy_reset.u64);
+
+	/* 2. If SGMII or QSGMII or RXAUI (i.e. if DLM0) set
+	 *    GSER(0)_DLM(0)_MPLL_EN[MPLL_EN] to one.
+	 */
+
+	/* 3. Set GSER(0)_DLM(0..2)_MPLL_MULTIPLIER[MPLL_MULTIPLIER]
+	 *    to the value in the preceding table, which is different
+	 *    than the desired setting prescribed by the HRM.
+	 */
+	mpll_multiplier.u64 = csr_rd(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0));
+	mpll_multiplier.s.mpll_multiplier = ref_clk_mult[ref_clk_sel];
+	debug("%s: Setting MPLL multiplier to %d\n", __func__,
+	      (int)mpll_multiplier.s.mpll_multiplier);
+	csr_wr(CVMX_GSERX_DLMX_MPLL_MULTIPLIER(qlm, 0), mpll_multiplier.u64);
+	/* 5. Clear GSER0_DLM(1..2)_TEST_POWERDOWN. Configurations that only
+	 *    use DLM1 need not clear GSER0_DLM2_TEST_POWERDOWN
+	 */
+	dlmx_test_powerdown.u64 = csr_rd(CVMX_GSERX_DLMX_TEST_POWERDOWN(qlm, 0));
+	dlmx_test_powerdown.s.test_powerdown = 0;
+	csr_wr(CVMX_GSERX_DLMX_TEST_POWERDOWN(qlm, 0), dlmx_test_powerdown.u64);
+
+	/* 6. Clear GSER0_DLM(1..2)_PHY_RESET. Configurations that use only
+	 *    need DLM1 need not clear GSER0_DLM2_PHY_RESET
+	 */
+	dlmx_phy_reset.u64 = csr_rd(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0));
+	dlmx_phy_reset.s.phy_reset = 0;
+	csr_wr(CVMX_GSERX_DLMX_PHY_RESET(qlm, 0), dlmx_phy_reset.u64);
+
+	/* 6. Decrease MPLL_MULTIPLIER by one continually until it reaches
+	 *    the desired long-term setting, ensuring that each MPLL_MULTIPLIER
+	 *   value is constant for at least 1 msec before changing to the next
+	 *   value. The desired long-term setting is as indicated in HRM tables
+	 *   21-1, 21-2, and 21-3. This is not required with the HRM
+	 *   sequence.
+	 */
+	/* This is set when initializing PCIe after soft reset is asserted. */
+
+	/* 7. Write the GSER0_PCIE_PIPE_RST register to take the appropriate
+	 *    PIPE out of reset. There is a PIPEn_RST bit for each PIPE. Clear
+	 *    the appropriate bits based on the configuration (reset is
+	 *     active high).
+	 */
+	if (qlm == 1) {
+		cvmx_pemx_cfg_t pemx_cfg;
+		cvmx_pemx_on_t pemx_on;
+		cvmx_gserx_pcie_pipe_rst_t pipe_rst;
+		cvmx_rst_ctlx_t rst_ctl;
+
+		switch (mode) {
+		case CVMX_QLM_MODE_PCIE:     /* PEM0 on DLM1 & DLM2 */
+		case CVMX_QLM_MODE_PCIE_1X2: /* PEM0 on DLM1 */
+		case CVMX_QLM_MODE_PCIE_1X1: /* PEM0 on DLM1 using lane 0 */
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(0));
+			pemx_cfg.cn70xx.hostmd = rc;
+			if (mode == CVMX_QLM_MODE_PCIE_1X1) {
+				pemx_cfg.cn70xx.md =
+					gen2 ? CVMX_PEM_MD_GEN2_1LANE : CVMX_PEM_MD_GEN1_1LANE;
+			} else if (mode == CVMX_QLM_MODE_PCIE) {
+				pemx_cfg.cn70xx.md =
+					gen2 ? CVMX_PEM_MD_GEN2_4LANE : CVMX_PEM_MD_GEN1_4LANE;
+			} else {
+				pemx_cfg.cn70xx.md =
+					gen2 ? CVMX_PEM_MD_GEN2_2LANE : CVMX_PEM_MD_GEN1_2LANE;
+			}
+			csr_wr(CVMX_PEMX_CFG(0), pemx_cfg.u64);
+
+			rst_ctl.u64 = csr_rd(CVMX_RST_CTLX(0));
+			rst_ctl.s.rst_drv = 1;
+			csr_wr(CVMX_RST_CTLX(0), rst_ctl.u64);
+
+			/* PEM0 is on DLM1&2 which is pipe0 */
+			pipe_rst.u64 = csr_rd(CVMX_GSERX_PCIE_PIPE_RST(0));
+			pipe_rst.s.pipe0_rst = 0;
+			csr_wr(CVMX_GSERX_PCIE_PIPE_RST(0), pipe_rst.u64);
+
+			pemx_on.u64 = csr_rd(CVMX_PEMX_ON(0));
+			pemx_on.s.pemon = 1;
+			csr_wr(CVMX_PEMX_ON(0), pemx_on.u64);
+			break;
+		case CVMX_QLM_MODE_PCIE_2X1: /* PEM0 and PEM1 on DLM1 */
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(0));
+			pemx_cfg.cn70xx.hostmd = rc;
+			pemx_cfg.cn70xx.md = gen2 ? CVMX_PEM_MD_GEN2_1LANE : CVMX_PEM_MD_GEN1_1LANE;
+			csr_wr(CVMX_PEMX_CFG(0), pemx_cfg.u64);
+
+			rst_ctl.u64 = csr_rd(CVMX_RST_CTLX(0));
+			rst_ctl.s.rst_drv = 1;
+			csr_wr(CVMX_RST_CTLX(0), rst_ctl.u64);
+
+			/* PEM0 is on DLM1 which is pipe0 */
+			pipe_rst.u64 = csr_rd(CVMX_GSERX_PCIE_PIPE_RST(0));
+			pipe_rst.s.pipe0_rst = 0;
+			csr_wr(CVMX_GSERX_PCIE_PIPE_RST(0), pipe_rst.u64);
+
+			pemx_on.u64 = csr_rd(CVMX_PEMX_ON(0));
+			pemx_on.s.pemon = 1;
+			csr_wr(CVMX_PEMX_ON(0), pemx_on.u64);
+
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(1));
+			pemx_cfg.cn70xx.hostmd = 1;
+			pemx_cfg.cn70xx.md = gen2 ? CVMX_PEM_MD_GEN2_1LANE : CVMX_PEM_MD_GEN1_1LANE;
+			csr_wr(CVMX_PEMX_CFG(1), pemx_cfg.u64);
+			rst_ctl.u64 = csr_rd(CVMX_RST_CTLX(1));
+			rst_ctl.s.rst_drv = 1;
+			csr_wr(CVMX_RST_CTLX(1), rst_ctl.u64);
+			/* PEM1 is on DLM2 which is pipe1 */
+			pipe_rst.u64 = csr_rd(CVMX_GSERX_PCIE_PIPE_RST(0));
+			pipe_rst.s.pipe1_rst = 0;
+			csr_wr(CVMX_GSERX_PCIE_PIPE_RST(0), pipe_rst.u64);
+			pemx_on.u64 = csr_rd(CVMX_PEMX_ON(1));
+			pemx_on.s.pemon = 1;
+			csr_wr(CVMX_PEMX_ON(1), pemx_on.u64);
+			break;
+		default:
+			break;
+		}
+	} else {
+		cvmx_pemx_cfg_t pemx_cfg;
+		cvmx_pemx_on_t pemx_on;
+		cvmx_gserx_pcie_pipe_rst_t pipe_rst;
+		cvmx_rst_ctlx_t rst_ctl;
+
+		switch (mode) {
+		case CVMX_QLM_MODE_PCIE_1X2: /* PEM1 on DLM2 */
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(1));
+			pemx_cfg.cn70xx.hostmd = 1;
+			pemx_cfg.cn70xx.md = gen2 ? CVMX_PEM_MD_GEN2_2LANE : CVMX_PEM_MD_GEN1_2LANE;
+			csr_wr(CVMX_PEMX_CFG(1), pemx_cfg.u64);
+
+			rst_ctl.u64 = csr_rd(CVMX_RST_CTLX(1));
+			rst_ctl.s.rst_drv = 1;
+			csr_wr(CVMX_RST_CTLX(1), rst_ctl.u64);
+
+			/* PEM1 is on DLM1 lane 0, which is pipe1 */
+			pipe_rst.u64 = csr_rd(CVMX_GSERX_PCIE_PIPE_RST(0));
+			pipe_rst.s.pipe1_rst = 0;
+			csr_wr(CVMX_GSERX_PCIE_PIPE_RST(0), pipe_rst.u64);
+
+			pemx_on.u64 = csr_rd(CVMX_PEMX_ON(1));
+			pemx_on.s.pemon = 1;
+			csr_wr(CVMX_PEMX_ON(1), pemx_on.u64);
+			break;
+		case CVMX_QLM_MODE_PCIE_2X1: /* PEM1 and PEM2 on DLM2 */
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(1));
+			pemx_cfg.cn70xx.hostmd = 1;
+			pemx_cfg.cn70xx.md = gen2 ? CVMX_PEM_MD_GEN2_1LANE : CVMX_PEM_MD_GEN1_1LANE;
+			csr_wr(CVMX_PEMX_CFG(1), pemx_cfg.u64);
+
+			rst_ctl.u64 = csr_rd(CVMX_RST_CTLX(1));
+			rst_ctl.s.rst_drv = 1;
+			csr_wr(CVMX_RST_CTLX(1), rst_ctl.u64);
+
+			/* PEM1 is on DLM2 lane 0, which is pipe2 */
+			pipe_rst.u64 = csr_rd(CVMX_GSERX_PCIE_PIPE_RST(0));
+			pipe_rst.s.pipe2_rst = 0;
+			csr_wr(CVMX_GSERX_PCIE_PIPE_RST(0), pipe_rst.u64);
+
+			pemx_on.u64 = csr_rd(CVMX_PEMX_ON(1));
+			pemx_on.s.pemon = 1;
+			csr_wr(CVMX_PEMX_ON(1), pemx_on.u64);
+
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(2));
+			pemx_cfg.cn70xx.hostmd = 1;
+			pemx_cfg.cn70xx.md = gen2 ? CVMX_PEM_MD_GEN2_1LANE : CVMX_PEM_MD_GEN1_1LANE;
+			csr_wr(CVMX_PEMX_CFG(2), pemx_cfg.u64);
+
+			rst_ctl.u64 = csr_rd(CVMX_RST_CTLX(2));
+			rst_ctl.s.rst_drv = 1;
+			csr_wr(CVMX_RST_CTLX(2), rst_ctl.u64);
+
+			/* PEM2 is on DLM2 lane 1, which is pipe3 */
+			pipe_rst.u64 = csr_rd(CVMX_GSERX_PCIE_PIPE_RST(0));
+			pipe_rst.s.pipe3_rst = 0;
+			csr_wr(CVMX_GSERX_PCIE_PIPE_RST(0), pipe_rst.u64);
+
+			pemx_on.u64 = csr_rd(CVMX_PEMX_ON(2));
+			pemx_on.s.pemon = 1;
+			csr_wr(CVMX_PEMX_ON(2), pemx_on.u64);
+			break;
+		default:
+			break;
+		}
+	}
+	return 0;
+}
+
+/**
+ * Configure dlm speed and mode for cn70xx.
+ *
+ * @param qlm     The DLM to configure
+ * @param speed   The speed the DLM needs to be configured in Mhz.
+ * @param mode    The DLM to be configured as SGMII/XAUI/PCIe.
+ *                  DLM 0: has 2 interfaces which can be configured as
+ *                         SGMII/QSGMII/RXAUI. Need to configure both at the
+ *                         same time. These are valid option
+ *				CVMX_QLM_MODE_QSGMII,
+ *				CVMX_QLM_MODE_SGMII_SGMII,
+ *				CVMX_QLM_MODE_SGMII_DISABLED,
+ *				CVMX_QLM_MODE_DISABLED_SGMII,
+ *				CVMX_QLM_MODE_SGMII_QSGMII,
+ *				CVMX_QLM_MODE_QSGMII_QSGMII,
+ *				CVMX_QLM_MODE_QSGMII_DISABLED,
+ *				CVMX_QLM_MODE_DISABLED_QSGMII,
+ *				CVMX_QLM_MODE_QSGMII_SGMII,
+ *				CVMX_QLM_MODE_RXAUI_1X2
+ *
+ *                  DLM 1: PEM0/1 in PCIE_1x4/PCIE_2x1/PCIE_1X1
+ *                  DLM 2: PEM0/1/2 in PCIE_1x4/PCIE_1x2/PCIE_2x1/PCIE_1x1
+ * @param rc      Only used for PCIe, rc = 1 for root complex mode, 0 for EP mode.
+ * @param gen2    Only used for PCIe, gen2 = 1, in GEN2 mode else in GEN1 mode.
+ *
+ * @param ref_clk_input  The reference-clock input to use to configure QLM
+ * @param ref_clk_sel    The reference-clock selection to use to configure QLM
+ *
+ * @return       Return 0 on success or -1.
+ */
+static int octeon_configure_qlm_cn70xx(int qlm, int speed, int mode, int rc, int gen2,
+				       int ref_clk_sel, int ref_clk_input)
+{
+	debug("%s(%d, %d, %d, %d, %d, %d, %d)\n", __func__, qlm, speed, mode, rc, gen2, ref_clk_sel,
+	      ref_clk_input);
+	switch (qlm) {
+	case 0: {
+		int is_sff7000_rxaui = 0;
+		cvmx_gmxx_inf_mode_t inf_mode0, inf_mode1;
+
+		inf_mode0.u64 = csr_rd(CVMX_GMXX_INF_MODE(0));
+		inf_mode1.u64 = csr_rd(CVMX_GMXX_INF_MODE(1));
+		if (inf_mode0.s.en || inf_mode1.s.en) {
+			debug("DLM0 already configured\n");
+			return -1;
+		}
+
+		switch (mode) {
+		case CVMX_QLM_MODE_SGMII_SGMII:
+			debug("  Mode SGMII SGMII\n");
+			inf_mode0.s.mode = CVMX_GMX_INF_MODE_SGMII;
+			inf_mode1.s.mode = CVMX_GMX_INF_MODE_SGMII;
+			break;
+		case CVMX_QLM_MODE_SGMII_QSGMII:
+			debug("  Mode SGMII QSGMII\n");
+			inf_mode0.s.mode = CVMX_GMX_INF_MODE_SGMII;
+			inf_mode1.s.mode = CVMX_GMX_INF_MODE_QSGMII;
+			break;
+		case CVMX_QLM_MODE_SGMII_DISABLED:
+			debug("  Mode SGMII Disabled\n");
+			inf_mode0.s.mode = CVMX_GMX_INF_MODE_SGMII;
+			inf_mode1.s.mode = CVMX_GMX_INF_MODE_DISABLED;
+			break;
+		case CVMX_QLM_MODE_DISABLED_SGMII:
+			debug("Mode Disabled SGMII\n");
+			inf_mode0.s.mode = CVMX_GMX_INF_MODE_DISABLED;
+			inf_mode1.s.mode = CVMX_GMX_INF_MODE_SGMII;
+			break;
+		case CVMX_QLM_MODE_QSGMII_SGMII:
+			debug("  Mode QSGMII SGMII\n");
+			inf_mode0.s.mode = CVMX_GMX_INF_MODE_QSGMII;
+			inf_mode1.s.mode = CVMX_GMX_INF_MODE_SGMII;
+			break;
+		case CVMX_QLM_MODE_QSGMII_QSGMII:
+			debug("  Mode QSGMII QSGMII\n");
+			inf_mode0.s.mode = CVMX_GMX_INF_MODE_QSGMII;
+			inf_mode1.s.mode = CVMX_GMX_INF_MODE_QSGMII;
+			break;
+		case CVMX_QLM_MODE_QSGMII_DISABLED:
+			debug("  Mode QSGMII Disabled\n");
+			inf_mode0.s.mode = CVMX_GMX_INF_MODE_QSGMII;
+			inf_mode1.s.mode = CVMX_GMX_INF_MODE_DISABLED;
+			break;
+		case CVMX_QLM_MODE_DISABLED_QSGMII:
+			debug("Mode Disabled QSGMII\n");
+			inf_mode0.s.mode = CVMX_GMX_INF_MODE_DISABLED;
+			inf_mode1.s.mode = CVMX_GMX_INF_MODE_QSGMII;
+			break;
+		case CVMX_QLM_MODE_RXAUI:
+			debug("  Mode RXAUI\n");
+			inf_mode0.s.mode = CVMX_GMX_INF_MODE_RXAUI;
+			inf_mode1.s.mode = CVMX_GMX_INF_MODE_DISABLED;
+
+			break;
+		default:
+			debug("  Mode Disabled Disabled\n");
+			inf_mode0.s.mode = CVMX_GMX_INF_MODE_DISABLED;
+			inf_mode1.s.mode = CVMX_GMX_INF_MODE_DISABLED;
+			break;
+		}
+		csr_wr(CVMX_GMXX_INF_MODE(0), inf_mode0.u64);
+		csr_wr(CVMX_GMXX_INF_MODE(1), inf_mode1.u64);
+
+		/* Bringup the PLL */
+		if (__dlm_setup_pll_cn70xx(qlm, speed, ref_clk_sel, ref_clk_input,
+					   is_sff7000_rxaui))
+			return -1;
+
+		/* TX Lanes */
+		if (__dlm0_setup_tx_cn70xx(speed, ref_clk_sel))
+			return -1;
+
+		/* RX Lanes */
+		if (__dlm0_setup_rx_cn70xx(speed, ref_clk_sel))
+			return -1;
+
+		/* Enable the interface */
+		inf_mode0.u64 = csr_rd(CVMX_GMXX_INF_MODE(0));
+		if (inf_mode0.s.mode != CVMX_GMX_INF_MODE_DISABLED)
+			inf_mode0.s.en = 1;
+		csr_wr(CVMX_GMXX_INF_MODE(0), inf_mode0.u64);
+		inf_mode1.u64 = csr_rd(CVMX_GMXX_INF_MODE(1));
+		if (inf_mode1.s.mode != CVMX_GMX_INF_MODE_DISABLED)
+			inf_mode1.s.en = 1;
+		csr_wr(CVMX_GMXX_INF_MODE(1), inf_mode1.u64);
+		break;
+	}
+	case 1:
+		switch (mode) {
+		case CVMX_QLM_MODE_PCIE: /* PEM0 on DLM1 & DLM2 */
+			debug("  Mode PCIe\n");
+			if (__dlmx_setup_pcie_cn70xx(1, mode, gen2, rc, ref_clk_sel, ref_clk_input))
+				return -1;
+			if (__dlmx_setup_pcie_cn70xx(2, mode, gen2, rc, ref_clk_sel, ref_clk_input))
+				return -1;
+			break;
+		case CVMX_QLM_MODE_PCIE_1X2: /* PEM0 on DLM1 */
+		case CVMX_QLM_MODE_PCIE_2X1: /* PEM0 & PEM1 on DLM1 */
+		case CVMX_QLM_MODE_PCIE_1X1: /* PEM0 on DLM1, only 1 lane */
+			debug("  Mode PCIe 1x2, 2x1 or 1x1\n");
+			if (__dlmx_setup_pcie_cn70xx(qlm, mode, gen2, rc, ref_clk_sel,
+						     ref_clk_input))
+				return -1;
+			break;
+		case CVMX_QLM_MODE_DISABLED:
+			debug("  Mode disabled\n");
+			break;
+		default:
+			debug("DLM1 illegal mode specified\n");
+			return -1;
+		}
+		break;
+	case 2:
+		switch (mode) {
+		case CVMX_QLM_MODE_SATA_2X1:
+			debug("%s: qlm 2, mode is SATA 2x1\n", __func__);
+			/* DLM2 is SATA, PCIE2 is disabled */
+			if (__setup_sata(qlm, speed, ref_clk_sel, ref_clk_input))
+				return -1;
+			break;
+		case CVMX_QLM_MODE_PCIE:
+			debug("  Mode PCIe\n");
+			/* DLM2 is PCIE0, PCIE1-2 are disabled. */
+			/* Do nothing, its initialized in DLM1 */
+			break;
+		case CVMX_QLM_MODE_PCIE_1X2: /* PEM1 on DLM2 */
+		case CVMX_QLM_MODE_PCIE_2X1: /* PEM1 & PEM2 on DLM2 */
+			debug("  Mode PCIe 1x2 or 2x1\n");
+			if (__dlmx_setup_pcie_cn70xx(qlm, mode, gen2, rc, ref_clk_sel,
+						     ref_clk_input))
+				return -1;
+			break;
+		case CVMX_QLM_MODE_DISABLED:
+			debug("  Mode Disabled\n");
+			break;
+		default:
+			debug("DLM2 illegal mode specified\n");
+			return -1;
+		}
+	default:
+		return -1;
+	}
+
+	return 0;
+}
+
+/**
+ * Disables DFE for the specified QLM lane(s).
+ * This function should only be called for low-loss channels.
+ *
+ * @param node     Node to configure
+ * @param qlm      QLM to configure
+ * @param lane     Lane to configure, or -1 all lanes
+ * @param baud_mhz The speed the QLM needs to be configured in Mhz.
+ * @param mode     The QLM to be configured as SGMII/XAUI/PCIe.
+ */
+void octeon_qlm_dfe_disable(int node, int qlm, int lane, int baud_mhz, int mode)
+{
+	int num_lanes = cvmx_qlm_get_lanes(qlm);
+	int l;
+	cvmx_gserx_lanex_rx_loop_ctrl_t loop_ctrl;
+	cvmx_gserx_lanex_rx_valbbd_ctrl_0_t ctrl_0;
+	cvmx_gserx_lanex_rx_valbbd_ctrl_1_t ctrl_1;
+	cvmx_gserx_lanex_rx_valbbd_ctrl_2_t ctrl_2;
+	cvmx_gserx_lane_vma_fine_ctrl_2_t lane_vma_fine_ctrl_2;
+
+	/* Interfaces below 5Gbaud are already manually tuned. */
+	if (baud_mhz < 5000)
+		return;
+
+	/* Don't run on PCIe links, SATA or KR.  These interfaces use training */
+	switch (mode) {
+	case CVMX_QLM_MODE_10G_KR_1X2:
+	case CVMX_QLM_MODE_10G_KR:
+	case CVMX_QLM_MODE_40G_KR4:
+		return;
+	case CVMX_QLM_MODE_PCIE_1X1:
+	case CVMX_QLM_MODE_PCIE_2X1:
+	case CVMX_QLM_MODE_PCIE_1X2:
+	case CVMX_QLM_MODE_PCIE:
+	case CVMX_QLM_MODE_PCIE_1X8:
+		return;
+	case CVMX_QLM_MODE_SATA_2X1:
+		return;
+	default:
+		break;
+	}
+
+	/* Updating pre_ctle minimum to 0. This works best for short channels */
+	lane_vma_fine_ctrl_2.u64 = csr_rd_node(node, CVMX_GSERX_LANE_VMA_FINE_CTRL_2(qlm));
+	lane_vma_fine_ctrl_2.s.rx_prectle_gain_min_fine = 0;
+	csr_wr_node(node, CVMX_GSERX_LANE_VMA_FINE_CTRL_2(qlm), lane_vma_fine_ctrl_2.u64);
+
+	for (l = 0; l < num_lanes; l++) {
+		if (lane != -1 && lane != l)
+			continue;
+
+		/* 1. Write GSERX_LANEx_RX_LOOP_CTRL = 0x0270
+		 * (var "loop_ctrl" with bits 8 & 1 cleared).
+		 * bit<1> dfe_en_byp = 1'b0
+		 */
+		loop_ctrl.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_LOOP_CTRL(l, qlm));
+		loop_ctrl.s.cfg_rx_lctrl = loop_ctrl.s.cfg_rx_lctrl & 0x3fd;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_LOOP_CTRL(l, qlm), loop_ctrl.u64);
+
+		/* 2. Write GSERX_LANEx_RX_VALBBD_CTRL_1 = 0x0000
+		 * (var "ctrl1" with all bits cleared)
+		 * bits<14:11> CFG_RX_DFE_C3_MVAL = 4'b0000
+		 * bit<10> CFG_RX_DFE_C3_MSGN = 1'b0
+		 * bits<9:6> CFG_RX_DFE_C2_MVAL = 4'b0000
+		 * bit<5> CFG_RX_DFE_C2_MSGN = 1'b0
+		 * bits<4:0> CFG_RX_DFE_C1_MVAL = 5'b00000
+		 */
+		ctrl_1.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_VALBBD_CTRL_1(l, qlm));
+		ctrl_1.s.dfe_c3_mval = 0;
+		ctrl_1.s.dfe_c3_msgn = 0;
+		ctrl_1.s.dfe_c2_mval = 0;
+		ctrl_1.s.dfe_c2_msgn = 0;
+		ctrl_1.s.dfe_c2_mval = 0;
+		ctrl_1.s.dfe_c1_mval = 0;
+		ctrl_1.s.dfe_c1_msgn = 0;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_VALBBD_CTRL_1(l, qlm), ctrl_1.u64);
+
+		/* 3. Write GSERX_LANEx_RX_VALBBD_CTRL_0 = 0x2400
+		 * (var "ctrl0" with following bits set/cleared)
+		 * bits<11:10> CFG_RX_DFE_GAIN = 0x1
+		 * bits<9:6> CFG_RX_DFE_C5_MVAL = 4'b0000
+		 * bit<5> CFG_RX_DFE_C5_MSGN = 1'b0
+		 * bits<4:1> CFG_RX_DFE_C4_MVAL = 4'b0000
+		 * bit<0> CFG_RX_DFE_C4_MSGN = 1'b0
+		 */
+		ctrl_0.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_VALBBD_CTRL_0(l, qlm));
+		ctrl_0.s.dfe_gain = 0x1;
+		ctrl_0.s.dfe_c5_mval = 0;
+		ctrl_0.s.dfe_c5_msgn = 0;
+		ctrl_0.s.dfe_c4_mval = 0;
+		ctrl_0.s.dfe_c4_msgn = 0;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_VALBBD_CTRL_0(l, qlm), ctrl_0.u64);
+
+		/* 4. Write GSER(0..13)_LANE(0..3)_RX_VALBBD_CTRL_2 = 0x003F
+		 * //enable DFE tap overrides
+		 * bit<5> dfe_ovrd_en = 1
+		 * bit<4> dfe_c5_ovrd_val = 1
+		 * bit<3> dfe_c4_ovrd_val = 1
+		 * bit<2> dfe_c3_ovrd_val = 1
+		 * bit<1> dfe_c2_ovrd_val = 1
+		 * bit<0> dfe_c1_ovrd_val = 1
+		 */
+		ctrl_2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_VALBBD_CTRL_2(l, qlm));
+		ctrl_2.s.dfe_ovrd_en = 0x1;
+		ctrl_2.s.dfe_c5_ovrd_val = 0x1;
+		ctrl_2.s.dfe_c4_ovrd_val = 0x1;
+		ctrl_2.s.dfe_c3_ovrd_val = 0x1;
+		ctrl_2.s.dfe_c2_ovrd_val = 0x1;
+		ctrl_2.s.dfe_c1_ovrd_val = 0x1;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_VALBBD_CTRL_2(l, qlm), ctrl_2.u64);
+	}
+}
+
+/**
+ * Disables DFE, uses fixed CTLE Peak value and AGC settings
+ * for the specified QLM lane(s).
+ * This function should only be called for low-loss channels.
+ * This function prevents Rx equalization from happening on all lanes in a QLM
+ * This function should be called for all lanes being used in the QLM.
+ *
+ * @param  node           Node to configure
+ * @param  qlm            QLM to configure
+ * @param  lane           Lane to configure, or -1 all lanes
+ * @param  baud_mhz       The speed the QLM needs to be configured in Mhz.
+ * @param  mode           The QLM to be configured as SGMII/XAUI/PCIe.
+ * @param  ctle_zero      Equalizer Peaking control
+ * @param  agc_pre_ctle   Pre-CTLE gain
+ * @param  agc_post_ctle  Post-CTLE gain
+ * @return Zero on success, negative on failure
+ */
+
+int octeon_qlm_dfe_disable_ctle_agc(int node, int qlm, int lane, int baud_mhz, int mode,
+				    int ctle_zero, int agc_pre_ctle, int agc_post_ctle)
+{
+	int num_lanes = cvmx_qlm_get_lanes(qlm);
+	int l;
+	cvmx_gserx_lanex_rx_loop_ctrl_t loop_ctrl;
+	cvmx_gserx_lanex_rx_valbbd_ctrl_0_t ctrl_0;
+	cvmx_gserx_lanex_pwr_ctrl_t lanex_pwr_ctrl;
+	cvmx_gserx_lane_mode_t lmode;
+	cvmx_gserx_lane_px_mode_1_t px_mode_1;
+	cvmx_gserx_lanex_rx_cfg_5_t rx_cfg_5;
+	cvmx_gserx_lanex_rx_cfg_2_t rx_cfg_2;
+	cvmx_gserx_lanex_rx_ctle_ctrl_t ctle_ctrl;
+
+	/* Check tuning constraints */
+	if (ctle_zero < 0 || ctle_zero > 15) {
+		printf("Error: N%d.QLM%d: Invalid CTLE_ZERO(%d).  Must be between -1 and 15.\n",
+		       node, qlm, ctle_zero);
+		return -1;
+	}
+	if (agc_pre_ctle < 0 || agc_pre_ctle > 15) {
+		printf("Error: N%d.QLM%d: Invalid AGC_Pre_CTLE(%d)\n",
+		       node, qlm, agc_pre_ctle);
+		return -1;
+	}
+
+	if (agc_post_ctle < 0 || agc_post_ctle > 15) {
+		printf("Error: N%d.QLM%d: Invalid AGC_Post_CTLE(%d)\n",
+		       node, qlm, agc_post_ctle);
+		return -1;
+	}
+
+	/* Interfaces below 5Gbaud are already manually tuned. */
+	if (baud_mhz < 5000)
+		return 0;
+
+	/* Don't run on PCIe links, SATA or KR.  These interfaces use training */
+	switch (mode) {
+	case CVMX_QLM_MODE_10G_KR_1X2:
+	case CVMX_QLM_MODE_10G_KR:
+	case CVMX_QLM_MODE_40G_KR4:
+		return 0;
+	case CVMX_QLM_MODE_PCIE_1X1:
+	case CVMX_QLM_MODE_PCIE_2X1:
+	case CVMX_QLM_MODE_PCIE_1X2:
+	case CVMX_QLM_MODE_PCIE:
+	case CVMX_QLM_MODE_PCIE_1X8:
+		return 0;
+	case CVMX_QLM_MODE_SATA_2X1:
+		return 0;
+	default:
+		break;
+	}
+
+	lmode.u64 = csr_rd_node(node, CVMX_GSERX_LANE_MODE(qlm));
+
+	/* 1. Enable VMA manual mode for the QLM's lane mode */
+	px_mode_1.u64 = csr_rd_node(node, CVMX_GSERX_LANE_PX_MODE_1(lmode.s.lmode, qlm));
+	px_mode_1.s.vma_mm = 1;
+	csr_wr_node(node, CVMX_GSERX_LANE_PX_MODE_1(lmode.s.lmode, qlm), px_mode_1.u64);
+
+	/* 2. Disable DFE */
+	octeon_qlm_dfe_disable(node, qlm, lane, baud_mhz, mode);
+
+	for (l = 0; l < num_lanes; l++) {
+		if (lane != -1 && lane != l)
+			continue;
+
+		/* 3. Write GSERX_LANEx_RX_VALBBD_CTRL_0.CFG_RX_AGC_GAIN = 0x2 */
+		ctrl_0.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_VALBBD_CTRL_0(l, qlm));
+		ctrl_0.s.agc_gain = 0x2;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_VALBBD_CTRL_0(l, qlm), ctrl_0.u64);
+
+		/* 4. Write GSERX_LANEx_RX_LOOP_CTRL
+		 * bit<8> lctrl_men = 1'b1
+		 * bit<0> cdr_en_byp = 1'b1
+		 */
+		loop_ctrl.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_LOOP_CTRL(l, qlm));
+		loop_ctrl.s.cfg_rx_lctrl = loop_ctrl.s.cfg_rx_lctrl | 0x101;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_LOOP_CTRL(l, qlm), loop_ctrl.u64);
+
+		/* 5. Write GSERX_LANEx_PWR_CTRL = 0x0040 (var "lanex_pwr_ctrl" with
+		 * following bits set)
+		 * bit<6> RX_LCTRL_OVRRD_EN = 1'b1
+		 * all other bits cleared.
+		 */
+		lanex_pwr_ctrl.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PWR_CTRL(l, qlm));
+		lanex_pwr_ctrl.s.rx_lctrl_ovrrd_en = 1;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PWR_CTRL(l, qlm), lanex_pwr_ctrl.u64);
+
+		/* --Setting AGC in manual mode and configuring CTLE-- */
+		rx_cfg_5.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_CFG_5(l, qlm));
+		rx_cfg_5.s.rx_agc_men_ovrrd_val = 1;
+		rx_cfg_5.s.rx_agc_men_ovrrd_en = 1;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_CFG_5(l, qlm), rx_cfg_5.u64);
+
+		ctle_ctrl.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_CTLE_CTRL(l, qlm));
+		ctle_ctrl.s.pcs_sds_rx_ctle_zero = ctle_zero;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_CTLE_CTRL(l, qlm), ctle_ctrl.u64);
+
+		rx_cfg_2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_CFG_2(l, qlm));
+		rx_cfg_2.s.rx_sds_rx_agc_mval = (agc_pre_ctle << 4) | agc_post_ctle;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_CFG_2(l, qlm), rx_cfg_2.u64);
+	}
+	return 0;
+}
+
+/**
+ * Some QLM speeds need to override the default tuning parameters
+ *
+ * @param node     Node to configure
+ * @param qlm      QLM to configure
+ * @param baud_mhz Desired speed in MHz
+ * @param lane     Lane the apply the tuning parameters
+ * @param tx_swing Voltage swing.  The higher the value the lower the voltage,
+ *		   the default value is 7.
+ * @param tx_pre   pre-cursor pre-emphasis
+ * @param tx_post  post-cursor pre-emphasis.
+ * @param tx_gain   Transmit gain. Range 0-7
+ * @param tx_vboost Transmit voltage boost. Range 0-1
+ */
+void octeon_qlm_tune_per_lane_v3(int node, int qlm, int baud_mhz, int lane, int tx_swing,
+				 int tx_pre, int tx_post, int tx_gain, int tx_vboost)
+{
+	cvmx_gserx_cfg_t gserx_cfg;
+	cvmx_gserx_lanex_tx_cfg_0_t tx_cfg0;
+	cvmx_gserx_lanex_tx_pre_emphasis_t pre_emphasis;
+	cvmx_gserx_lanex_tx_cfg_1_t tx_cfg1;
+	cvmx_gserx_lanex_tx_cfg_3_t tx_cfg3;
+	cvmx_bgxx_spux_br_pmd_control_t pmd_control;
+	cvmx_gserx_lanex_pcs_ctlifc_0_t pcs_ctlifc_0;
+	cvmx_gserx_lanex_pcs_ctlifc_2_t pcs_ctlifc_2;
+	int bgx, lmac;
+
+	/* Do not apply QLM tuning to PCIe and KR interfaces. */
+	gserx_cfg.u64 = csr_rd_node(node, CVMX_GSERX_CFG(qlm));
+	if (gserx_cfg.s.pcie)
+		return;
+
+	/* Apply the QLM tuning only to cn73xx and cn78xx models only */
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		bgx = (qlm < 2) ? qlm : (qlm - 2);
+	else if (OCTEON_IS_MODEL(OCTEON_CN73XX))
+		bgx = (qlm < 4) ? (qlm - 2) : 2;
+	else if (OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		bgx = 0;
+	else
+		return;
+
+	if ((OCTEON_IS_MODEL(OCTEON_CN73XX) && qlm == 6) ||
+	    (OCTEON_IS_MODEL(OCTEON_CNF75XX) && qlm == 5))
+		lmac = 2;
+	else
+		lmac = lane;
+
+	/* No need to tune 10G-KR and 40G-KR interfaces */
+	pmd_control.u64 = csr_rd_node(node, CVMX_BGXX_SPUX_BR_PMD_CONTROL(lmac, bgx));
+	if (pmd_control.s.train_en)
+		return;
+
+	if (tx_pre != -1 && tx_post == -1)
+		tx_post = 0;
+
+	if (tx_post != -1 && tx_pre == -1)
+		tx_pre = 0;
+
+	/* Check tuning constraints */
+	if (tx_swing < -1 || tx_swing > 25) {
+		printf("ERROR: N%d:QLM%d: Lane %d: Invalid TX_SWING(%d). TX_SWING must be <= 25.\n",
+		       node, qlm, lane, tx_swing);
+		return;
+	}
+
+	if (tx_pre < -1 || tx_pre > 10) {
+		printf("ERROR: N%d:QLM%d: Lane %d: Invalid TX_PRE(%d). TX_PRE must be <= 10.\n",
+		       node, qlm, lane, tx_swing);
+		return;
+	}
+
+	if (tx_post < -1 || tx_post > 31) {
+		printf("ERROR: N%d:QLM%d: Lane %d: Invalid TX_POST(%d). TX_POST must be <= 15.\n",
+		       node, qlm, lane, tx_swing);
+		return;
+	}
+
+	if (tx_pre >= 0 && tx_post >= 0 && tx_swing >= 0 &&
+	    tx_pre + tx_post - tx_swing > 2) {
+		printf("ERROR: N%d.QLM%d: Lane %d: TX_PRE(%d) + TX_POST(%d) - TX_SWING(%d) must be <= 2\n",
+		       node, qlm, lane, tx_pre, tx_post, tx_swing);
+		return;
+	}
+
+	if (tx_pre >= 0 && tx_post >= 0 && tx_swing >= 0 &&
+	    tx_pre + tx_post + tx_swing > 35) {
+		printf("ERROR: N%d.QLM%d: Lane %d: TX_PRE(%d) + TX_POST(%d) + TX_SWING(%d) must be <= 35\n",
+		       node, qlm, lane, tx_pre, tx_post, tx_swing);
+		return;
+	}
+
+	if (tx_gain < -1 || tx_gain > 7) {
+		printf("ERROR: N%d.QLM%d: Lane %d: Invalid TX_GAIN(%d). TX_GAIN must be between 0 and 7\n",
+		       node, qlm, lane, tx_gain);
+		return;
+	}
+
+	if (tx_vboost < -1 || tx_vboost > 1) {
+		printf("ERROR: N%d.QLM%d: Lane %d: Invalid TX_VBOOST(%d).  TX_VBOOST must be 0 or 1.\n",
+		       node, qlm, lane, tx_vboost);
+		return;
+	}
+
+	debug("N%d.QLM%d: Lane %d: TX_SWING=%d, TX_PRE=%d, TX_POST=%d, TX_GAIN=%d, TX_VBOOST=%d\n",
+	      node, qlm, lane, tx_swing, tx_pre, tx_post, tx_gain, tx_vboost);
+
+	/* Complete the Tx swing and Tx equilization programming */
+	/* 1) Enable Tx swing and Tx emphasis overrides */
+	tx_cfg1.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_TX_CFG_1(lane, qlm));
+	tx_cfg1.s.tx_swing_ovrrd_en = (tx_swing != -1);
+	tx_cfg1.s.tx_premptap_ovrrd_val = (tx_pre != -1) && (tx_post != -1);
+	tx_cfg1.s.tx_vboost_en_ovrrd_en = (tx_vboost != -1); /* Vboost override */
+	;
+	csr_wr_node(node, CVMX_GSERX_LANEX_TX_CFG_1(lane, qlm), tx_cfg1.u64);
+	/* 2) Program the Tx swing and Tx emphasis Pre-cursor and Post-cursor values */
+	/* CFG_TX_PREMPTAP[8:4] = Lane X's TX post-cursor value (C+1) */
+	/* CFG_TX_PREMPTAP[3:0] = Lane X's TX pre-cursor value (C-1) */
+	if (tx_swing != -1) {
+		tx_cfg0.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_TX_CFG_0(lane, qlm));
+		tx_cfg0.s.cfg_tx_swing = tx_swing;
+		csr_wr_node(node, CVMX_GSERX_LANEX_TX_CFG_0(lane, qlm), tx_cfg0.u64);
+	}
+
+	if ((tx_pre != -1) && (tx_post != -1)) {
+		pre_emphasis.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_TX_PRE_EMPHASIS(lane, qlm));
+		pre_emphasis.s.cfg_tx_premptap = (tx_post << 4) | tx_pre;
+		csr_wr_node(node, CVMX_GSERX_LANEX_TX_PRE_EMPHASIS(lane, qlm), pre_emphasis.u64);
+	}
+
+	/* Apply TX gain settings */
+	if (tx_gain != -1) {
+		tx_cfg3.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_TX_CFG_3(lane, qlm));
+		tx_cfg3.s.pcs_sds_tx_gain = tx_gain;
+		csr_wr_node(node, CVMX_GSERX_LANEX_TX_CFG_3(lane, qlm), tx_cfg3.u64);
+	}
+
+	/* Apply TX vboot settings */
+	if (tx_vboost != -1) {
+		tx_cfg3.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_TX_CFG_3(lane, qlm));
+		tx_cfg3.s.cfg_tx_vboost_en = tx_vboost;
+		csr_wr_node(node, CVMX_GSERX_LANEX_TX_CFG_3(lane, qlm), tx_cfg3.u64);
+	}
+
+	/* 3) Program override for the Tx coefficient request */
+	pcs_ctlifc_0.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_0(lane, qlm));
+	if (((tx_pre != -1) && (tx_post != -1)) || (tx_swing != -1))
+		pcs_ctlifc_0.s.cfg_tx_coeff_req_ovrrd_val = 0x1;
+	if (tx_vboost != -1)
+		pcs_ctlifc_0.s.cfg_tx_vboost_en_ovrrd_val = 1;
+	csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_0(lane, qlm), pcs_ctlifc_0.u64);
+
+	/* 4) Enable the Tx coefficient request override enable */
+	pcs_ctlifc_2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm));
+	if (((tx_pre != -1) && (tx_post != -1)) || (tx_swing != -1))
+		pcs_ctlifc_2.s.cfg_tx_coeff_req_ovrrd_en = 0x1;
+	if (tx_vboost != -1)
+		pcs_ctlifc_2.s.cfg_tx_vboost_en_ovrrd_en = 1;
+	csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm), pcs_ctlifc_2.u64);
+
+	/* 5) Issue a Control Interface Configuration Override request to start the Tx equalizer */
+	pcs_ctlifc_2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm));
+	pcs_ctlifc_2.s.ctlifc_ovrrd_req = 0x1;
+	csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm), pcs_ctlifc_2.u64);
+
+	/* 6) Wait 1 ms for the request to complete */
+	udelay(1000);
+
+	/* Steps 7 & 8 required for subsequent Tx swing and Tx equilization adjustment */
+	/* 7) Disable the Tx coefficient request override enable */
+	pcs_ctlifc_2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm));
+	pcs_ctlifc_2.s.cfg_tx_coeff_req_ovrrd_en = 0;
+	csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm), pcs_ctlifc_2.u64);
+	/* 8) Issue a Control Interface Configuration Override request */
+	pcs_ctlifc_2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm));
+	pcs_ctlifc_2.s.ctlifc_ovrrd_req = 0x1;
+	csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm), pcs_ctlifc_2.u64);
+}
+
+/**
+ * Some QLM speeds need to override the default tuning parameters
+ *
+ * @param node     Node to configure
+ * @param qlm      QLM to configure
+ * @param baud_mhz Desired speed in MHz
+ * @param tx_swing Voltage swing.  The higher the value the lower the voltage,
+ *		   the default value is 7.
+ * @param tx_premptap bits [0:3] pre-cursor pre-emphasis, bits[4:8] post-cursor
+ *		      pre-emphasis.
+ * @param tx_gain   Transmit gain. Range 0-7
+ * @param tx_vboost Transmit voltage boost. Range 0-1
+ *
+ */
+void octeon_qlm_tune_v3(int node, int qlm, int baud_mhz, int tx_swing, int tx_premptap, int tx_gain,
+			int tx_vboost)
+{
+	int lane;
+	int num_lanes = cvmx_qlm_get_lanes(qlm);
+
+	for (lane = 0; lane < num_lanes; lane++) {
+		int tx_pre = (tx_premptap == -1) ? -1 : tx_premptap & 0xf;
+		int tx_post = (tx_premptap == -1) ? -1 : (tx_premptap >> 4) & 0x1f;
+
+		octeon_qlm_tune_per_lane_v3(node, qlm, baud_mhz, lane, tx_swing, tx_pre, tx_post,
+					    tx_gain, tx_vboost);
+	}
+}
+
+/**
+ * Some QLMs need to override the default pre-ctle for low loss channels.
+ *
+ * @param node     Node to configure
+ * @param qlm      QLM to configure
+ * @param pre_ctle pre-ctle settings for low loss channels
+ */
+void octeon_qlm_set_channel_v3(int node, int qlm, int pre_ctle)
+{
+	cvmx_gserx_lane_vma_fine_ctrl_2_t lane_vma_fine_ctrl_2;
+
+	lane_vma_fine_ctrl_2.u64 = csr_rd_node(node, CVMX_GSERX_LANE_VMA_FINE_CTRL_2(qlm));
+	lane_vma_fine_ctrl_2.s.rx_prectle_gain_min_fine = pre_ctle;
+	csr_wr_node(node, CVMX_GSERX_LANE_VMA_FINE_CTRL_2(qlm), lane_vma_fine_ctrl_2.u64);
+}
+
+static void __qlm_init_errata_20844(int node, int qlm)
+{
+	int lane;
+
+	/* Only applies to CN78XX pass 1.x */
+	if (!OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_0))
+		return;
+
+	/* Errata GSER-20844: Electrical Idle logic can coast
+	 * 1) After the link first comes up write the following
+	 * register on each lane to prevent the application logic
+	 * from stomping on the Coast inputs. This is a one time write,
+	 * or if you prefer you could put it in the link up loop and
+	 * write it every time the link comes up.
+	 * 1a) Then write GSER(0..13)_LANE(0..3)_PCS_CTLIFC_2
+	 * Set CTLIFC_OVRRD_REQ (later)
+	 * Set CFG_RX_CDR_COAST_REQ_OVRRD_EN
+	 * Its not clear if #1 and #1a can be combined, lets try it
+	 * this way first.
+	 */
+	for (lane = 0; lane < 4; lane++) {
+		cvmx_gserx_lanex_rx_misc_ovrrd_t misc_ovrrd;
+		cvmx_gserx_lanex_pcs_ctlifc_2_t ctlifc_2;
+
+		ctlifc_2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm));
+		ctlifc_2.s.cfg_rx_cdr_coast_req_ovrrd_en = 1;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm), ctlifc_2.u64);
+
+		misc_ovrrd.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_MISC_OVRRD(lane, qlm));
+		misc_ovrrd.s.cfg_rx_eie_det_ovrrd_en = 1;
+		misc_ovrrd.s.cfg_rx_eie_det_ovrrd_val = 0;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_MISC_OVRRD(lane, qlm), misc_ovrrd.u64);
+
+		udelay(1);
+
+		misc_ovrrd.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_MISC_OVRRD(lane, qlm));
+		misc_ovrrd.s.cfg_rx_eie_det_ovrrd_en = 1;
+		misc_ovrrd.s.cfg_rx_eie_det_ovrrd_val = 1;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_MISC_OVRRD(lane, qlm), misc_ovrrd.u64);
+		ctlifc_2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm));
+		ctlifc_2.s.ctlifc_ovrrd_req = 1;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(lane, qlm), ctlifc_2.u64);
+	}
+}
+
+/** CN78xx reference clock register settings */
+struct refclk_settings_cn78xx {
+	bool valid; /** Reference clock speed supported */
+	union cvmx_gserx_pll_px_mode_0 mode_0;
+	union cvmx_gserx_pll_px_mode_1 mode_1;
+	union cvmx_gserx_lane_px_mode_0 pmode_0;
+	union cvmx_gserx_lane_px_mode_1 pmode_1;
+};
+
+/** Default reference clock for various modes */
+static const u8 def_ref_clk_cn78xx[R_NUM_LANE_MODES] = { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 };
+
+/**
+ * This data structure stores the reference clock for each mode for each QLM.
+ *
+ * It is indexed first by the node number, then the QLM number and then the
+ * lane mode.  It is initialized to the default values.
+ */
+static u8 ref_clk_cn78xx[CVMX_MAX_NODES][8][R_NUM_LANE_MODES] = {
+	{ { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 } },
+	{ { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 } },
+	{ { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 } },
+	{ { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
+	  { 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1 } }
+};
+
+/**
+ * This data structure contains the register values for the cn78xx PLLs
+ * It is indexed first by the reference clock and second by the mode.
+ * Note that not all combinations are supported.
+ */
+static const struct refclk_settings_cn78xx refclk_settings_cn78xx[R_NUM_LANE_MODES][4] = {
+	{   /* 0	R_2_5G_REFCLK100 */
+	{ /* 100MHz reference clock */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x4, .pll_rloop = 0x3, .pll_pcs_div = 0x5 },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x19 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x1,
+			   .tx_ldiv = 0x1,
+			   .rx_ldiv = 0x1,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{ /* 125MHz reference clock */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x3, .pll_pcs_div = 0x5 },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x1,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x14 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x1,
+			   .tx_ldiv = 0x1,
+			   .rx_ldiv = 0x1,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{ /* 156.25MHz reference clock */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x3, .pll_pcs_div = 0x5 },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x10 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x1,
+			   .tx_ldiv = 0x1,
+			   .rx_ldiv = 0x1,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{
+		  /* 161.1328125MHz reference clock */
+		  .valid = false,
+	  } },
+	{
+		/* 1	R_5G_REFCLK100 */
+		{ /* 100MHz reference clock */
+		  .valid = true,
+		  .mode_0.s = { .pll_icp = 0x4, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+		  .mode_1.s = { .pll_16p5en = 0x0,
+				.pll_cpadj = 0x2,
+				.pll_pcie3en = 0x0,
+				.pll_opr = 0x0,
+				.pll_div = 0x19 },
+		  .pmode_0.s = { .ctle = 0x0,
+				 .pcie = 0x1,
+				 .tx_ldiv = 0x0,
+				 .rx_ldiv = 0x0,
+				 .srate = 0x0,
+				 .tx_mode = 0x3,
+				 .rx_mode = 0x3 },
+		  .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+				 .vma_mm = 0x0,
+				 .cdr_fgain = 0xa,
+				 .ph_acc_adj = 0x14 } },
+		{ /* 125MHz reference clock */
+		  .valid = true,
+		  .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+		  .mode_1.s = { .pll_16p5en = 0x0,
+				.pll_cpadj = 0x1,
+				.pll_pcie3en = 0x0,
+				.pll_opr = 0x0,
+				.pll_div = 0x14 },
+		  .pmode_0.s = { .ctle = 0x0,
+				 .pcie = 0x1,
+				 .tx_ldiv = 0x0,
+				 .rx_ldiv = 0x0,
+				 .srate = 0x0,
+				 .tx_mode = 0x3,
+				 .rx_mode = 0x3 },
+		  .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+				 .vma_mm = 0x0,
+				 .cdr_fgain = 0xa,
+				 .ph_acc_adj = 0x14 } },
+		{ /* 156.25MHz reference clock */
+		  .valid = true,
+		  .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+		  .mode_1.s = { .pll_16p5en = 0x0,
+				.pll_cpadj = 0x2,
+				.pll_pcie3en = 0x0,
+				.pll_opr = 0x0,
+				.pll_div = 0x10 },
+		  .pmode_0.s = { .ctle = 0x0,
+				 .pcie = 0x1,
+				 .tx_ldiv = 0x0,
+				 .rx_ldiv = 0x0,
+				 .srate = 0x0,
+				 .tx_mode = 0x3,
+				 .rx_mode = 0x3 },
+		  .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+				 .vma_mm = 0x0,
+				 .cdr_fgain = 0xa,
+				 .ph_acc_adj = 0x14 } },
+		{
+			/* 161.1328125MHz reference clock */
+			.valid = false,
+		},
+	},
+	{   /* 2	R_8G_REFCLK100 */
+	{ /* 100MHz reference clock */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x5, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x1,
+			  .pll_opr = 0x1,
+			  .pll_div = 0x28 },
+	    .pmode_0.s = { .ctle = 0x3,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xb,
+			   .ph_acc_adj = 0x23 } },
+	{ /* 125MHz reference clock */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x2, .pll_rloop = 0x5, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x1,
+			  .pll_pcie3en = 0x1,
+			  .pll_opr = 0x1,
+			  .pll_div = 0x20 },
+	    .pmode_0.s = { .ctle = 0x3,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xb,
+			   .ph_acc_adj = 0x23 } },
+	{ /* 156.25MHz reference clock not supported */
+	    .valid = false } },
+	{
+		/* 3	R_125G_REFCLK15625_KX */
+		{ /* 100MHz reference */
+		  .valid = true,
+		  .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0x28 },
+		  .mode_1.s = { .pll_16p5en = 0x1,
+				.pll_cpadj = 0x2,
+				.pll_pcie3en = 0x0,
+				.pll_opr = 0x0,
+				.pll_div = 0x19 },
+		  .pmode_0.s = { .ctle = 0x0,
+				 .pcie = 0x0,
+				 .tx_ldiv = 0x2,
+				 .rx_ldiv = 0x2,
+				 .srate = 0x0,
+				 .tx_mode = 0x3,
+				 .rx_mode = 0x3 },
+		  .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+				 .vma_mm = 0x1,
+				 .cdr_fgain = 0xc,
+				 .ph_acc_adj = 0x1e } },
+		{ /* 125MHz reference */
+		  .valid = true,
+		  .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0x28 },
+		  .mode_1.s = { .pll_16p5en = 0x1,
+				.pll_cpadj = 0x2,
+				.pll_pcie3en = 0x0,
+				.pll_opr = 0x0,
+				.pll_div = 0x14 },
+		  .pmode_0.s = { .ctle = 0x0,
+				 .pcie = 0x0,
+				 .tx_ldiv = 0x2,
+				 .rx_ldiv = 0x2,
+				 .srate = 0x0,
+				 .tx_mode = 0x3,
+				 .rx_mode = 0x3 },
+		  .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+				 .vma_mm = 0x1,
+				 .cdr_fgain = 0xc,
+				 .ph_acc_adj = 0x1e } },
+		{ /* 156.25MHz reference */
+		  .valid = true,
+		  .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0x28 },
+		  .mode_1.s = { .pll_16p5en = 0x1,
+				.pll_cpadj = 0x3,
+				.pll_pcie3en = 0x0,
+				.pll_opr = 0x0,
+				.pll_div = 0x10 },
+		  .pmode_0.s = { .ctle = 0x0,
+				 .pcie = 0x0,
+				 .tx_ldiv = 0x2,
+				 .rx_ldiv = 0x2,
+				 .srate = 0x0,
+				 .tx_mode = 0x3,
+				 .rx_mode = 0x3 },
+		  .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+				 .vma_mm = 0x1,
+				 .cdr_fgain = 0xc,
+				 .ph_acc_adj = 0x1e } },
+		{
+			/* 161.1328125MHz reference clock */
+			.valid = false,
+		},
+	},
+	{   /* 4	R_3125G_REFCLK15625_XAUI */
+	{ /* 100MHz reference */
+	    .valid = false },
+	{ /* 125MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0x14 },
+	    .mode_1.s = { .pll_16p5en = 0x1,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x19 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x1,
+			   .rx_ldiv = 0x1,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xc,
+			   .ph_acc_adj = 0x1e } },
+	{ /* 156.25MHz reference, default */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0x14 },
+	    .mode_1.s = { .pll_16p5en = 0x1,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x14 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x1,
+			   .rx_ldiv = 0x1,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xc,
+			   .ph_acc_adj = 0x1e } },
+	{
+		  /* 161.1328125MHz reference clock */
+		  .valid = false,
+	  } },
+	{   /* 5	R_103125G_REFCLK15625_KR */
+	{ /* 100MHz reference */
+	    .valid = false },
+	{ /* 125MHz reference */
+	    .valid = false },
+	{ /* 156.25MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x5, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x1,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x1,
+			  .pll_div = 0x21 },
+	    .pmode_0.s = { .ctle = 0x3,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x1,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0xf } },
+	{ /* 161.1328125 reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x5, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x1,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x1,
+			  .pll_div = 0x20 },
+	    .pmode_0.s = { .ctle = 0x3,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x1,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0xf } } },
+	{   /* 6	R_125G_REFCLK15625_SGMII */
+	{ /* 100MHz reference clock */
+	    .valid = 1,
+	    .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0x28 },
+	    .mode_1.s = { .pll_16p5en = 0x1,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x19 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x2,
+			   .rx_ldiv = 0x2,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xc,
+			   .ph_acc_adj = 0x1e } },
+	{ /* 125MHz reference clock */
+	    .valid = 1,
+	    .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0x28 },
+	    .mode_1.s = { .pll_16p5en = 0x1,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x14 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x2,
+			   .rx_ldiv = 0x2,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xc,
+			   .ph_acc_adj = 0x1e } },
+	{ /* 156.25MHz reference clock */
+	    .valid = 1,
+	    .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0x28 },
+	    .mode_1.s = { .pll_16p5en = 0x1,
+			  .pll_cpadj = 0x3,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x10 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x2,
+			   .rx_ldiv = 0x2,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xc,
+			   .ph_acc_adj = 0x1e } } },
+	{   /* 7	R_5G_REFCLK15625_QSGMII */
+	{ /* 100MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x4, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0, .pll_cpadj = 0x2, .pll_pcie3en = 0x0,
+			  .pll_div = 0x19 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xc,
+			   .ph_acc_adj = 0x1e } },
+	{ /* 125MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0, .pll_cpadj = 0x1, .pll_pcie3en = 0x0,
+			  .pll_div = 0x14 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xc,
+			   .ph_acc_adj = 0x1e } },
+	{ /* 156.25MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0, .pll_cpadj = 0x2, .pll_pcie3en = 0x0,
+			  .pll_div = 0x10 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xc,
+			   .ph_acc_adj = 0x1e } },
+	{
+		  /* 161.1328125MHz reference clock */
+		  .valid = false,
+	  } },
+	{   /* 8	R_625G_REFCLK15625_RXAUI */
+	{ /* 100MHz reference */
+	    .valid = false },
+	{ /* 125MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x19 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{ /* 156.25MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x14 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{ /* 161.1328125 reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x1, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x14 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } } },
+	{   /* 9	R_2_5G_REFCLK125 */
+	{ /* 100MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x4, .pll_rloop = 0x3, .pll_pcs_div = 0x5 },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x19 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x1,
+			   .tx_ldiv = 0x1,
+			   .rx_ldiv = 0x1,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{ /* 125MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x3, .pll_pcs_div = 0x5 },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x1,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x14 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x1,
+			   .tx_ldiv = 0x1,
+			   .rx_ldiv = 0x1,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{ /* 156,25MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x3, .pll_pcs_div = 0x5 },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x10 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x1,
+			   .tx_ldiv = 0x1,
+			   .rx_ldiv = 0x1,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x1,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{
+		  /* 161.1328125MHz reference clock */
+		  .valid = false,
+	  } },
+	{   /* 0xa	R_5G_REFCLK125 */
+	{ /* 100MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x4, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x19 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x1,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{ /* 125MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x1,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x14 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x1,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{ /* 156.25MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x3, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x0,
+			  .pll_opr = 0x0,
+			  .pll_div = 0x10 },
+	    .pmode_0.s = { .ctle = 0x0,
+			   .pcie = 0x1,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xa,
+			   .ph_acc_adj = 0x14 } },
+	{
+		  /* 161.1328125MHz reference clock */
+		  .valid = false,
+	  } },
+	{   /* 0xb	R_8G_REFCLK125 */
+	{ /* 100MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x3, .pll_rloop = 0x5, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x2,
+			  .pll_pcie3en = 0x1,
+			  .pll_opr = 0x1,
+			  .pll_div = 0x28 },
+	    .pmode_0.s = { .ctle = 0x3,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xb,
+			   .ph_acc_adj = 0x23 } },
+	{ /* 125MHz reference */
+	    .valid = true,
+	    .mode_0.s = { .pll_icp = 0x2, .pll_rloop = 0x5, .pll_pcs_div = 0xa },
+	    .mode_1.s = { .pll_16p5en = 0x0,
+			  .pll_cpadj = 0x1,
+			  .pll_pcie3en = 0x1,
+			  .pll_opr = 0x1,
+			  .pll_div = 0x20 },
+	    .pmode_0.s = { .ctle = 0x3,
+			   .pcie = 0x0,
+			   .tx_ldiv = 0x0,
+			   .rx_ldiv = 0x0,
+			   .srate = 0x0,
+			   .tx_mode = 0x3,
+			   .rx_mode = 0x3 },
+	    .pmode_1.s = { .vma_fine_cfg_sel = 0x0,
+			   .vma_mm = 0x0,
+			   .cdr_fgain = 0xb,
+			   .ph_acc_adj = 0x23 } },
+	{ /* 156.25MHz reference */
+	    .valid = false },
+	{
+		  /* 161.1328125MHz reference clock */
+		  .valid = false,
+	  } }
+};
+
+/**
+ * Set a non-standard reference clock for a node, qlm and lane mode.
+ *
+ * @INTERNAL
+ *
+ * @param node		node number the reference clock is used with
+ * @param qlm		qlm number the reference clock is hooked up to
+ * @param lane_mode	current lane mode selected for the QLM
+ * @param ref_clk_sel	0 = 100MHz, 1 = 125MHz, 2 = 156.25MHz,
+ *			3 = 161.1328125MHz
+ *
+ * @return 0 for success or -1 if the reference clock selector is not supported
+ *
+ * NOTE: This must be called before __qlm_setup_pll_cn78xx.
+ */
+static int __set_qlm_ref_clk_cn78xx(int node, int qlm, int lane_mode, int ref_clk_sel)
+{
+	if (ref_clk_sel > 3 || ref_clk_sel < 0 ||
+	    !refclk_settings_cn78xx[lane_mode][ref_clk_sel].valid) {
+		debug("%s: Invalid reference clock %d for lane mode %d for node %d, QLM %d\n",
+		      __func__, ref_clk_sel, lane_mode, node, qlm);
+		return -1;
+	}
+	debug("%s(%d, %d, 0x%x, %d)\n", __func__, node, qlm, lane_mode, ref_clk_sel);
+	ref_clk_cn78xx[node][qlm][lane_mode] = ref_clk_sel;
+	return 0;
+}
+
+/**
+ * KR - Inverted Tx Coefficient Direction Change.  Changing Pre & Post Tap inc/dec direction
+ *
+ *
+ * @INTERNAL
+ *
+ * @param node	Node number to configure
+ * @param qlm	QLM number to configure
+ */
+static void __qlm_kr_inc_dec_gser26636(int node, int qlm)
+{
+	cvmx_gserx_rx_txdir_ctrl_1_t rx_txdir_ctrl;
+
+	/* Apply workaround for Errata GSER-26636,
+	 * KR training coefficient update inverted
+	 */
+	rx_txdir_ctrl.u64 = csr_rd_node(node, CVMX_GSERX_RX_TXDIR_CTRL_1(qlm));
+	rx_txdir_ctrl.s.rx_precorr_chg_dir = 1;
+	rx_txdir_ctrl.s.rx_tap1_chg_dir = 1;
+	csr_wr_node(node, CVMX_GSERX_RX_TXDIR_CTRL_1(qlm), rx_txdir_ctrl.u64);
+}
+
+/**
+ * Updating the RX EQ settings to support wider temperature range
+ * @INTERNAL
+ *
+ * @param node	Node number to configure
+ * @param qlm	QLM number to configure
+ */
+static void __qlm_rx_eq_temp_gser27140(int node, int qlm)
+{
+	int lane;
+	int num_lanes = cvmx_qlm_get_lanes(qlm);
+	cvmx_gserx_lanex_rx_valbbd_ctrl_0_t rx_valbbd_ctrl_0;
+	cvmx_gserx_lane_vma_fine_ctrl_2_t lane_vma_fine_ctrl_2;
+	cvmx_gserx_lane_vma_fine_ctrl_0_t lane_vma_fine_ctrl_0;
+	cvmx_gserx_rx_txdir_ctrl_1_t rx_txdir_ctrl_1;
+	cvmx_gserx_eq_wait_time_t eq_wait_time;
+	cvmx_gserx_rx_txdir_ctrl_2_t rx_txdir_ctrl_2;
+	cvmx_gserx_rx_txdir_ctrl_0_t rx_txdir_ctrl_0;
+
+	for (lane = 0; lane < num_lanes; lane++) {
+		rx_valbbd_ctrl_0.u64 =
+			csr_rd_node(node, CVMX_GSERX_LANEX_RX_VALBBD_CTRL_0(lane, qlm));
+		rx_valbbd_ctrl_0.s.agc_gain = 3;
+		rx_valbbd_ctrl_0.s.dfe_gain = 2;
+		csr_wr_node(node, CVMX_GSERX_LANEX_RX_VALBBD_CTRL_0(lane, qlm),
+			    rx_valbbd_ctrl_0.u64);
+	}
+
+	/* do_pre_ctle_limits_work_around: */
+	lane_vma_fine_ctrl_2.u64 = csr_rd_node(node, CVMX_GSERX_LANE_VMA_FINE_CTRL_2(qlm));
+	//lane_vma_fine_ctrl_2.s.rx_prectle_peak_max_fine = 11;
+	lane_vma_fine_ctrl_2.s.rx_prectle_gain_max_fine = 11;
+	//lane_vma_fine_ctrl_2.s.rx_prectle_peak_min_fine = 6;
+	lane_vma_fine_ctrl_2.s.rx_prectle_gain_min_fine = 6;
+	csr_wr_node(node, CVMX_GSERX_LANE_VMA_FINE_CTRL_2(qlm), lane_vma_fine_ctrl_2.u64);
+
+	/* do_inc_dec_thres_work_around: */
+	rx_txdir_ctrl_0.u64 = csr_rd_node(node, CVMX_GSERX_RX_TXDIR_CTRL_0(qlm));
+	rx_txdir_ctrl_0.s.rx_boost_hi_thrs = 11;
+	rx_txdir_ctrl_0.s.rx_boost_lo_thrs = 4;
+	rx_txdir_ctrl_0.s.rx_boost_hi_val = 15;
+	csr_wr_node(node, CVMX_GSERX_RX_TXDIR_CTRL_0(qlm), rx_txdir_ctrl_0.u64);
+
+	/* do_sdll_iq_work_around: */
+	lane_vma_fine_ctrl_0.u64 = csr_rd_node(node, CVMX_GSERX_LANE_VMA_FINE_CTRL_0(qlm));
+	lane_vma_fine_ctrl_0.s.rx_sdll_iq_max_fine = 14;
+	lane_vma_fine_ctrl_0.s.rx_sdll_iq_min_fine = 8;
+	lane_vma_fine_ctrl_0.s.rx_sdll_iq_step_fine = 2;
+
+	/* do_vma_window_work_around_2: */
+	lane_vma_fine_ctrl_0.s.vma_window_wait_fine = 5;
+	lane_vma_fine_ctrl_0.s.lms_wait_time_fine = 5;
+
+	csr_wr_node(node, CVMX_GSERX_LANE_VMA_FINE_CTRL_0(qlm), lane_vma_fine_ctrl_0.u64);
+
+	/* Set dfe_tap_1_lo_thres_val: */
+	rx_txdir_ctrl_1.u64 = csr_rd_node(node, CVMX_GSERX_RX_TXDIR_CTRL_1(qlm));
+	rx_txdir_ctrl_1.s.rx_tap1_lo_thrs = 8;
+	rx_txdir_ctrl_1.s.rx_tap1_hi_thrs = 0x17;
+	csr_wr_node(node, CVMX_GSERX_RX_TXDIR_CTRL_1(qlm), rx_txdir_ctrl_1.u64);
+
+	/* do_rxeq_wait_cnt_work_around: */
+	eq_wait_time.u64 = csr_rd_node(node, CVMX_GSERX_EQ_WAIT_TIME(qlm));
+	eq_wait_time.s.rxeq_wait_cnt = 6;
+	csr_wr_node(node, CVMX_GSERX_EQ_WAIT_TIME(qlm), eq_wait_time.u64);
+
+	/* do_write_rx_txdir_precorr_thresholds: */
+	rx_txdir_ctrl_2.u64 = csr_rd_node(node, CVMX_GSERX_RX_TXDIR_CTRL_2(qlm));
+	rx_txdir_ctrl_2.s.rx_precorr_hi_thrs = 0xc0;
+	rx_txdir_ctrl_2.s.rx_precorr_lo_thrs = 0x40;
+	csr_wr_node(node, CVMX_GSERX_RX_TXDIR_CTRL_2(qlm), rx_txdir_ctrl_2.u64);
+}
+
+/* Errata GSER-26150: 10G PHY PLL Temperature Failure
+ * This workaround must be completed after the final deassertion of
+ * GSERx_PHY_CTL[PHY_RESET]
+ */
+static int __qlm_errata_gser_26150(int node, int qlm, int is_pcie)
+{
+	int num_lanes = 4;
+	int i;
+	cvmx_gserx_glbl_pll_cfg_3_t pll_cfg_3;
+	cvmx_gserx_glbl_misc_config_1_t misc_config_1;
+
+	/* PCIe only requires the LC-VCO parameters to be updated */
+	if (is_pcie) {
+		/* Update PLL parameters */
+		/* Step 1: Set GSER()_GLBL_PLL_CFG_3[PLL_VCTRL_SEL_LCVCO_VAL] = 0x2, and
+		 * GSER()_GLBL_PLL_CFG_3[PCS_SDS_PLL_VCO_AMP] = 0
+		 */
+		pll_cfg_3.u64 = csr_rd_node(node, CVMX_GSERX_GLBL_PLL_CFG_3(qlm));
+		pll_cfg_3.s.pcs_sds_pll_vco_amp = 0;
+		pll_cfg_3.s.pll_vctrl_sel_lcvco_val = 2;
+		csr_wr_node(node, CVMX_GSERX_GLBL_PLL_CFG_3(qlm), pll_cfg_3.u64);
+
+		/* Step 2: Set GSER()_GLBL_MISC_CONFIG_1[PCS_SDS_TRIM_CHP_REG] = 0x2. */
+		misc_config_1.u64 = csr_rd_node(node, CVMX_GSERX_GLBL_MISC_CONFIG_1(qlm));
+		misc_config_1.s.pcs_sds_trim_chp_reg = 2;
+		csr_wr_node(node, CVMX_GSERX_GLBL_MISC_CONFIG_1(qlm), misc_config_1.u64);
+		return 0;
+	}
+
+	/* Applying this errata twice causes problems */
+	pll_cfg_3.u64 = csr_rd_node(node, CVMX_GSERX_GLBL_PLL_CFG_3(qlm));
+	if (pll_cfg_3.s.pll_vctrl_sel_lcvco_val == 0x2)
+		return 0;
+
+	/* (GSER-26150) 10 Gb temperature excursions can cause lock failure */
+	/* Change the calibration point of the VCO at start up to shift some
+	 * available range of the VCO from -deltaT direction to the +deltaT
+	 * ramp direction allowing a greater range of VCO temperatures before
+	 * experiencing the failure.
+	 */
+
+	/* Check for DLMs on CN73XX and CNF75XX */
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX) && (qlm == 5 || qlm == 6))
+		num_lanes = 2;
+
+	/* Put PHY in P2 Power-down state  Need to Power down all lanes in a
+	 * QLM/DLM to force PHY to P2 state
+	 */
+	for (i = 0; i < num_lanes; i++) {
+		cvmx_gserx_lanex_pcs_ctlifc_0_t ctlifc0;
+		cvmx_gserx_lanex_pcs_ctlifc_1_t ctlifc1;
+		cvmx_gserx_lanex_pcs_ctlifc_2_t ctlifc2;
+
+		/* Step 1: Set Set GSER()_LANE(lane_n)_PCS_CTLIFC_0[CFG_TX_PSTATE_REQ_OVERRD_VAL]
+		 * = 0x3
+		 * Select P2 power state for Tx lane
+		 */
+		ctlifc0.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_0(i, qlm));
+		ctlifc0.s.cfg_tx_pstate_req_ovrrd_val = 0x3;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_0(i, qlm), ctlifc0.u64);
+		/* Step 2: Set GSER()_LANE(lane_n)_PCS_CTLIFC_1[CFG_RX_PSTATE_REQ_OVERRD_VAL]
+		 * = 0x3
+		 * Select P2 power state for Rx lane
+		 */
+		ctlifc1.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_1(i, qlm));
+		ctlifc1.s.cfg_rx_pstate_req_ovrrd_val = 0x3;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_1(i, qlm), ctlifc1.u64);
+		/* Step 3: Set GSER()_LANE(lane_n)_PCS_CTLIFC_2[CFG_TX_PSTATE_REQ_OVRRD_EN] = 1
+		 * Enable Tx power state override and Set
+		 * GSER()_LANE(lane_n)_PCS_CTLIFC_2[CFG_RX_PSTATE_REQ_OVRRD_EN] = 1
+		 * Enable Rx power state override
+		 */
+		ctlifc2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(i, qlm));
+		ctlifc2.s.cfg_tx_pstate_req_ovrrd_en = 0x1;
+		ctlifc2.s.cfg_rx_pstate_req_ovrrd_en = 0x1;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(i, qlm), ctlifc2.u64);
+		/* Step 4: Set GSER()_LANE(lane_n)_PCS_CTLIFC_2[CTLIFC_OVRRD_REQ] = 1
+		 * Start the CTLIFC override state machine
+		 */
+		ctlifc2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(i, qlm));
+		ctlifc2.s.ctlifc_ovrrd_req = 0x1;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(i, qlm), ctlifc2.u64);
+	}
+
+	/* Update PLL parameters */
+	/* Step 5: Set GSER()_GLBL_PLL_CFG_3[PLL_VCTRL_SEL_LCVCO_VAL] = 0x2, and
+	 * GSER()_GLBL_PLL_CFG_3[PCS_SDS_PLL_VCO_AMP] = 0
+	 */
+	pll_cfg_3.u64 = csr_rd_node(node, CVMX_GSERX_GLBL_PLL_CFG_3(qlm));
+	pll_cfg_3.s.pcs_sds_pll_vco_amp = 0;
+	pll_cfg_3.s.pll_vctrl_sel_lcvco_val = 2;
+	csr_wr_node(node, CVMX_GSERX_GLBL_PLL_CFG_3(qlm), pll_cfg_3.u64);
+
+	/* Step 6: Set GSER()_GLBL_MISC_CONFIG_1[PCS_SDS_TRIM_CHP_REG] = 0x2. */
+	misc_config_1.u64 = csr_rd_node(node, CVMX_GSERX_GLBL_MISC_CONFIG_1(qlm));
+	misc_config_1.s.pcs_sds_trim_chp_reg = 2;
+	csr_wr_node(node, CVMX_GSERX_GLBL_MISC_CONFIG_1(qlm), misc_config_1.u64);
+
+	/* Wake up PHY and transition to P0 Power-up state to bring-up the lanes,
+	 * need to wake up all PHY lanes
+	 */
+	for (i = 0; i < num_lanes; i++) {
+		cvmx_gserx_lanex_pcs_ctlifc_0_t ctlifc0;
+		cvmx_gserx_lanex_pcs_ctlifc_1_t ctlifc1;
+		cvmx_gserx_lanex_pcs_ctlifc_2_t ctlifc2;
+		/* Step 7: Set GSER()_LANE(lane_n)_PCS_CTLIFC_0[CFG_TX_PSTATE_REQ_OVERRD_VAL] = 0x0
+		 * Select P0 power state for Tx lane
+		 */
+		ctlifc0.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_0(i, qlm));
+		ctlifc0.s.cfg_tx_pstate_req_ovrrd_val = 0x0;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_0(i, qlm), ctlifc0.u64);
+		/* Step 8: Set GSER()_LANE(lane_n)_PCS_CTLIFC_1[CFG_RX_PSTATE_REQ_OVERRD_VAL] = 0x0
+		 * Select P0 power state for Rx lane
+		 */
+		ctlifc1.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_1(i, qlm));
+		ctlifc1.s.cfg_rx_pstate_req_ovrrd_val = 0x0;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_1(i, qlm), ctlifc1.u64);
+		/* Step 9: Set GSER()_LANE(lane_n)_PCS_CTLIFC_2[CFG_TX_PSTATE_REQ_OVRRD_EN] = 1
+		 * Enable Tx power state override and Set
+		 * GSER()_LANE(lane_n)_PCS_CTLIFC_2[CFG_RX_PSTATE_REQ_OVRRD_EN] = 1
+		 * Enable Rx power state override
+		 */
+		ctlifc2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(i, qlm));
+		ctlifc2.s.cfg_tx_pstate_req_ovrrd_en = 0x1;
+		ctlifc2.s.cfg_rx_pstate_req_ovrrd_en = 0x1;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(i, qlm), ctlifc2.u64);
+		/* Step 10: Set GSER()_LANE(lane_n)_PCS_CTLIFC_2[CTLIFC_OVRRD_REQ] = 1
+		 * Start the CTLIFC override state machine
+		 */
+		ctlifc2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(i, qlm));
+		ctlifc2.s.ctlifc_ovrrd_req = 0x1;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(i, qlm), ctlifc2.u64);
+	}
+
+	/* Step 11: Wait 10 msec */
+	mdelay(10);
+
+	/* Release Lane Tx/Rx Power state override enables. */
+	for (i = 0; i < num_lanes; i++) {
+		cvmx_gserx_lanex_pcs_ctlifc_2_t ctlifc2;
+
+		ctlifc2.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(i, qlm));
+		ctlifc2.s.cfg_tx_pstate_req_ovrrd_en = 0x0;
+		ctlifc2.s.cfg_rx_pstate_req_ovrrd_en = 0x0;
+		csr_wr_node(node, CVMX_GSERX_LANEX_PCS_CTLIFC_2(i, qlm), ctlifc2.u64);
+	}
+
+	/* Step 12:  Poll GSER()_PLL_STAT.[PLL_LOCK] = 1
+	 * Poll and check that PLL is locked
+	 */
+	if (CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_GSERX_PLL_STAT(qlm), cvmx_gserx_pll_stat_t,
+				       pll_lock, ==, 1, 10000)) {
+		printf("%d:QLM%d: Timeout waiting for GSERX_PLL_STAT[pll_lock]\n", node, qlm);
+		return -1;
+	}
+
+	/* Step 13:  Poll GSER()_QLM_STAT.[RST_RDY] = 1
+	 * Poll and check that QLM/DLM is Ready
+	 */
+	if (is_pcie == 0 &&
+	    CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_GSERX_QLM_STAT(qlm), cvmx_gserx_qlm_stat_t,
+				       rst_rdy, ==, 1, 10000)) {
+		printf("%d:QLM%d: Timeout waiting for GSERX_QLM_STAT[rst_rdy]\n", node, qlm);
+		return -1;
+	}
+
+	return 0;
+}
+
+/**
+ * Configure all of the PLLs for a particular node and qlm
+ * @INTERNAL
+ *
+ * @param node	Node number to configure
+ * @param qlm	QLM number to configure
+ */
+static void __qlm_setup_pll_cn78xx(int node, int qlm)
+{
+	cvmx_gserx_pll_px_mode_0_t mode_0;
+	cvmx_gserx_pll_px_mode_1_t mode_1;
+	cvmx_gserx_lane_px_mode_0_t pmode_0;
+	cvmx_gserx_lane_px_mode_1_t pmode_1;
+	int lane_mode;
+	int ref_clk;
+	const struct refclk_settings_cn78xx *clk_settings;
+
+	for (lane_mode = 0; lane_mode < R_NUM_LANE_MODES; lane_mode++) {
+		mode_0.u64 = csr_rd_node(node, CVMX_GSERX_PLL_PX_MODE_0(lane_mode, qlm));
+		mode_1.u64 = csr_rd_node(node, CVMX_GSERX_PLL_PX_MODE_1(lane_mode, qlm));
+		pmode_0.u64 = 0;
+		pmode_1.u64 = 0;
+		ref_clk = ref_clk_cn78xx[node][qlm][lane_mode];
+		clk_settings = &refclk_settings_cn78xx[lane_mode][ref_clk];
+		debug("%s(%d, %d): lane_mode: 0x%x, ref_clk: %d\n", __func__, node, qlm, lane_mode,
+		      ref_clk);
+
+		if (!clk_settings->valid) {
+			printf("%s: Error: reference clock %d is not supported for lane mode %d on qlm %d\n",
+			       __func__, ref_clk, lane_mode, qlm);
+			continue;
+		}
+
+		mode_0.s.pll_icp = clk_settings->mode_0.s.pll_icp;
+		mode_0.s.pll_rloop = clk_settings->mode_0.s.pll_rloop;
+		mode_0.s.pll_pcs_div = clk_settings->mode_0.s.pll_pcs_div;
+
+		mode_1.s.pll_16p5en = clk_settings->mode_1.s.pll_16p5en;
+		mode_1.s.pll_cpadj = clk_settings->mode_1.s.pll_cpadj;
+		mode_1.s.pll_pcie3en = clk_settings->mode_1.s.pll_pcie3en;
+		mode_1.s.pll_opr = clk_settings->mode_1.s.pll_opr;
+		mode_1.s.pll_div = clk_settings->mode_1.s.pll_div;
+
+		pmode_0.u64 = clk_settings->pmode_0.u64;
+
+		pmode_1.u64 = clk_settings->pmode_1.u64;
+
+		csr_wr_node(node, CVMX_GSERX_PLL_PX_MODE_1(lane_mode, qlm), mode_1.u64);
+		csr_wr_node(node, CVMX_GSERX_LANE_PX_MODE_0(lane_mode, qlm), pmode_0.u64);
+		csr_wr_node(node, CVMX_GSERX_LANE_PX_MODE_1(lane_mode, qlm), pmode_1.u64);
+		csr_wr_node(node, CVMX_GSERX_PLL_PX_MODE_0(lane_mode, qlm), mode_0.u64);
+	}
+}
+
+/**
+ * Get the lane mode for the specified node and QLM.
+ *
+ * @param ref_clk_sel	The reference-clock selection to use to configure QLM
+ *			 0 = REF_100MHZ
+ *			 1 = REF_125MHZ
+ *			 2 = REF_156MHZ
+ * @param baud_mhz   The speed the QLM needs to be configured in Mhz.
+ * @param[out] alt_pll_settings	If non-NULL this will be set if non-default PLL
+ *				settings are required for the mode.
+ *
+ * @return lane mode to use or -1 on error
+ *
+ * NOTE: In some modes
+ */
+static int __get_lane_mode_for_speed_and_ref_clk(int ref_clk_sel, int baud_mhz,
+						 bool *alt_pll_settings)
+{
+	if (alt_pll_settings)
+		*alt_pll_settings = false;
+	switch (baud_mhz) {
+	case 98304:
+	case 49152:
+	case 24576:
+	case 12288:
+		if (ref_clk_sel != 3) {
+			printf("Error: Invalid ref clock\n");
+			return -1;
+		}
+		return 0x5;
+	case 6144:
+	case 3072:
+		if (ref_clk_sel != 3) {
+			printf("Error: Invalid ref clock\n");
+			return -1;
+		}
+		return 0x8;
+	case 1250:
+		if (alt_pll_settings)
+			*alt_pll_settings = (ref_clk_sel != 2);
+		return R_125G_REFCLK15625_SGMII;
+	case 2500:
+		if (ref_clk_sel == 0)
+			return R_2_5G_REFCLK100;
+
+		if (alt_pll_settings)
+			*alt_pll_settings = (ref_clk_sel != 1);
+		return R_2_5G_REFCLK125;
+	case 3125:
+		if (ref_clk_sel == 2) {
+			return R_3125G_REFCLK15625_XAUI;
+		} else if (ref_clk_sel == 1) {
+			if (alt_pll_settings)
+				*alt_pll_settings = true;
+			return R_3125G_REFCLK15625_XAUI;
+		}
+
+		printf("Error: Invalid speed\n");
+		return -1;
+	case 5000:
+		if (ref_clk_sel == 0) {
+			return R_5G_REFCLK100;
+		} else if (ref_clk_sel == 1) {
+			if (alt_pll_settings)
+				*alt_pll_settings = (ref_clk_sel != 1);
+			return R_5G_REFCLK125;
+		} else {
+			return R_5G_REFCLK15625_QSGMII;
+		}
+	case 6250:
+		if (ref_clk_sel != 0) {
+			if (alt_pll_settings)
+				*alt_pll_settings = (ref_clk_sel != 2);
+			return R_625G_REFCLK15625_RXAUI;
+		}
+
+		printf("Error: Invalid speed\n");
+		return -1;
+	case 6316:
+		if (ref_clk_sel != 3) {
+			printf("Error: Invalid speed\n");
+		} else {
+			*alt_pll_settings = true;
+			return R_625G_REFCLK15625_RXAUI;
+		}
+	case 8000:
+		if (ref_clk_sel == 0)
+			return R_8G_REFCLK100;
+		else if (ref_clk_sel == 1)
+			return R_8G_REFCLK125;
+
+		printf("Error: Invalid speed\n");
+		return -1;
+	case 103125:
+		if (ref_clk_sel == 3 && alt_pll_settings)
+			*alt_pll_settings = true;
+
+		if (ref_clk_sel == 2 || ref_clk_sel == 3)
+			return R_103125G_REFCLK15625_KR;
+
+	default:
+		printf("Error: Invalid speed\n");
+		return -1;
+	}
+
+	return -1;
+}
+
+/*
+ * Errata PEM-31375 PEM RSL accesses to PCLK registers can timeout
+ * during speed change. Change SLI_WINDOW_CTL[time] to 525us
+ */
+static void __set_sli_window_ctl_errata_31375(int node)
+{
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX) || OCTEON_IS_MODEL(OCTEON_CN73XX) ||
+	    OCTEON_IS_MODEL(OCTEON_CNF75XX)) {
+		cvmx_sli_window_ctl_t window_ctl;
+
+		window_ctl.u64 = csr_rd_node(node, CVMX_PEXP_SLI_WINDOW_CTL);
+		/* Configure SLI_WINDOW_CTL only once */
+		if (window_ctl.s.time != 8191)
+			return;
+
+		window_ctl.s.time = gd->bus_clk * 525ull / 1000000;
+		csr_wr_node(node, CVMX_PEXP_SLI_WINDOW_CTL, window_ctl.u64);
+	}
+}
+
+static void __cvmx_qlm_pcie_errata_ep_cn78xx(int node, int pem)
+{
+	cvmx_pciercx_cfg031_t cfg031;
+	cvmx_pciercx_cfg032_t cfg032;
+	cvmx_pciercx_cfg040_t cfg040;
+	cvmx_pemx_cfg_t pemx_cfg;
+	cvmx_pemx_on_t pemx_on;
+	int low_qlm, high_qlm;
+	int qlm, lane;
+	u64 start_cycle;
+
+	pemx_on.u64 = csr_rd_node(node, CVMX_PEMX_ON(pem));
+
+	/* Errata (GSER-21178) PCIe gen3 doesn't work, continued */
+
+	/* Wait for the link to come up as Gen1 */
+	printf("PCIe%d: Waiting for EP out of reset\n", pem);
+	while (pemx_on.s.pemoor == 0) {
+		udelay(1000);
+		pemx_on.u64 = csr_rd_node(node, CVMX_PEMX_ON(pem));
+	}
+
+	/* Enable gen3 speed selection */
+	printf("PCIe%d: Enabling Gen3 for EP\n", pem);
+	/* Force Gen1 for initial link bringup. We'll fix it later */
+	pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(pem));
+	pemx_cfg.s.md = 2;
+	csr_wr_node(node, CVMX_PEMX_CFG(pem), pemx_cfg.u64);
+	cfg031.u32 = cvmx_pcie_cfgx_read_node(node, pem, CVMX_PCIERCX_CFG031(pem));
+	cfg031.s.mls = 2;
+	cvmx_pcie_cfgx_write_node(node, pem, CVMX_PCIERCX_CFG031(pem), cfg031.u32);
+	cfg040.u32 = cvmx_pcie_cfgx_read_node(node, pem, CVMX_PCIERCX_CFG040(pem));
+	cfg040.s.tls = 3;
+	cvmx_pcie_cfgx_write_node(node, pem, CVMX_PCIERCX_CFG040(pem), cfg040.u32);
+
+	/* Wait up to 10ms for the link speed change to complete */
+	start_cycle = get_timer(0);
+	do {
+		if (get_timer(start_cycle) > 10)
+			return;
+
+		mdelay(1);
+		cfg032.u32 = cvmx_pcie_cfgx_read_node(node, pem, CVMX_PCIERCX_CFG032(pem));
+	} while (cfg032.s.ls != 3);
+
+	pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(pem));
+	low_qlm = pem; /* FIXME */
+	high_qlm = (pemx_cfg.cn78xx.lanes8) ? low_qlm + 1 : low_qlm;
+
+	/* Toggle cfg_rx_dll_locken_ovrrd_en and rx_resetn_ovrrd_en across
+	 * all QM lanes in use
+	 */
+	for (qlm = low_qlm; qlm <= high_qlm; qlm++) {
+		for (lane = 0; lane < 4; lane++) {
+			cvmx_gserx_lanex_rx_misc_ovrrd_t misc_ovrrd;
+			cvmx_gserx_lanex_pwr_ctrl_t pwr_ctrl;
+
+			misc_ovrrd.u64 =
+				csr_rd_node(node, CVMX_GSERX_LANEX_RX_MISC_OVRRD(lane, pem));
+			misc_ovrrd.s.cfg_rx_dll_locken_ovrrd_en = 1;
+			csr_wr_node(node, CVMX_GSERX_LANEX_RX_MISC_OVRRD(lane, pem),
+				    misc_ovrrd.u64);
+			pwr_ctrl.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PWR_CTRL(lane, pem));
+			pwr_ctrl.s.rx_resetn_ovrrd_en = 1;
+			csr_wr_node(node, CVMX_GSERX_LANEX_PWR_CTRL(lane, pem), pwr_ctrl.u64);
+		}
+	}
+	for (qlm = low_qlm; qlm <= high_qlm; qlm++) {
+		for (lane = 0; lane < 4; lane++) {
+			cvmx_gserx_lanex_rx_misc_ovrrd_t misc_ovrrd;
+			cvmx_gserx_lanex_pwr_ctrl_t pwr_ctrl;
+
+			misc_ovrrd.u64 =
+				csr_rd_node(node, CVMX_GSERX_LANEX_RX_MISC_OVRRD(lane, pem));
+			misc_ovrrd.s.cfg_rx_dll_locken_ovrrd_en = 0;
+			csr_wr_node(node, CVMX_GSERX_LANEX_RX_MISC_OVRRD(lane, pem),
+				    misc_ovrrd.u64);
+			pwr_ctrl.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PWR_CTRL(lane, pem));
+			pwr_ctrl.s.rx_resetn_ovrrd_en = 0;
+			csr_wr_node(node, CVMX_GSERX_LANEX_PWR_CTRL(lane, pem), pwr_ctrl.u64);
+		}
+	}
+
+	//printf("PCIe%d: Waiting for EP link up at Gen3\n", pem);
+	if (CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_PEMX_ON(pem), cvmx_pemx_on_t, pemoor, ==, 1,
+				       1000000)) {
+		printf("PCIe%d: Timeout waiting for EP link up at Gen3\n", pem);
+		return;
+	}
+}
+
+static void __cvmx_qlm_pcie_errata_cn78xx(int node, int qlm)
+{
+	int pem, i, q;
+	int is_8lanes;
+	int is_high_lanes;
+	int low_qlm, high_qlm, is_host;
+	int need_ep_monitor;
+	cvmx_pemx_cfg_t pem_cfg, pem3_cfg;
+	cvmx_gserx_slice_cfg_t slice_cfg;
+	cvmx_gserx_rx_pwr_ctrl_p1_t pwr_ctrl_p1;
+	cvmx_rst_soft_prstx_t soft_prst;
+
+	/* Only applies to CN78XX pass 1.x */
+	if (!OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+		return;
+
+	/* Determine the PEM for this QLM, whether we're in 8 lane mode,
+	 * and whether these are the top lanes of the 8
+	 */
+	switch (qlm) {
+	case 0: /* First 4 lanes of PEM0 */
+		pem_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(0));
+		pem = 0;
+		is_8lanes = pem_cfg.cn78xx.lanes8;
+		is_high_lanes = 0;
+		break;
+	case 1: /* Either last 4 lanes of PEM0, or PEM1 */
+		pem_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(0));
+		pem = (pem_cfg.cn78xx.lanes8) ? 0 : 1;
+		is_8lanes = pem_cfg.cn78xx.lanes8;
+		is_high_lanes = is_8lanes;
+		break;
+	case 2: /* First 4 lanes of PEM2 */
+		pem_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(2));
+		pem = 2;
+		is_8lanes = pem_cfg.cn78xx.lanes8;
+		is_high_lanes = 0;
+		break;
+	case 3: /* Either last 4 lanes of PEM2, or PEM3 */
+		pem_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(2));
+		pem3_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(3));
+		pem = (pem_cfg.cn78xx.lanes8) ? 2 : 3;
+		is_8lanes = (pem == 2) ? pem_cfg.cn78xx.lanes8 : pem3_cfg.cn78xx.lanes8;
+		is_high_lanes = (pem == 2) && is_8lanes;
+		break;
+	case 4: /* Last 4 lanes of PEM3 */
+		pem = 3;
+		is_8lanes = 1;
+		is_high_lanes = 1;
+		break;
+	default:
+		return;
+	}
+
+	/* These workaround must be applied once per PEM. Since we're called per
+	 * QLM, wait for the 2nd half of 8 lane setups before doing the workaround
+	 */
+	if (is_8lanes && !is_high_lanes)
+		return;
+
+	pem_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(pem));
+	is_host = pem_cfg.cn78xx.hostmd;
+	low_qlm = (is_8lanes) ? qlm - 1 : qlm;
+	high_qlm = qlm;
+	qlm = -1;
+
+	if (!is_host) {
+		/* Read the current slice config value. If its at the value we will
+		 * program then skip doing the workaround. We're probably doing a
+		 * hot reset and the workaround is already applied
+		 */
+		slice_cfg.u64 = csr_rd_node(node, CVMX_GSERX_SLICE_CFG(low_qlm));
+		if (slice_cfg.s.tx_rx_detect_lvl_enc == 7 && OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_0))
+			return;
+	}
+
+	if (is_host && OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_0)) {
+		/* (GSER-XXXX) GSER PHY needs to be reset at initialization */
+		cvmx_gserx_phy_ctl_t phy_ctl;
+
+		for (q = low_qlm; q <= high_qlm; q++) {
+			phy_ctl.u64 = csr_rd_node(node, CVMX_GSERX_PHY_CTL(q));
+			phy_ctl.s.phy_reset = 1;
+			csr_wr_node(node, CVMX_GSERX_PHY_CTL(q), phy_ctl.u64);
+		}
+		udelay(5);
+
+		for (q = low_qlm; q <= high_qlm; q++) {
+			phy_ctl.u64 = csr_rd_node(node, CVMX_GSERX_PHY_CTL(q));
+			phy_ctl.s.phy_reset = 0;
+			csr_wr_node(node, CVMX_GSERX_PHY_CTL(q), phy_ctl.u64);
+		}
+		udelay(5);
+	}
+
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_0)) {
+		/* (GSER-20936) GSER has wrong PCIe RX detect reset value */
+		for (q = low_qlm; q <= high_qlm; q++) {
+			slice_cfg.u64 = csr_rd_node(node, CVMX_GSERX_SLICE_CFG(q));
+			slice_cfg.s.tx_rx_detect_lvl_enc = 7;
+			csr_wr_node(node, CVMX_GSERX_SLICE_CFG(q), slice_cfg.u64);
+		}
+
+		/* Clear the bit in GSERX_RX_PWR_CTRL_P1[p1_rx_subblk_pd]
+		 * that coresponds to "Lane DLL"
+		 */
+		for (q = low_qlm; q <= high_qlm; q++) {
+			pwr_ctrl_p1.u64 = csr_rd_node(node, CVMX_GSERX_RX_PWR_CTRL_P1(q));
+			pwr_ctrl_p1.s.p1_rx_subblk_pd &= ~4;
+			csr_wr_node(node, CVMX_GSERX_RX_PWR_CTRL_P1(q), pwr_ctrl_p1.u64);
+		}
+
+		/* Errata (GSER-20888) GSER incorrect synchronizers hurts PCIe
+		 * Override TX Power State machine TX reset control signal
+		 */
+		for (q = low_qlm; q <= high_qlm; q++) {
+			for (i = 0; i < 4; i++) {
+				cvmx_gserx_lanex_tx_cfg_0_t tx_cfg;
+				cvmx_gserx_lanex_pwr_ctrl_t pwr_ctrl;
+
+				tx_cfg.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_TX_CFG_0(i, q));
+				tx_cfg.s.tx_resetn_ovrrd_val = 1;
+				csr_wr_node(node, CVMX_GSERX_LANEX_TX_CFG_0(i, q), tx_cfg.u64);
+				pwr_ctrl.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_PWR_CTRL(i, q));
+				pwr_ctrl.s.tx_p2s_resetn_ovrrd_en = 1;
+				csr_wr_node(node, CVMX_GSERX_LANEX_PWR_CTRL(i, q), pwr_ctrl.u64);
+			}
+		}
+	}
+
+	if (!is_host) {
+		cvmx_pciercx_cfg089_t cfg089;
+		cvmx_pciercx_cfg090_t cfg090;
+		cvmx_pciercx_cfg091_t cfg091;
+		cvmx_pciercx_cfg092_t cfg092;
+		cvmx_pciercx_cfg548_t cfg548;
+		cvmx_pciercx_cfg554_t cfg554;
+
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_0)) {
+			/* Errata (GSER-21178) PCIe gen3 doesn't work */
+			/* The starting equalization hints are incorrect on CN78XX pass 1.x. Fix
+			 * them for the 8 possible lanes. It doesn't hurt to program them even
+			 * for lanes not in use
+			 */
+			cfg089.u32 = cvmx_pcie_cfgx_read_node(node, pem, CVMX_PCIERCX_CFG089(pem));
+			cfg089.s.l1urph = 2;
+			cfg089.s.l1utp = 7;
+			cfg089.s.l0urph = 2;
+			cfg089.s.l0utp = 7;
+			cvmx_pcie_cfgx_write_node(node, pem, CVMX_PCIERCX_CFG089(pem), cfg089.u32);
+			cfg090.u32 = cvmx_pcie_cfgx_read_node(node, pem, CVMX_PCIERCX_CFG090(pem));
+			cfg090.s.l3urph = 2;
+			cfg090.s.l3utp = 7;
+			cfg090.s.l2urph = 2;
+			cfg090.s.l2utp = 7;
+			cvmx_pcie_cfgx_write_node(node, pem, CVMX_PCIERCX_CFG090(pem), cfg090.u32);
+			cfg091.u32 = cvmx_pcie_cfgx_read_node(node, pem, CVMX_PCIERCX_CFG091(pem));
+			cfg091.s.l5urph = 2;
+			cfg091.s.l5utp = 7;
+			cfg091.s.l4urph = 2;
+			cfg091.s.l4utp = 7;
+			cvmx_pcie_cfgx_write_node(node, pem, CVMX_PCIERCX_CFG091(pem), cfg091.u32);
+			cfg092.u32 = cvmx_pcie_cfgx_read_node(node, pem, CVMX_PCIERCX_CFG092(pem));
+			cfg092.s.l7urph = 2;
+			cfg092.s.l7utp = 7;
+			cfg092.s.l6urph = 2;
+			cfg092.s.l6utp = 7;
+			cvmx_pcie_cfgx_write_node(node, pem, CVMX_PCIERCX_CFG092(pem), cfg092.u32);
+			/* FIXME: Disable phase 2 and phase 3 equalization */
+			cfg548.u32 = cvmx_pcie_cfgx_read_node(node, pem, CVMX_PCIERCX_CFG548(pem));
+			cfg548.s.ep2p3d = 1;
+			cvmx_pcie_cfgx_write_node(node, pem, CVMX_PCIERCX_CFG548(pem), cfg548.u32);
+		}
+		/* Errata (GSER-21331) GEN3 Equalization may fail */
+		/* Disable preset #10 and disable the 2ms timeout */
+		cfg554.u32 = cvmx_pcie_cfgx_read_node(node, pem, CVMX_PCIERCX_CFG554(pem));
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_0))
+			cfg554.s.p23td = 1;
+		cfg554.s.prv = 0x3ff;
+		cvmx_pcie_cfgx_write_node(node, pem, CVMX_PCIERCX_CFG554(pem), cfg554.u32);
+
+		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_0)) {
+			need_ep_monitor = (pem_cfg.s.md == 2);
+			if (need_ep_monitor) {
+				cvmx_pciercx_cfg031_t cfg031;
+				cvmx_pciercx_cfg040_t cfg040;
+
+				/* Force Gen1 for initial link bringup. We'll
+				 * fix it later
+				 */
+				pem_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(pem));
+				pem_cfg.s.md = 0;
+				csr_wr_node(node, CVMX_PEMX_CFG(pem), pem_cfg.u64);
+				cfg031.u32 = cvmx_pcie_cfgx_read_node(node, pem,
+								      CVMX_PCIERCX_CFG031(pem));
+				cfg031.s.mls = 0;
+				cvmx_pcie_cfgx_write_node(node, pem, CVMX_PCIERCX_CFG031(pem),
+							  cfg031.u32);
+				cfg040.u32 = cvmx_pcie_cfgx_read_node(node, pem,
+								      CVMX_PCIERCX_CFG040(pem));
+				cfg040.s.tls = 1;
+				cvmx_pcie_cfgx_write_node(node, pem, CVMX_PCIERCX_CFG040(pem),
+							  cfg040.u32);
+				__cvmx_qlm_pcie_errata_ep_cn78xx(node, pem);
+			}
+			return;
+		}
+	}
+
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_0)) {
+		/* De-assert the SOFT_RST bit for this QLM (PEM), causing the PCIe
+		 * workarounds code above to take effect.
+		 */
+		soft_prst.u64 = csr_rd_node(node, CVMX_RST_SOFT_PRSTX(pem));
+		soft_prst.s.soft_prst = 0;
+		csr_wr_node(node, CVMX_RST_SOFT_PRSTX(pem), soft_prst.u64);
+		udelay(1);
+
+		/* Assert the SOFT_RST bit for this QLM (PEM), putting the PCIe back into
+		 * reset state with disturbing the workarounds.
+		 */
+		soft_prst.u64 = csr_rd_node(node, CVMX_RST_SOFT_PRSTX(pem));
+		soft_prst.s.soft_prst = 1;
+		csr_wr_node(node, CVMX_RST_SOFT_PRSTX(pem), soft_prst.u64);
+	}
+	udelay(1);
+}
+
+/**
+ * Setup the PEM to either driver or receive reset from PRST based on RC or EP
+ *
+ * @param node   Node to use in a Numa setup
+ * @param pem    Which PEM to setuo
+ * @param is_endpoint
+ *               Non zero if PEM is a EP
+ */
+static void __setup_pem_reset(int node, int pem, int is_endpoint)
+{
+	cvmx_rst_ctlx_t rst_ctl;
+
+	/* Make sure is_endpoint is either 0 or 1 */
+	is_endpoint = (is_endpoint != 0);
+	rst_ctl.u64 = csr_rd_node(node, CVMX_RST_CTLX(pem));
+	rst_ctl.s.prst_link = 0;	  /* Link down causes soft reset */
+	rst_ctl.s.rst_link = is_endpoint; /* EP PERST causes a soft reset */
+	rst_ctl.s.rst_drv = !is_endpoint; /* Drive if RC */
+	rst_ctl.s.rst_rcv = is_endpoint;  /* Only read PERST in EP mode */
+	rst_ctl.s.rst_chip = 0;		  /* PERST doesn't pull CHIP_RESET */
+	csr_wr_node(node, CVMX_RST_CTLX(pem), rst_ctl.u64);
+}
+
+/**
+ * Configure QLM speed and mode for cn78xx.
+ *
+ * @param node    Node to configure the QLM
+ * @param qlm     The QLM to configure
+ * @param baud_mhz   The speed the QLM needs to be configured in Mhz.
+ * @param mode    The QLM to be configured as SGMII/XAUI/PCIe.
+ * @param rc      Only used for PCIe, rc = 1 for root complex mode, 0 for EP mode.
+ * @param gen3    Only used for PCIe
+ *			gen3 = 2 GEN3 mode
+ *			gen3 = 1 GEN2 mode
+ *			gen3 = 0 GEN1 mode
+ *
+ * @param ref_clk_sel    The reference-clock selection to use to configure QLM
+ *			 0 = REF_100MHZ
+ *			 1 = REF_125MHZ
+ *			 2 = REF_156MHZ
+ *			 3 = REF_161MHZ
+ * @param ref_clk_input  The reference-clock input to use to configure QLM
+ *
+ * @return       Return 0 on success or -1.
+ */
+int octeon_configure_qlm_cn78xx(int node, int qlm, int baud_mhz, int mode, int rc, int gen3,
+				int ref_clk_sel, int ref_clk_input)
+{
+	cvmx_gserx_phy_ctl_t phy_ctl;
+	cvmx_gserx_lane_mode_t lmode;
+	cvmx_gserx_cfg_t cfg;
+	cvmx_gserx_refclk_sel_t refclk_sel;
+
+	int is_pcie = 0;
+	int is_ilk = 0;
+	int is_bgx = 0;
+	int lane_mode = 0;
+	int lmac_type = 0;
+	bool alt_pll = false;
+	int num_ports = 0;
+	int lane_to_sds = 0;
+
+	debug("%s(node: %d, qlm: %d, baud_mhz: %d, mode: %d, rc: %d, gen3: %d, ref_clk_sel: %d, ref_clk_input: %d\n",
+	      __func__, node, qlm, baud_mhz, mode, rc, gen3, ref_clk_sel, ref_clk_input);
+	if (OCTEON_IS_MODEL(OCTEON_CN76XX) && qlm > 4) {
+		debug("%s: qlm %d not present on CN76XX\n", __func__, qlm);
+		return -1;
+	}
+
+	/* Errata PEM-31375 PEM RSL accesses to PCLK registers can timeout
+	 * during speed change. Change SLI_WINDOW_CTL[time] to 525us
+	 */
+	__set_sli_window_ctl_errata_31375(node);
+
+	cfg.u64 = csr_rd_node(node, CVMX_GSERX_CFG(qlm));
+	/* If PEM is in EP, no need to do anything */
+
+	if (cfg.s.pcie && rc == 0) {
+		debug("%s: node %d, qlm %d is in PCIe endpoint mode, returning\n",
+		      __func__, node, qlm);
+		return 0;
+	}
+
+	/* Set the reference clock to use */
+	refclk_sel.u64 = 0;
+	if (ref_clk_input == 0) { /* External ref clock */
+		refclk_sel.s.com_clk_sel = 0;
+		refclk_sel.s.use_com1 = 0;
+	} else if (ref_clk_input == 1) {
+		refclk_sel.s.com_clk_sel = 1;
+		refclk_sel.s.use_com1 = 0;
+	} else {
+		refclk_sel.s.com_clk_sel = 1;
+		refclk_sel.s.use_com1 = 1;
+	}
+
+	csr_wr_node(node, CVMX_GSERX_REFCLK_SEL(qlm), refclk_sel.u64);
+
+	/* Reset the QLM after changing the reference clock */
+	phy_ctl.u64 = csr_rd_node(node, CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_reset = 1;
+	phy_ctl.s.phy_pd = 1;
+	csr_wr_node(node, CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+
+	udelay(1000);
+
+	/* Always restore the reference clocks for a QLM */
+	memcpy(ref_clk_cn78xx[node][qlm], def_ref_clk_cn78xx, sizeof(def_ref_clk_cn78xx));
+	switch (mode) {
+	case CVMX_QLM_MODE_PCIE:
+	case CVMX_QLM_MODE_PCIE_1X8: {
+		cvmx_pemx_cfg_t pemx_cfg;
+		cvmx_pemx_on_t pemx_on;
+
+		is_pcie = 1;
+
+		if (ref_clk_sel == 0) {
+			refclk_sel.u64 = csr_rd_node(node, CVMX_GSERX_REFCLK_SEL(qlm));
+			refclk_sel.s.pcie_refclk125 = 0;
+			csr_wr_node(node, CVMX_GSERX_REFCLK_SEL(qlm), refclk_sel.u64);
+			if (gen3 == 0) /* Gen1 mode */
+				lane_mode = R_2_5G_REFCLK100;
+			else if (gen3 == 1) /* Gen2 mode */
+				lane_mode = R_5G_REFCLK100;
+			else
+				lane_mode = R_8G_REFCLK100;
+		} else if (ref_clk_sel == 1) {
+			refclk_sel.u64 = csr_rd_node(node, CVMX_GSERX_REFCLK_SEL(qlm));
+			refclk_sel.s.pcie_refclk125 = 1;
+			csr_wr_node(node, CVMX_GSERX_REFCLK_SEL(qlm), refclk_sel.u64);
+			if (gen3 == 0) /* Gen1 mode */
+				lane_mode = R_2_5G_REFCLK125;
+			else if (gen3 == 1) /* Gen2 mode */
+				lane_mode = R_5G_REFCLK125;
+			else
+				lane_mode = R_8G_REFCLK125;
+		} else {
+			printf("Invalid reference clock for PCIe on QLM%d\n", qlm);
+			return -1;
+		}
+
+		switch (qlm) {
+		case 0: /* Either x4 or x8 based on PEM0 */
+		{
+			cvmx_rst_soft_prstx_t rst_prst;
+
+			rst_prst.u64 = csr_rd_node(node, CVMX_RST_SOFT_PRSTX(0));
+			rst_prst.s.soft_prst = rc;
+			csr_wr_node(node, CVMX_RST_SOFT_PRSTX(0), rst_prst.u64);
+			__setup_pem_reset(node, 0, !rc);
+
+			pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(0));
+			pemx_cfg.cn78xx.lanes8 = (mode == CVMX_QLM_MODE_PCIE_1X8);
+			pemx_cfg.cn78xx.hostmd = rc;
+			pemx_cfg.cn78xx.md = gen3;
+			csr_wr_node(node, CVMX_PEMX_CFG(0), pemx_cfg.u64);
+			/* x8 mode waits for QLM1 setup before turning on the PEM */
+			if (mode == CVMX_QLM_MODE_PCIE) {
+				pemx_on.u64 = csr_rd_node(node, CVMX_PEMX_ON(0));
+				pemx_on.s.pemon = 1;
+				csr_wr_node(node, CVMX_PEMX_ON(0), pemx_on.u64);
+			}
+			break;
+		}
+		case 1: /* Either PEM0 x8 or PEM1 x4 */
+		{
+			if (mode == CVMX_QLM_MODE_PCIE) {
+				cvmx_rst_soft_prstx_t rst_prst;
+				cvmx_pemx_cfg_t pemx_cfg;
+
+				rst_prst.u64 = csr_rd_node(node, CVMX_RST_SOFT_PRSTX(1));
+				rst_prst.s.soft_prst = rc;
+				csr_wr_node(node, CVMX_RST_SOFT_PRSTX(1), rst_prst.u64);
+				__setup_pem_reset(node, 1, !rc);
+
+				pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(1));
+				pemx_cfg.cn78xx.lanes8 = 0;
+				pemx_cfg.cn78xx.hostmd = rc;
+				pemx_cfg.cn78xx.md = gen3;
+				csr_wr_node(node, CVMX_PEMX_CFG(1), pemx_cfg.u64);
+
+				pemx_on.u64 = csr_rd_node(node, CVMX_PEMX_ON(1));
+				pemx_on.s.pemon = 1;
+				csr_wr_node(node, CVMX_PEMX_ON(1), pemx_on.u64);
+			} else {
+				pemx_on.u64 = csr_rd_node(node, CVMX_PEMX_ON(0));
+				pemx_on.s.pemon = 1;
+				csr_wr_node(node, CVMX_PEMX_ON(0), pemx_on.u64);
+			}
+			break;
+		}
+		case 2: /* Either PEM2 x4 or PEM2 x8 */
+		{
+			cvmx_rst_soft_prstx_t rst_prst;
+
+			rst_prst.u64 = csr_rd_node(node, CVMX_RST_SOFT_PRSTX(2));
+			rst_prst.s.soft_prst = rc;
+			csr_wr_node(node, CVMX_RST_SOFT_PRSTX(2), rst_prst.u64);
+			__setup_pem_reset(node, 2, !rc);
+
+			pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(2));
+			pemx_cfg.cn78xx.lanes8 = (mode == CVMX_QLM_MODE_PCIE_1X8);
+			pemx_cfg.cn78xx.hostmd = rc;
+			pemx_cfg.cn78xx.md = gen3;
+			csr_wr_node(node, CVMX_PEMX_CFG(2), pemx_cfg.u64);
+			/* x8 mode waits for QLM3 setup before turning on the PEM */
+			if (mode == CVMX_QLM_MODE_PCIE) {
+				pemx_on.u64 = csr_rd_node(node, CVMX_PEMX_ON(2));
+				pemx_on.s.pemon = 1;
+				csr_wr_node(node, CVMX_PEMX_ON(2), pemx_on.u64);
+			}
+			break;
+		}
+		case 3: /* Either PEM2 x8 or PEM3 x4 */
+		{
+			pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(2));
+			if (pemx_cfg.cn78xx.lanes8) {
+				/* Last 4 lanes of PEM2 */
+				/* PEMX_CFG already setup */
+				pemx_on.u64 = csr_rd_node(node, CVMX_PEMX_ON(2));
+				pemx_on.s.pemon = 1;
+				csr_wr_node(node, CVMX_PEMX_ON(2), pemx_on.u64);
+			}
+			/* Check if PEM3 uses QLM3 and in x4 lane mode */
+			if (mode == CVMX_QLM_MODE_PCIE) {
+				cvmx_rst_soft_prstx_t rst_prst;
+
+				rst_prst.u64 = csr_rd_node(node, CVMX_RST_SOFT_PRSTX(3));
+				rst_prst.s.soft_prst = rc;
+				csr_wr_node(node, CVMX_RST_SOFT_PRSTX(3), rst_prst.u64);
+				__setup_pem_reset(node, 3, !rc);
+
+				pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(3));
+				pemx_cfg.cn78xx.lanes8 = 0;
+				pemx_cfg.cn78xx.hostmd = rc;
+				pemx_cfg.cn78xx.md = gen3;
+				csr_wr_node(node, CVMX_PEMX_CFG(3), pemx_cfg.u64);
+
+				pemx_on.u64 = csr_rd_node(node, CVMX_PEMX_ON(3));
+				pemx_on.s.pemon = 1;
+				csr_wr_node(node, CVMX_PEMX_ON(3), pemx_on.u64);
+			}
+			break;
+		}
+		case 4: /* Either PEM3 x4 or PEM3 x8 */
+		{
+			if (mode == CVMX_QLM_MODE_PCIE_1X8) {
+				/* Last 4 lanes of PEM3 */
+				/* PEMX_CFG already setup */
+				pemx_on.u64 = csr_rd_node(node, CVMX_PEMX_ON(3));
+				pemx_on.s.pemon = 1;
+				csr_wr_node(node, CVMX_PEMX_ON(3), pemx_on.u64);
+			} else {
+				/* 4 lanes of PEM3 */
+				cvmx_pemx_qlm_t pemx_qlm;
+				cvmx_rst_soft_prstx_t rst_prst;
+
+				rst_prst.u64 = csr_rd_node(node, CVMX_RST_SOFT_PRSTX(3));
+				rst_prst.s.soft_prst = rc;
+				csr_wr_node(node, CVMX_RST_SOFT_PRSTX(3), rst_prst.u64);
+				__setup_pem_reset(node, 3, !rc);
+
+				pemx_cfg.u64 = csr_rd_node(node, CVMX_PEMX_CFG(3));
+				pemx_cfg.cn78xx.lanes8 = 0;
+				pemx_cfg.cn78xx.hostmd = rc;
+				pemx_cfg.cn78xx.md = gen3;
+				csr_wr_node(node, CVMX_PEMX_CFG(3), pemx_cfg.u64);
+				/* PEM3 is on QLM4 */
+				pemx_qlm.u64 = csr_rd_node(node, CVMX_PEMX_QLM(3));
+				pemx_qlm.cn78xx.pem3qlm = 1;
+				csr_wr_node(node, CVMX_PEMX_QLM(3), pemx_qlm.u64);
+				pemx_on.u64 = csr_rd_node(node, CVMX_PEMX_ON(3));
+				pemx_on.s.pemon = 1;
+				csr_wr_node(node, CVMX_PEMX_ON(3), pemx_on.u64);
+			}
+			break;
+		}
+		default:
+			break;
+		}
+		break;
+	}
+	case CVMX_QLM_MODE_ILK:
+		is_ilk = 1;
+		lane_mode = __get_lane_mode_for_speed_and_ref_clk(ref_clk_sel, baud_mhz, &alt_pll);
+		if (lane_mode == -1)
+			return -1;
+		/* FIXME: Set lane_mode for other speeds */
+		break;
+	case CVMX_QLM_MODE_SGMII:
+		is_bgx = 1;
+		lmac_type = 0;
+		lane_to_sds = 1;
+		num_ports = 4;
+		lane_mode = __get_lane_mode_for_speed_and_ref_clk(ref_clk_sel, baud_mhz, &alt_pll);
+		debug("%s: SGMII lane mode: %d, alternate PLL: %s\n", __func__, lane_mode,
+		      alt_pll ? "true" : "false");
+		if (lane_mode == -1)
+			return -1;
+		break;
+	case CVMX_QLM_MODE_XAUI:
+		is_bgx = 5;
+		lmac_type = 1;
+		lane_to_sds = 0xe4;
+		num_ports = 1;
+		lane_mode = __get_lane_mode_for_speed_and_ref_clk(ref_clk_sel, baud_mhz, &alt_pll);
+		debug("%s: XAUI lane mode: %d\n", __func__, lane_mode);
+		if (lane_mode == -1)
+			return -1;
+		break;
+	case CVMX_QLM_MODE_RXAUI:
+		is_bgx = 3;
+		lmac_type = 2;
+		lane_to_sds = 0;
+		num_ports = 2;
+		debug("%s: RXAUI lane mode: %d\n", __func__, lane_mode);
+		lane_mode = __get_lane_mode_for_speed_and_ref_clk(ref_clk_sel, baud_mhz, &alt_pll);
+		if (lane_mode == -1)
+			return -1;
+		break;
+	case CVMX_QLM_MODE_XFI: /* 10GR_4X1 */
+	case CVMX_QLM_MODE_10G_KR:
+		is_bgx = 1;
+		lmac_type = 3;
+		lane_to_sds = 1;
+		num_ports = 4;
+		lane_mode = __get_lane_mode_for_speed_and_ref_clk(ref_clk_sel, baud_mhz, &alt_pll);
+		debug("%s: XFI/10G_KR lane mode: %d\n", __func__, lane_mode);
+		if (lane_mode == -1)
+			return -1;
+		break;
+	case CVMX_QLM_MODE_XLAUI: /* 40GR4_1X4 */
+	case CVMX_QLM_MODE_40G_KR4:
+		is_bgx = 5;
+		lmac_type = 4;
+		lane_to_sds = 0xe4;
+		num_ports = 1;
+		lane_mode = __get_lane_mode_for_speed_and_ref_clk(ref_clk_sel, baud_mhz, &alt_pll);
+		debug("%s: XLAUI/40G_KR4 lane mode: %d\n", __func__, lane_mode);
+		if (lane_mode == -1)
+			return -1;
+		break;
+	case CVMX_QLM_MODE_DISABLED:
+		/* Power down the QLM */
+		phy_ctl.u64 = csr_rd_node(node, CVMX_GSERX_PHY_CTL(qlm));
+		phy_ctl.s.phy_pd = 1;
+		phy_ctl.s.phy_reset = 1;
+		csr_wr_node(node, CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+		/* Disable all modes */
+		csr_wr_node(node, CVMX_GSERX_CFG(qlm), 0);
+		/* Do nothing */
+		return 0;
+	default:
+		break;
+	}
+
+	if (alt_pll) {
+		debug("%s: alternate PLL settings used for node %d, qlm %d, lane mode %d, reference clock %d\n",
+		      __func__, node, qlm, lane_mode, ref_clk_sel);
+		if (__set_qlm_ref_clk_cn78xx(node, qlm, lane_mode, ref_clk_sel)) {
+			printf("%s: Error: reference clock %d is not supported for node %d, qlm %d\n",
+			       __func__, ref_clk_sel, node, qlm);
+			return -1;
+		}
+	}
+
+	/* Power up PHY, but keep it in reset */
+	phy_ctl.u64 = csr_rd_node(node, CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_pd = 0;
+	phy_ctl.s.phy_reset = 1;
+	csr_wr_node(node, CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+
+	/* Errata GSER-20788: GSER(0..13)_CFG[BGX_QUAD]=1 is broken. Force the
+	 * BGX_QUAD bit to be clear for CN78XX pass 1.x
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
+		is_bgx &= 3;
+
+	/* Set GSER for the interface mode */
+	cfg.u64 = csr_rd_node(node, CVMX_GSERX_CFG(qlm));
+	cfg.s.ila = is_ilk;
+	cfg.s.bgx = is_bgx & 1;
+	cfg.s.bgx_quad = (is_bgx >> 2) & 1;
+	cfg.s.bgx_dual = (is_bgx >> 1) & 1;
+	cfg.s.pcie = is_pcie;
+	csr_wr_node(node, CVMX_GSERX_CFG(qlm), cfg.u64);
+
+	/* Lane mode */
+	lmode.u64 = csr_rd_node(node, CVMX_GSERX_LANE_MODE(qlm));
+	lmode.s.lmode = lane_mode;
+	csr_wr_node(node, CVMX_GSERX_LANE_MODE(qlm), lmode.u64);
+
+	/* BGX0-1 can connect to QLM0-1 or QLM 2-3. Program the select bit if we're
+	 * one of these QLMs and we're using BGX
+	 */
+	if (qlm < 4 && is_bgx) {
+		int bgx = qlm & 1;
+		int use_upper = (qlm >> 1) & 1;
+		cvmx_bgxx_cmr_global_config_t global_cfg;
+
+		global_cfg.u64 = csr_rd_node(node, CVMX_BGXX_CMR_GLOBAL_CONFIG(bgx));
+		global_cfg.s.pmux_sds_sel = use_upper;
+		csr_wr_node(node, CVMX_BGXX_CMR_GLOBAL_CONFIG(bgx), global_cfg.u64);
+	}
+
+	/* Bring phy out of reset */
+	phy_ctl.u64 = csr_rd_node(node, CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_reset = 0;
+	csr_wr_node(node, CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+	csr_rd_node(node, CVMX_GSERX_PHY_CTL(qlm));
+
+	/*
+	 * Wait 250 ns until the management interface is ready to accept
+	 * read/write commands.
+	 */
+	udelay(1);
+
+	if (is_bgx) {
+		int bgx = (qlm < 2) ? qlm : qlm - 2;
+		cvmx_bgxx_cmrx_config_t cmr_config;
+		int index;
+
+		for (index = 0; index < num_ports; index++) {
+			cmr_config.u64 = csr_rd_node(node, CVMX_BGXX_CMRX_CONFIG(index, bgx));
+			cmr_config.s.enable = 0;
+			cmr_config.s.data_pkt_tx_en = 0;
+			cmr_config.s.data_pkt_rx_en = 0;
+			cmr_config.s.lmac_type = lmac_type;
+			cmr_config.s.lane_to_sds = ((lane_to_sds == 1) ?
+						    index : ((lane_to_sds == 0) ?
+							     (index ? 0xe : 4) :
+							     lane_to_sds));
+			csr_wr_node(node, CVMX_BGXX_CMRX_CONFIG(index, bgx), cmr_config.u64);
+		}
+		csr_wr_node(node, CVMX_BGXX_CMR_TX_LMACS(bgx), num_ports);
+		csr_wr_node(node, CVMX_BGXX_CMR_RX_LMACS(bgx), num_ports);
+
+		/* Enable/disable training for 10G_KR/40G_KR4/XFI/XLAUI modes */
+		for (index = 0; index < num_ports; index++) {
+			cvmx_bgxx_spux_br_pmd_control_t spu_pmd_control;
+
+			spu_pmd_control.u64 =
+				csr_rd_node(node, CVMX_BGXX_SPUX_BR_PMD_CONTROL(index, bgx));
+
+			if (mode == CVMX_QLM_MODE_10G_KR || mode == CVMX_QLM_MODE_40G_KR4)
+				spu_pmd_control.s.train_en = 1;
+			else if (mode == CVMX_QLM_MODE_XFI || mode == CVMX_QLM_MODE_XLAUI)
+				spu_pmd_control.s.train_en = 0;
+
+			csr_wr_node(node, CVMX_BGXX_SPUX_BR_PMD_CONTROL(index, bgx),
+				    spu_pmd_control.u64);
+		}
+	}
+
+	/* Configure the gser pll */
+	if (!is_pcie)
+		__qlm_setup_pll_cn78xx(node, qlm);
+
+	/* Wait for reset to complete and the PLL to lock */
+	if (CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_GSERX_PLL_STAT(qlm),
+				       cvmx_gserx_pll_stat_t,
+				       pll_lock, ==, 1, 10000)) {
+		printf("%d:QLM%d: Timeout waiting for GSERX_PLL_STAT[pll_lock]\n",
+		       node, qlm);
+		return -1;
+	}
+
+	/* Perform PCIe errata workaround */
+	if (is_pcie)
+		__cvmx_qlm_pcie_errata_cn78xx(node, qlm);
+	else
+		__qlm_init_errata_20844(node, qlm);
+
+	/* Wait for reset to complete and the PLL to lock */
+	/* PCIe mode doesn't become ready until the PEM block attempts to bring
+	 * the interface up. Skip this check for PCIe
+	 */
+	if (!is_pcie && CVMX_WAIT_FOR_FIELD64_NODE(node, CVMX_GSERX_QLM_STAT(qlm),
+						   cvmx_gserx_qlm_stat_t, rst_rdy,
+						   ==, 1, 10000)) {
+		printf("%d:QLM%d: Timeout waiting for GSERX_QLM_STAT[rst_rdy]\n",
+		       node, qlm);
+		return -1;
+	}
+
+	/* Errata GSER-26150: 10G PHY PLL Temperature Failure */
+	/* This workaround must be completed after the final deassertion of
+	 * GSERx_PHY_CTL[PHY_RESET].
+	 * Apply the workaround to 10.3125Gbps and 8Gbps only.
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X) &&
+	    (baud_mhz == 103125 || (is_pcie && gen3 == 2)))
+		__qlm_errata_gser_26150(0, qlm, is_pcie);
+
+	/* Errata GSER-26636: 10G-KR/40G-KR - Inverted Tx Coefficient Direction
+	 * Change. Applied to all 10G standards (required for KR) but also
+	 * applied to other standards in case software training is used
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X) && baud_mhz == 103125)
+		__qlm_kr_inc_dec_gser26636(node, qlm);
+
+	/* Errata GSER-25992: RX EQ Default Settings Update (CTLE Bias) */
+	/* This workaround will only be applied to Pass 1.x */
+	/* It will also only be applied if the SERDES data-rate is 10G */
+	/* or if PCIe Gen3 (gen3=2 is PCIe Gen3) */
+	if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X) &&
+	    (baud_mhz == 103125 || (is_pcie && gen3 == 2)))
+		cvmx_qlm_gser_errata_25992(node, qlm);
+
+	/* Errata GSER-27140: Updating the RX EQ settings due to temperature
+	 * drift sensitivities
+	 */
+	/* This workaround will also only be applied if the SERDES data-rate is 10G */
+	if (baud_mhz == 103125)
+		__qlm_rx_eq_temp_gser27140(node, qlm);
+
+	/* Reduce the voltage amplitude coming from Marvell PHY and also change
+	 * DFE threshold settings for RXAUI interface
+	 */
+	if (is_bgx && mode == CVMX_QLM_MODE_RXAUI) {
+		int l;
+
+		for (l = 0; l < 4; l++) {
+			cvmx_gserx_lanex_rx_cfg_4_t cfg4;
+			cvmx_gserx_lanex_tx_cfg_0_t cfg0;
+			/* Change the Q/QB error sampler 0 threshold from 0xD to 0xF */
+			cfg4.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_RX_CFG_4(l, qlm));
+			cfg4.s.cfg_rx_errdet_ctrl = 0xcf6f;
+			csr_wr_node(node, CVMX_GSERX_LANEX_RX_CFG_4(l, qlm), cfg4.u64);
+			/* Reduce the voltage swing to roughly 460mV */
+			cfg0.u64 = csr_rd_node(node, CVMX_GSERX_LANEX_TX_CFG_0(l, qlm));
+			cfg0.s.cfg_tx_swing = 0x12;
+			csr_wr_node(node, CVMX_GSERX_LANEX_TX_CFG_0(l, qlm), cfg0.u64);
+		}
+	}
+
+	return 0;
+}
+
+static int __is_qlm_valid_bgx_cn73xx(int qlm)
+{
+	if (qlm == 2 || qlm == 3 || qlm == 5 || qlm == 6)
+		return 0;
+	return 1;
+}
+
+/**
+ * Configure QLM/DLM speed and mode for cn73xx.
+ *
+ * @param qlm     The QLM to configure
+ * @param baud_mhz   The speed the QLM needs to be configured in Mhz.
+ * @param mode    The QLM to be configured as SGMII/XAUI/PCIe.
+ * @param rc      Only used for PCIe, rc = 1 for root complex mode, 0 for EP mode.
+ * @param gen3    Only used for PCIe
+ *			gen3 = 2 GEN3 mode
+ *			gen3 = 1 GEN2 mode
+ *			gen3 = 0 GEN1 mode
+ *
+ * @param ref_clk_sel   The reference-clock selection to use to configure QLM
+ *			0 = REF_100MHZ
+ *			1 = REF_125MHZ
+ *			2 = REF_156MHZ
+ *			3 = REF_161MHZ
+ *
+ * @param ref_clk_input  The reference-clock input to use to configure QLM
+ *			 0 = QLM/DLM reference clock input
+ *			 1 = common reference clock input 0
+ *			 2 = common reference clock input 1
+ *
+ * @return       Return 0 on success or -1.
+ */
+static int octeon_configure_qlm_cn73xx(int qlm, int baud_mhz, int mode, int rc, int gen3,
+				       int ref_clk_sel, int ref_clk_input)
+{
+	cvmx_gserx_phy_ctl_t phy_ctl;
+	cvmx_gserx_lane_mode_t lmode;
+	cvmx_gserx_cfg_t cfg;
+	cvmx_gserx_refclk_sel_t refclk_sel;
+	int is_pcie = 0;
+	int is_bgx = 0;
+	int lane_mode = 0;
+	short lmac_type[4] = { 0 };
+	short sds_lane[4] = { 0 };
+	bool alt_pll = false;
+	int enable_training = 0;
+	int additional_lmacs = 0;
+
+	debug("%s(qlm: %d, baud_mhz: %d, mode: %d, rc: %d, gen3: %d, ref_clk_sel: %d, ref_clk_input: %d\n",
+	      __func__, qlm, baud_mhz, mode, rc, gen3, ref_clk_sel, ref_clk_input);
+
+	/* Don't configure QLM4 if it is not in SATA mode */
+	if (qlm == 4) {
+		if (mode == CVMX_QLM_MODE_SATA_2X1)
+			return __setup_sata(qlm, baud_mhz, ref_clk_sel, ref_clk_input);
+
+		printf("Invalid mode for QLM4\n");
+		return 0;
+	}
+
+	cfg.u64 = csr_rd(CVMX_GSERX_CFG(qlm));
+
+	/* Errata PEM-31375 PEM RSL accesses to PCLK registers can timeout
+	 * during speed change. Change SLI_WINDOW_CTL[time] to 525us
+	 */
+	__set_sli_window_ctl_errata_31375(0);
+	/* If PEM is in EP, no need to do anything */
+	if (cfg.s.pcie && rc == 0 &&
+	    (mode == CVMX_QLM_MODE_PCIE || mode == CVMX_QLM_MODE_PCIE_1X8 ||
+	     mode == CVMX_QLM_MODE_PCIE_1X2)) {
+		debug("%s: qlm %d is in PCIe endpoint mode, returning\n", __func__, qlm);
+		return 0;
+	}
+
+	/* Set the reference clock to use */
+	refclk_sel.u64 = 0;
+	if (ref_clk_input == 0) { /* External ref clock */
+		refclk_sel.s.com_clk_sel = 0;
+		refclk_sel.s.use_com1 = 0;
+	} else if (ref_clk_input == 1) {
+		refclk_sel.s.com_clk_sel = 1;
+		refclk_sel.s.use_com1 = 0;
+	} else {
+		refclk_sel.s.com_clk_sel = 1;
+		refclk_sel.s.use_com1 = 1;
+	}
+
+	csr_wr(CVMX_GSERX_REFCLK_SEL(qlm), refclk_sel.u64);
+
+	/* Reset the QLM after changing the reference clock */
+	phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_reset = 1;
+	phy_ctl.s.phy_pd = 1;
+	csr_wr(CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+
+	udelay(1000);
+
+	/* Check if QLM is a valid BGX interface */
+	if (mode != CVMX_QLM_MODE_PCIE && mode != CVMX_QLM_MODE_PCIE_1X2 &&
+	    mode != CVMX_QLM_MODE_PCIE_1X8) {
+		if (__is_qlm_valid_bgx_cn73xx(qlm))
+			return -1;
+	}
+
+	switch (mode) {
+	case CVMX_QLM_MODE_PCIE:
+	case CVMX_QLM_MODE_PCIE_1X2:
+	case CVMX_QLM_MODE_PCIE_1X8: {
+		cvmx_pemx_cfg_t pemx_cfg;
+		cvmx_pemx_on_t pemx_on;
+		cvmx_pemx_qlm_t pemx_qlm;
+		cvmx_rst_soft_prstx_t rst_prst;
+		int port = 0;
+
+		is_pcie = 1;
+
+		if (qlm < 5 && mode == CVMX_QLM_MODE_PCIE_1X2) {
+			printf("Invalid PCIe mode(%d) for QLM%d\n", mode, qlm);
+			return -1;
+		}
+
+		if (ref_clk_sel == 0) {
+			refclk_sel.u64 = csr_rd(CVMX_GSERX_REFCLK_SEL(qlm));
+			refclk_sel.s.pcie_refclk125 = 0;
+			csr_wr(CVMX_GSERX_REFCLK_SEL(qlm), refclk_sel.u64);
+			if (gen3 == 0) /* Gen1 mode */
+				lane_mode = R_2_5G_REFCLK100;
+			else if (gen3 == 1) /* Gen2 mode */
+				lane_mode = R_5G_REFCLK100;
+			else
+				lane_mode = R_8G_REFCLK100;
+		} else if (ref_clk_sel == 1) {
+			refclk_sel.u64 = csr_rd(CVMX_GSERX_REFCLK_SEL(qlm));
+			refclk_sel.s.pcie_refclk125 = 1;
+			csr_wr(CVMX_GSERX_REFCLK_SEL(qlm), refclk_sel.u64);
+			if (gen3 == 0) /* Gen1 mode */
+				lane_mode = R_2_5G_REFCLK125;
+			else if (gen3 == 1) /* Gen2 mode */
+				lane_mode = R_5G_REFCLK125;
+			else
+				lane_mode = R_8G_REFCLK125;
+		} else {
+			printf("Invalid reference clock for PCIe on QLM%d\n", qlm);
+			return -1;
+		}
+
+		switch (qlm) {
+		case 0: /* Either x4 or x8 based on PEM0 */
+			rst_prst.u64 = csr_rd(CVMX_RST_SOFT_PRSTX(0));
+			rst_prst.s.soft_prst = rc;
+			csr_wr(CVMX_RST_SOFT_PRSTX(0), rst_prst.u64);
+			__setup_pem_reset(0, 0, !rc);
+
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(0));
+			pemx_cfg.cn78xx.lanes8 = (mode == CVMX_QLM_MODE_PCIE_1X8);
+			pemx_cfg.cn78xx.hostmd = rc;
+			pemx_cfg.cn78xx.md = gen3;
+			csr_wr(CVMX_PEMX_CFG(0), pemx_cfg.u64);
+			/* x8 mode waits for QLM1 setup before turning on the PEM */
+			if (mode == CVMX_QLM_MODE_PCIE) {
+				pemx_on.u64 = csr_rd(CVMX_PEMX_ON(0));
+				pemx_on.s.pemon = 1;
+				csr_wr(CVMX_PEMX_ON(0), pemx_on.u64);
+			}
+			break;
+		case 1: /* Either PEM0 x8 or PEM1 x4 */
+			if (mode == CVMX_QLM_MODE_PCIE) {
+				rst_prst.u64 = csr_rd(CVMX_RST_SOFT_PRSTX(1));
+				rst_prst.s.soft_prst = rc;
+				csr_wr(CVMX_RST_SOFT_PRSTX(1), rst_prst.u64);
+				__setup_pem_reset(0, 1, !rc);
+
+				pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(1));
+				pemx_cfg.cn78xx.lanes8 = 0;
+				pemx_cfg.cn78xx.hostmd = rc;
+				pemx_cfg.cn78xx.md = gen3;
+				csr_wr(CVMX_PEMX_CFG(1), pemx_cfg.u64);
+
+				pemx_on.u64 = csr_rd(CVMX_PEMX_ON(1));
+				pemx_on.s.pemon = 1;
+				csr_wr(CVMX_PEMX_ON(1), pemx_on.u64);
+			} else { /* x8 mode */
+				pemx_on.u64 = csr_rd(CVMX_PEMX_ON(0));
+				pemx_on.s.pemon = 1;
+				csr_wr(CVMX_PEMX_ON(0), pemx_on.u64);
+			}
+			break;
+		case 2: /* Either PEM2 x4 or PEM2 x8 or BGX0 */
+		{
+			pemx_qlm.u64 = csr_rd(CVMX_PEMX_QLM(2));
+			pemx_qlm.cn73xx.pemdlmsel = 0;
+			csr_wr(CVMX_PEMX_QLM(2), pemx_qlm.u64);
+
+			rst_prst.u64 = csr_rd(CVMX_RST_SOFT_PRSTX(2));
+			rst_prst.s.soft_prst = rc;
+			csr_wr(CVMX_RST_SOFT_PRSTX(2), rst_prst.u64);
+			__setup_pem_reset(0, 2, !rc);
+
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(2));
+			pemx_cfg.cn78xx.lanes8 = (mode == CVMX_QLM_MODE_PCIE_1X8);
+			pemx_cfg.cn78xx.hostmd = rc;
+			pemx_cfg.cn78xx.md = gen3;
+			csr_wr(CVMX_PEMX_CFG(2), pemx_cfg.u64);
+			/* x8 mode waits for QLM3 setup before turning on the PEM */
+			if (mode == CVMX_QLM_MODE_PCIE) {
+				pemx_on.u64 = csr_rd(CVMX_PEMX_ON(2));
+				pemx_on.s.pemon = 1;
+				csr_wr(CVMX_PEMX_ON(2), pemx_on.u64);
+			}
+			break;
+		}
+		case 3: /* Either PEM2 x8 or PEM3 x4 or BGX1 */
+			/* PEM2/PEM3 are configured to use QLM2/3 */
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(2));
+			if (pemx_cfg.cn78xx.lanes8) {
+				/* Last 4 lanes of PEM2 */
+				/* PEMX_CFG already setup */
+				pemx_on.u64 = csr_rd(CVMX_PEMX_ON(2));
+				pemx_on.s.pemon = 1;
+				csr_wr(CVMX_PEMX_ON(2), pemx_on.u64);
+			}
+			/* Check if PEM3 uses QLM3 and in x4 lane mode */
+			if (mode == CVMX_QLM_MODE_PCIE) {
+				pemx_qlm.u64 = csr_rd(CVMX_PEMX_QLM(3));
+				pemx_qlm.cn73xx.pemdlmsel = 0;
+				csr_wr(CVMX_PEMX_QLM(3), pemx_qlm.u64);
+
+				rst_prst.u64 = csr_rd(CVMX_RST_SOFT_PRSTX(3));
+				rst_prst.s.soft_prst = rc;
+				csr_wr(CVMX_RST_SOFT_PRSTX(3), rst_prst.u64);
+				__setup_pem_reset(0, 3, !rc);
+
+				pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(3));
+				pemx_cfg.cn78xx.lanes8 = 0;
+				pemx_cfg.cn78xx.hostmd = rc;
+				pemx_cfg.cn78xx.md = gen3;
+				csr_wr(CVMX_PEMX_CFG(3), pemx_cfg.u64);
+
+				pemx_on.u64 = csr_rd(CVMX_PEMX_ON(3));
+				pemx_on.s.pemon = 1;
+				csr_wr(CVMX_PEMX_ON(3), pemx_on.u64);
+			}
+			break;
+		case 5: /* PEM2/PEM3 x2 or BGX2 */
+		case 6:
+			port = (qlm == 5) ? 2 : 3;
+			if (mode == CVMX_QLM_MODE_PCIE_1X2) {
+				/* PEM2/PEM3 are configured to use DLM5/6 */
+				pemx_qlm.u64 = csr_rd(CVMX_PEMX_QLM(port));
+				pemx_qlm.cn73xx.pemdlmsel = 1;
+				csr_wr(CVMX_PEMX_QLM(port), pemx_qlm.u64);
+				/* 2 lanes of PEM3 */
+				rst_prst.u64 = csr_rd(CVMX_RST_SOFT_PRSTX(port));
+				rst_prst.s.soft_prst = rc;
+				csr_wr(CVMX_RST_SOFT_PRSTX(port), rst_prst.u64);
+				__setup_pem_reset(0, port, !rc);
+
+				pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(port));
+				pemx_cfg.cn78xx.lanes8 = 0;
+				pemx_cfg.cn78xx.hostmd = rc;
+				pemx_cfg.cn78xx.md = gen3;
+				csr_wr(CVMX_PEMX_CFG(port), pemx_cfg.u64);
+
+				pemx_on.u64 = csr_rd(CVMX_PEMX_ON(port));
+				pemx_on.s.pemon = 1;
+				csr_wr(CVMX_PEMX_ON(port), pemx_on.u64);
+			}
+			break;
+		default:
+			break;
+		}
+		break;
+	}
+	case CVMX_QLM_MODE_SGMII:
+		is_bgx = 1;
+		lmac_type[0] = 0;
+		lmac_type[1] = 0;
+		lmac_type[2] = 0;
+		lmac_type[3] = 0;
+		sds_lane[0] = 0;
+		sds_lane[1] = 1;
+		sds_lane[2] = 2;
+		sds_lane[3] = 3;
+		break;
+	case CVMX_QLM_MODE_SGMII_2X1:
+		if (qlm == 5) {
+			is_bgx = 1;
+			lmac_type[0] = 0;
+			lmac_type[1] = 0;
+			lmac_type[2] = -1;
+			lmac_type[3] = -1;
+			sds_lane[0] = 0;
+			sds_lane[1] = 1;
+		} else if (qlm == 6) {
+			is_bgx = 1;
+			lmac_type[0] = -1;
+			lmac_type[1] = -1;
+			lmac_type[2] = 0;
+			lmac_type[3] = 0;
+			sds_lane[2] = 2;
+			sds_lane[3] = 3;
+			additional_lmacs = 2;
+		}
+		break;
+	case CVMX_QLM_MODE_XAUI:
+		is_bgx = 5;
+		lmac_type[0] = 1;
+		lmac_type[1] = -1;
+		lmac_type[2] = -1;
+		lmac_type[3] = -1;
+		sds_lane[0] = 0xe4;
+		break;
+	case CVMX_QLM_MODE_RXAUI:
+		is_bgx = 3;
+		lmac_type[0] = 2;
+		lmac_type[1] = 2;
+		lmac_type[2] = -1;
+		lmac_type[3] = -1;
+		sds_lane[0] = 0x4;
+		sds_lane[1] = 0xe;
+		break;
+	case CVMX_QLM_MODE_RXAUI_1X2:
+		if (qlm == 5) {
+			is_bgx = 3;
+			lmac_type[0] = 2;
+			lmac_type[1] = -1;
+			lmac_type[2] = -1;
+			lmac_type[3] = -1;
+			sds_lane[0] = 0x4;
+		}
+		if (qlm == 6) {
+			is_bgx = 3;
+			lmac_type[0] = -1;
+			lmac_type[1] = -1;
+			lmac_type[2] = 2;
+			lmac_type[3] = -1;
+			sds_lane[2] = 0xe;
+			additional_lmacs = 2;
+		}
+		break;
+	case CVMX_QLM_MODE_10G_KR:
+		enable_training = 1;
+	case CVMX_QLM_MODE_XFI: /* 10GR_4X1 */
+		is_bgx = 1;
+		lmac_type[0] = 3;
+		lmac_type[1] = 3;
+		lmac_type[2] = 3;
+		lmac_type[3] = 3;
+		sds_lane[0] = 0;
+		sds_lane[1] = 1;
+		sds_lane[2] = 2;
+		sds_lane[3] = 3;
+		break;
+	case CVMX_QLM_MODE_10G_KR_1X2:
+		enable_training = 1;
+	case CVMX_QLM_MODE_XFI_1X2:
+		if (qlm == 5) {
+			is_bgx = 1;
+			lmac_type[0] = 3;
+			lmac_type[1] = 3;
+			lmac_type[2] = -1;
+			lmac_type[3] = -1;
+			sds_lane[0] = 0;
+			sds_lane[1] = 1;
+		} else if (qlm == 6) {
+			is_bgx = 1;
+			lmac_type[0] = -1;
+			lmac_type[1] = -1;
+			lmac_type[2] = 3;
+			lmac_type[3] = 3;
+			sds_lane[2] = 2;
+			sds_lane[3] = 3;
+			additional_lmacs = 2;
+		}
+		break;
+	case CVMX_QLM_MODE_40G_KR4:
+		enable_training = 1;
+	case CVMX_QLM_MODE_XLAUI: /* 40GR4_1X4 */
+		is_bgx = 5;
+		lmac_type[0] = 4;
+		lmac_type[1] = -1;
+		lmac_type[2] = -1;
+		lmac_type[3] = -1;
+		sds_lane[0] = 0xe4;
+		break;
+	case CVMX_QLM_MODE_RGMII_SGMII:
+		is_bgx = 1;
+		lmac_type[0] = 5;
+		lmac_type[1] = 0;
+		lmac_type[2] = 0;
+		lmac_type[3] = 0;
+		sds_lane[0] = 0;
+		sds_lane[1] = 1;
+		sds_lane[2] = 2;
+		sds_lane[3] = 3;
+		break;
+	case CVMX_QLM_MODE_RGMII_SGMII_1X1:
+		if (qlm == 5) {
+			is_bgx = 1;
+			lmac_type[0] = 5;
+			lmac_type[1] = 0;
+			lmac_type[2] = -1;
+			lmac_type[3] = -1;
+			sds_lane[0] = 0;
+			sds_lane[1] = 1;
+		}
+		break;
+	case CVMX_QLM_MODE_RGMII_SGMII_2X1:
+		if (qlm == 6) {
+			is_bgx = 1;
+			lmac_type[0] = 5;
+			lmac_type[1] = -1;
+			lmac_type[2] = 0;
+			lmac_type[3] = 0;
+			sds_lane[0] = 0;
+			sds_lane[2] = 0;
+			sds_lane[3] = 1;
+		}
+		break;
+	case CVMX_QLM_MODE_RGMII_10G_KR:
+		enable_training = 1;
+	case CVMX_QLM_MODE_RGMII_XFI:
+		is_bgx = 1;
+		lmac_type[0] = 5;
+		lmac_type[1] = 3;
+		lmac_type[2] = 3;
+		lmac_type[3] = 3;
+		sds_lane[0] = 0;
+		sds_lane[1] = 1;
+		sds_lane[2] = 2;
+		sds_lane[3] = 3;
+		break;
+	case CVMX_QLM_MODE_RGMII_10G_KR_1X1:
+		enable_training = 1;
+	case CVMX_QLM_MODE_RGMII_XFI_1X1:
+		if (qlm == 5) {
+			is_bgx = 3;
+			lmac_type[0] = 5;
+			lmac_type[1] = 3;
+			lmac_type[2] = -1;
+			lmac_type[3] = -1;
+			sds_lane[0] = 0;
+			sds_lane[1] = 1;
+		}
+		break;
+	case CVMX_QLM_MODE_RGMII_40G_KR4:
+		enable_training = 1;
+	case CVMX_QLM_MODE_RGMII_XLAUI:
+		is_bgx = 5;
+		lmac_type[0] = 5;
+		lmac_type[1] = 4;
+		lmac_type[2] = -1;
+		lmac_type[3] = -1;
+		sds_lane[0] = 0x0;
+		sds_lane[1] = 0xe4;
+		break;
+	case CVMX_QLM_MODE_RGMII_RXAUI:
+		is_bgx = 3;
+		lmac_type[0] = 5;
+		lmac_type[1] = 2;
+		lmac_type[2] = 2;
+		lmac_type[3] = -1;
+		sds_lane[0] = 0x0;
+		sds_lane[1] = 0x4;
+		sds_lane[2] = 0xe;
+		break;
+	case CVMX_QLM_MODE_RGMII_XAUI:
+		is_bgx = 5;
+		lmac_type[0] = 5;
+		lmac_type[1] = 1;
+		lmac_type[2] = -1;
+		lmac_type[3] = -1;
+		sds_lane[0] = 0;
+		sds_lane[1] = 0xe4;
+		break;
+	default:
+		break;
+	}
+
+	if (is_pcie == 0)
+		lane_mode = __get_lane_mode_for_speed_and_ref_clk(ref_clk_sel, baud_mhz, &alt_pll);
+	debug("%s: %d lane mode: %d, alternate PLL: %s\n", __func__, mode, lane_mode,
+	      alt_pll ? "true" : "false");
+	if (lane_mode == -1)
+		return -1;
+
+	if (alt_pll) {
+		debug("%s: alternate PLL settings used for qlm %d, lane mode %d, reference clock %d\n",
+		      __func__, qlm, lane_mode, ref_clk_sel);
+		if (__set_qlm_ref_clk_cn78xx(0, qlm, lane_mode, ref_clk_sel)) {
+			printf("%s: Error: reference clock %d is not supported for qlm %d, lane mode: 0x%x\n",
+			       __func__, ref_clk_sel, qlm, lane_mode);
+			return -1;
+		}
+	}
+
+	/* Power up PHY, but keep it in reset */
+	phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_pd = 0;
+	phy_ctl.s.phy_reset = 1;
+	csr_wr(CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+
+	/* Set GSER for the interface mode */
+	cfg.u64 = csr_rd(CVMX_GSERX_CFG(qlm));
+	cfg.s.bgx = is_bgx & 1;
+	cfg.s.bgx_quad = (is_bgx >> 2) & 1;
+	cfg.s.bgx_dual = (is_bgx >> 1) & 1;
+	cfg.s.pcie = is_pcie;
+	csr_wr(CVMX_GSERX_CFG(qlm), cfg.u64);
+
+	/* Lane mode */
+	lmode.u64 = csr_rd(CVMX_GSERX_LANE_MODE(qlm));
+	lmode.s.lmode = lane_mode;
+	csr_wr(CVMX_GSERX_LANE_MODE(qlm), lmode.u64);
+
+	/* Program lmac_type to figure out the type of BGX interface configured */
+	if (is_bgx) {
+		int bgx = (qlm < 4) ? qlm - 2 : 2;
+		cvmx_bgxx_cmrx_config_t cmr_config;
+		cvmx_bgxx_cmr_rx_lmacs_t rx_lmacs;
+		cvmx_bgxx_spux_br_pmd_control_t spu_pmd_control;
+		int index, total_lmacs = 0;
+
+		for (index = 0; index < 4; index++) {
+			cmr_config.u64 = csr_rd(CVMX_BGXX_CMRX_CONFIG(index, bgx));
+			cmr_config.s.enable = 0;
+			cmr_config.s.data_pkt_rx_en = 0;
+			cmr_config.s.data_pkt_tx_en = 0;
+			if (lmac_type[index] != -1) {
+				cmr_config.s.lmac_type = lmac_type[index];
+				cmr_config.s.lane_to_sds = sds_lane[index];
+				total_lmacs++;
+				/* RXAUI takes up 2 lmacs */
+				if (lmac_type[index] == 2)
+					total_lmacs += 1;
+			}
+			csr_wr(CVMX_BGXX_CMRX_CONFIG(index, bgx), cmr_config.u64);
+
+			/* Errata (TBD) RGMII doesn't turn on clock if its by
+			 * itself. Force them on
+			 */
+			if (lmac_type[index] == 5) {
+				cvmx_bgxx_cmr_global_config_t global_config;
+
+				global_config.u64 = csr_rd(CVMX_BGXX_CMR_GLOBAL_CONFIG(bgx));
+				global_config.s.bgx_clk_enable = 1;
+				csr_wr(CVMX_BGXX_CMR_GLOBAL_CONFIG(bgx), global_config.u64);
+			}
+
+			/* Enable training for 10G_KR/40G_KR4 modes */
+			if (enable_training == 1 &&
+			    (lmac_type[index] == 3 || lmac_type[index] == 4)) {
+				spu_pmd_control.u64 =
+					csr_rd(CVMX_BGXX_SPUX_BR_PMD_CONTROL(index, bgx));
+				spu_pmd_control.s.train_en = 1;
+				csr_wr(CVMX_BGXX_SPUX_BR_PMD_CONTROL(index, bgx),
+				       spu_pmd_control.u64);
+			}
+		}
+
+		/* Update the total number of lmacs */
+		rx_lmacs.u64 = csr_rd(CVMX_BGXX_CMR_RX_LMACS(bgx));
+		rx_lmacs.s.lmacs = total_lmacs + additional_lmacs;
+		csr_wr(CVMX_BGXX_CMR_RX_LMACS(bgx), rx_lmacs.u64);
+		csr_wr(CVMX_BGXX_CMR_TX_LMACS(bgx), rx_lmacs.u64);
+	}
+
+	/* Bring phy out of reset */
+	phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_reset = 0;
+	csr_wr(CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+
+	/*
+	 * Wait 1us until the management interface is ready to accept
+	 * read/write commands.
+	 */
+	udelay(1);
+
+	/* Wait for reset to complete and the PLL to lock */
+	/* PCIe mode doesn't become ready until the PEM block attempts to bring
+	 * the interface up. Skip this check for PCIe
+	 */
+	if (!is_pcie && CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_QLM_STAT(qlm),
+					      cvmx_gserx_qlm_stat_t,
+					      rst_rdy, ==, 1, 10000)) {
+		printf("QLM%d: Timeout waiting for GSERX_QLM_STAT[rst_rdy]\n", qlm);
+		return -1;
+	}
+
+	/* Configure the gser pll */
+	if (!is_pcie)
+		__qlm_setup_pll_cn78xx(0, qlm);
+
+	/* Wait for reset to complete and the PLL to lock */
+	if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_PLL_STAT(qlm), cvmx_gserx_pll_stat_t,
+				  pll_lock, ==, 1, 10000)) {
+		printf("QLM%d: Timeout waiting for GSERX_PLL_STAT[pll_lock]\n", qlm);
+		return -1;
+	}
+
+	/* Errata GSER-26150: 10G PHY PLL Temperature Failure */
+	/* This workaround must be completed after the final deassertion of
+	 * GSERx_PHY_CTL[PHY_RESET].
+	 * Apply the workaround to 10.3125Gbps and 8Gbps only.
+	 */
+	if (OCTEON_IS_MODEL(OCTEON_CN73XX_PASS1_0) &&
+	    (baud_mhz == 103125 || (is_pcie && gen3 == 2)))
+		__qlm_errata_gser_26150(0, qlm, is_pcie);
+
+	/* Errata GSER-26636: 10G-KR/40G-KR - Inverted Tx Coefficient Direction
+	 * Change. Applied to all 10G standards (required for KR) but also
+	 * applied to other standards in case software training is used
+	 */
+	if (baud_mhz == 103125)
+		__qlm_kr_inc_dec_gser26636(0, qlm);
+
+	/* Errata GSER-25992: RX EQ Default Settings Update (CTLE Bias) */
+	/* This workaround will only be applied to Pass 1.x */
+	/* It will also only be applied if the SERDES data-rate is 10G */
+	/* or if PCIe Gen3 (gen3=2 is PCIe Gen3) */
+	if (baud_mhz == 103125 || (is_pcie && gen3 == 2))
+		cvmx_qlm_gser_errata_25992(0, qlm);
+
+	/* Errata GSER-27140: Updating the RX EQ settings due to temperature
+	 * drift sensitivities
+	 */
+	/* This workaround will also only be applied if the SERDES data-rate is 10G */
+	if (baud_mhz == 103125)
+		__qlm_rx_eq_temp_gser27140(0, qlm);
+
+	/* Reduce the voltage amplitude coming from Marvell PHY and also change
+	 * DFE threshold settings for RXAUI interface
+	 */
+	if (is_bgx) {
+		int l;
+
+		for (l = 0; l < 4; l++) {
+			cvmx_gserx_lanex_rx_cfg_4_t cfg4;
+			cvmx_gserx_lanex_tx_cfg_0_t cfg0;
+
+			if (lmac_type[l] == 2) {
+				/* Change the Q/QB error sampler 0 threshold from 0xD to 0xF */
+				cfg4.u64 = csr_rd(CVMX_GSERX_LANEX_RX_CFG_4(l, qlm));
+				cfg4.s.cfg_rx_errdet_ctrl = 0xcf6f;
+				csr_wr(CVMX_GSERX_LANEX_RX_CFG_4(l, qlm), cfg4.u64);
+				/* Reduce the voltage swing to roughly 460mV */
+				cfg0.u64 = csr_rd(CVMX_GSERX_LANEX_TX_CFG_0(l, qlm));
+				cfg0.s.cfg_tx_swing = 0x12;
+				csr_wr(CVMX_GSERX_LANEX_TX_CFG_0(l, qlm), cfg0.u64);
+			}
+		}
+	}
+
+	return 0;
+}
+
+static int __rmac_pll_config(int baud_mhz, int qlm, int mode)
+{
+	cvmx_gserx_pll_px_mode_0_t pmode0;
+	cvmx_gserx_pll_px_mode_1_t pmode1;
+	cvmx_gserx_lane_px_mode_0_t lmode0;
+	cvmx_gserx_lane_px_mode_1_t lmode1;
+	cvmx_gserx_lane_mode_t lmode;
+
+	switch (baud_mhz) {
+	case 98304:
+		pmode0.u64 = 0x1a0a;
+		pmode1.u64 = 0x3228;
+		lmode0.u64 = 0x600f;
+		lmode1.u64 = 0xa80f;
+		break;
+	case 49152:
+		if (mode == CVMX_QLM_MODE_SDL) {
+			pmode0.u64 = 0x3605;
+			pmode1.u64 = 0x0814;
+			lmode0.u64 = 0x000f;
+			lmode1.u64 = 0x6814;
+		} else {
+			pmode0.u64 = 0x1a0a;
+			pmode1.u64 = 0x3228;
+			lmode0.u64 = 0x650f;
+			lmode1.u64 = 0xe80f;
+		}
+		break;
+	case 24576:
+		pmode0.u64 = 0x1a0a;
+		pmode1.u64 = 0x3228;
+		lmode0.u64 = 0x6a0f;
+		lmode1.u64 = 0xe80f;
+		break;
+	case 12288:
+		pmode0.u64 = 0x1a0a;
+		pmode1.u64 = 0x3228;
+		lmode0.u64 = 0x6f0f;
+		lmode1.u64 = 0xe80f;
+		break;
+	case 6144:
+		pmode0.u64 = 0x160a;
+		pmode1.u64 = 0x1019;
+		lmode0.u64 = 0x000f;
+		lmode1.u64 = 0x2814;
+		break;
+	case 3072:
+		pmode0.u64 = 0x160a;
+		pmode1.u64 = 0x1019;
+		lmode0.u64 = 0x050f;
+		lmode1.u64 = 0x6814;
+		break;
+	default:
+		printf("Invalid speed for CPRI/SDL configuration\n");
+		return -1;
+	}
+
+	lmode.u64 = csr_rd(CVMX_GSERX_LANE_MODE(qlm));
+	csr_wr(CVMX_GSERX_PLL_PX_MODE_0(lmode.s.lmode, qlm), pmode0.u64);
+	csr_wr(CVMX_GSERX_PLL_PX_MODE_1(lmode.s.lmode, qlm), pmode1.u64);
+	csr_wr(CVMX_GSERX_LANE_PX_MODE_0(lmode.s.lmode, qlm), lmode0.u64);
+	csr_wr(CVMX_GSERX_LANE_PX_MODE_1(lmode.s.lmode, qlm), lmode1.u64);
+	return 0;
+}
+
+/**
+ * Configure QLM/DLM speed and mode for cnf75xx.
+ *
+ * @param qlm     The QLM to configure
+ * @param baud_mhz   The speed the QLM needs to be configured in Mhz.
+ * @param mode    The QLM to be configured as SGMII/XAUI/PCIe.
+ * @param rc      Only used for PCIe, rc = 1 for root complex mode, 0 for EP mode.
+ * @param gen3    Only used for PCIe
+ *			gen3 = 2 GEN3 mode
+ *			gen3 = 1 GEN2 mode
+ *			gen3 = 0 GEN1 mode
+ *
+ * @param ref_clk_sel    The reference-clock selection to use to configure QLM
+ *			 0 = REF_100MHZ
+ *			 1 = REF_125MHZ
+ *			 2 = REF_156MHZ
+ *			 3 = REF_122MHZ
+ * @param ref_clk_input  The reference-clock input to use to configure QLM
+ *
+ * @return       Return 0 on success or -1.
+ */
+static int octeon_configure_qlm_cnf75xx(int qlm, int baud_mhz, int mode, int rc, int gen3,
+					int ref_clk_sel, int ref_clk_input)
+{
+	cvmx_gserx_phy_ctl_t phy_ctl;
+	cvmx_gserx_lane_mode_t lmode;
+	cvmx_gserx_cfg_t cfg;
+	cvmx_gserx_refclk_sel_t refclk_sel;
+	int is_pcie = 0;
+	int is_bgx = 0;
+	int is_srio = 0;
+	int is_rmac = 0;
+	int is_rmac_pipe = 0;
+	int lane_mode = 0;
+	short lmac_type[4] = { 0 };
+	short sds_lane[4] = { 0 };
+	bool alt_pll = false;
+	int enable_training = 0;
+	int additional_lmacs = 0;
+	int port = (qlm == 3) ? 1 : 0;
+	cvmx_sriox_status_reg_t status_reg;
+
+	debug("%s(qlm: %d, baud_mhz: %d, mode: %d, rc: %d, gen3: %d, ref_clk_sel: %d, ref_clk_input: %d\n",
+	      __func__, qlm, baud_mhz, mode, rc, gen3, ref_clk_sel, ref_clk_input);
+	if (qlm > 8) {
+		printf("Invalid qlm%d passed\n", qlm);
+		return -1;
+	}
+
+	/* Errata PEM-31375 PEM RSL accesses to PCLK registers can timeout
+	 *  during speed change. Change SLI_WINDOW_CTL[time] to 525us
+	 */
+	__set_sli_window_ctl_errata_31375(0);
+
+	cfg.u64 = csr_rd(CVMX_GSERX_CFG(qlm));
+
+	/* If PEM is in EP, no need to do anything */
+	if (cfg.s.pcie && rc == 0) {
+		debug("%s: qlm %d is in PCIe endpoint mode, returning\n", __func__, qlm);
+		return 0;
+	}
+
+	if (cfg.s.srio && rc == 0) {
+		debug("%s: qlm %d is in SRIO endpoint mode, returning\n", __func__, qlm);
+		return 0;
+	}
+
+	/* Set the reference clock to use */
+	refclk_sel.u64 = 0;
+	if (ref_clk_input == 0) { /* External ref clock */
+		refclk_sel.s.com_clk_sel = 0;
+		refclk_sel.s.use_com1 = 0;
+	} else if (ref_clk_input == 1) {
+		refclk_sel.s.com_clk_sel = 1;
+		refclk_sel.s.use_com1 = 0;
+	} else {
+		refclk_sel.s.com_clk_sel = 1;
+		refclk_sel.s.use_com1 = 1;
+	}
+
+	csr_wr(CVMX_GSERX_REFCLK_SEL(qlm), refclk_sel.u64);
+
+	/* Reset the QLM after changing the reference clock */
+	phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_reset = 1;
+	phy_ctl.s.phy_pd = 1;
+	csr_wr(CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+
+	udelay(1000);
+
+	switch (mode) {
+	case CVMX_QLM_MODE_PCIE:
+	case CVMX_QLM_MODE_PCIE_1X2:
+	case CVMX_QLM_MODE_PCIE_2X1: {
+		cvmx_pemx_cfg_t pemx_cfg;
+		cvmx_pemx_on_t pemx_on;
+		cvmx_rst_soft_prstx_t rst_prst;
+
+		is_pcie = 1;
+
+		if (qlm > 1) {
+			printf("Invalid PCIe mode for QLM%d\n", qlm);
+			return -1;
+		}
+
+		if (ref_clk_sel == 0) {
+			refclk_sel.u64 = csr_rd(CVMX_GSERX_REFCLK_SEL(qlm));
+			refclk_sel.s.pcie_refclk125 = 0;
+			csr_wr(CVMX_GSERX_REFCLK_SEL(qlm), refclk_sel.u64);
+			if (gen3 == 0) /* Gen1 mode */
+				lane_mode = R_2_5G_REFCLK100;
+			else if (gen3 == 1) /* Gen2 mode */
+				lane_mode = R_5G_REFCLK100;
+			else
+				lane_mode = R_8G_REFCLK100;
+		} else if (ref_clk_sel == 1) {
+			refclk_sel.u64 = csr_rd(CVMX_GSERX_REFCLK_SEL(qlm));
+			refclk_sel.s.pcie_refclk125 = 1;
+			csr_wr(CVMX_GSERX_REFCLK_SEL(qlm), refclk_sel.u64);
+			if (gen3 == 0) /* Gen1 mode */
+				lane_mode = R_2_5G_REFCLK125;
+			else if (gen3 == 1) /* Gen2 mode */
+				lane_mode = R_5G_REFCLK125;
+			else
+				lane_mode = R_8G_REFCLK125;
+		} else {
+			printf("Invalid reference clock for PCIe on QLM%d\n", qlm);
+			return -1;
+		}
+
+		switch (qlm) {
+		case 0: /* Either x4 or x2 based on PEM0 */
+			rst_prst.u64 = csr_rd(CVMX_RST_SOFT_PRSTX(0));
+			rst_prst.s.soft_prst = rc;
+			csr_wr(CVMX_RST_SOFT_PRSTX(0), rst_prst.u64);
+			__setup_pem_reset(0, 0, !rc);
+
+			pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(0));
+			pemx_cfg.cnf75xx.hostmd = rc;
+			pemx_cfg.cnf75xx.lanes8 = (mode == CVMX_QLM_MODE_PCIE);
+			pemx_cfg.cnf75xx.md = gen3;
+			csr_wr(CVMX_PEMX_CFG(0), pemx_cfg.u64);
+			/* x4 mode waits for QLM1 setup before turning on the PEM */
+			if (mode == CVMX_QLM_MODE_PCIE_1X2 || mode == CVMX_QLM_MODE_PCIE_2X1) {
+				pemx_on.u64 = csr_rd(CVMX_PEMX_ON(0));
+				pemx_on.s.pemon = 1;
+				csr_wr(CVMX_PEMX_ON(0), pemx_on.u64);
+			}
+			break;
+		case 1: /* Either PEM0 x4 or PEM1 x2 */
+			if (mode == CVMX_QLM_MODE_PCIE_1X2 || mode == CVMX_QLM_MODE_PCIE_2X1) {
+				rst_prst.u64 = csr_rd(CVMX_RST_SOFT_PRSTX(1));
+				rst_prst.s.soft_prst = rc;
+				csr_wr(CVMX_RST_SOFT_PRSTX(1), rst_prst.u64);
+				__setup_pem_reset(0, 1, !rc);
+
+				pemx_cfg.u64 = csr_rd(CVMX_PEMX_CFG(1));
+				pemx_cfg.cnf75xx.hostmd = rc;
+				pemx_cfg.cnf75xx.md = gen3;
+				csr_wr(CVMX_PEMX_CFG(1), pemx_cfg.u64);
+
+				pemx_on.u64 = csr_rd(CVMX_PEMX_ON(1));
+				pemx_on.s.pemon = 1;
+				csr_wr(CVMX_PEMX_ON(1), pemx_on.u64);
+			} else {
+				pemx_on.u64 = csr_rd(CVMX_PEMX_ON(0));
+				pemx_on.s.pemon = 1;
+				csr_wr(CVMX_PEMX_ON(0), pemx_on.u64);
+			}
+			break;
+		default:
+			break;
+		}
+		break;
+	}
+	case CVMX_QLM_MODE_SRIO_1X4:
+	case CVMX_QLM_MODE_SRIO_2X2:
+	case CVMX_QLM_MODE_SRIO_4X1: {
+		int spd = 0xf;
+
+		if (cvmx_fuse_read(1601)) {
+			debug("SRIO is not supported on cnf73xx model\n");
+			return -1;
+		}
+
+		switch (baud_mhz) {
+		case 1250:
+			switch (ref_clk_sel) {
+			case 0: /* 100 MHz ref clock */
+				spd = 0x3;
+				break;
+			case 1: /* 125 MHz ref clock */
+				spd = 0xa;
+				break;
+			case 2: /* 156.25 MHz ref clock */
+				spd = 0x4;
+				break;
+			default:
+				spd = 0xf; /* Disabled */
+				break;
+			}
+			break;
+		case 2500:
+			switch (ref_clk_sel) {
+			case 0: /* 100 MHz ref clock */
+				spd = 0x2;
+				break;
+			case 1: /* 125 MHz ref clock */
+				spd = 0x9;
+				break;
+			case 2: /* 156.25 MHz ref clock */
+				spd = 0x7;
+				break;
+			default:
+				spd = 0xf; /* Disabled */
+				break;
+			}
+			break;
+		case 3125:
+			switch (ref_clk_sel) {
+			case 1: /* 125 MHz ref clock */
+				spd = 0x8;
+				break;
+			case 2: /* 156.25 MHz ref clock */
+				spd = 0xe;
+				break;
+			default:
+				spd = 0xf; /* Disabled */
+				break;
+			}
+			break;
+		case 5000:
+			switch (ref_clk_sel) {
+			case 0: /* 100 MHz ref clock */
+				spd = 0x0;
+				break;
+			case 1: /* 125 MHz ref clock */
+				spd = 0x6;
+				break;
+			case 2: /* 156.25 MHz ref clock */
+				spd = 0xb;
+				break;
+			default:
+				spd = 0xf; /* Disabled */
+				break;
+			}
+			break;
+		default:
+			spd = 0xf;
+			break;
+		}
+
+		if (spd == 0xf) {
+			printf("ERROR: Invalid SRIO speed (%d) configured for QLM%d\n", baud_mhz,
+			       qlm);
+			return -1;
+		}
+
+		status_reg.u64 = csr_rd(CVMX_SRIOX_STATUS_REG(port));
+		status_reg.s.spd = spd;
+		csr_wr(CVMX_SRIOX_STATUS_REG(port), status_reg.u64);
+		is_srio = 1;
+		break;
+	}
+
+	case CVMX_QLM_MODE_SGMII_2X1:
+		if (qlm == 4) {
+			is_bgx = 1;
+			lmac_type[0] = 0;
+			lmac_type[1] = 0;
+			lmac_type[2] = -1;
+			lmac_type[3] = -1;
+			sds_lane[0] = 0;
+			sds_lane[1] = 1;
+		} else if (qlm == 5) {
+			is_bgx = 1;
+			lmac_type[0] = -1;
+			lmac_type[1] = -1;
+			lmac_type[2] = 0;
+			lmac_type[3] = 0;
+			sds_lane[2] = 2;
+			sds_lane[3] = 3;
+			additional_lmacs = 2;
+		}
+		break;
+	case CVMX_QLM_MODE_10G_KR_1X2:
+		enable_training = 1;
+	case CVMX_QLM_MODE_XFI_1X2:
+		if (qlm == 5) {
+			is_bgx = 1;
+			lmac_type[0] = -1;
+			lmac_type[1] = -1;
+			lmac_type[2] = 3;
+			lmac_type[3] = 3;
+			sds_lane[2] = 2;
+			sds_lane[3] = 3;
+			additional_lmacs = 2;
+		}
+		break;
+	case CVMX_QLM_MODE_CPRI: /* CPRI / JESD204B */
+		is_rmac = 1;
+		break;
+	case CVMX_QLM_MODE_SDL: /* Serdes Lite (SDL) */
+		is_rmac = 1;
+		is_rmac_pipe = 1;
+		lane_mode = 1;
+		break;
+	default:
+		break;
+	}
+
+	if (is_rmac_pipe == 0 && is_pcie == 0) {
+		lane_mode = __get_lane_mode_for_speed_and_ref_clk(ref_clk_sel, baud_mhz,
+								  &alt_pll);
+	}
+
+	debug("%s: %d lane mode: %d, alternate PLL: %s\n", __func__, mode, lane_mode,
+	      alt_pll ? "true" : "false");
+	if (lane_mode == -1)
+		return -1;
+
+	if (alt_pll) {
+		debug("%s: alternate PLL settings used for qlm %d, lane mode %d, reference clock %d\n",
+		      __func__, qlm, lane_mode, ref_clk_sel);
+		if (__set_qlm_ref_clk_cn78xx(0, qlm, lane_mode, ref_clk_sel)) {
+			printf("%s: Error: reference clock %d is not supported for qlm %d\n",
+			       __func__, ref_clk_sel, qlm);
+			return -1;
+		}
+	}
+
+	/* Power up PHY, but keep it in reset */
+	phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_pd = 0;
+	phy_ctl.s.phy_reset = 1;
+	csr_wr(CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+
+	/* Set GSER for the interface mode */
+	cfg.u64 = csr_rd(CVMX_GSERX_CFG(qlm));
+	cfg.s.bgx = is_bgx & 1;
+	cfg.s.bgx_quad = (is_bgx >> 2) & 1;
+	cfg.s.bgx_dual = (is_bgx >> 1) & 1;
+	cfg.s.pcie = is_pcie;
+	cfg.s.srio = is_srio;
+	cfg.s.rmac = is_rmac;
+	cfg.s.rmac_pipe = is_rmac_pipe;
+	csr_wr(CVMX_GSERX_CFG(qlm), cfg.u64);
+
+	/* Lane mode */
+	lmode.u64 = csr_rd(CVMX_GSERX_LANE_MODE(qlm));
+	lmode.s.lmode = lane_mode;
+	csr_wr(CVMX_GSERX_LANE_MODE(qlm), lmode.u64);
+
+	/* Because of the Errata where quad mode does not work, program
+	 * lmac_type to figure out the type of BGX interface configured
+	 */
+	if (is_bgx) {
+		int bgx = 0;
+		cvmx_bgxx_cmrx_config_t cmr_config;
+		cvmx_bgxx_cmr_rx_lmacs_t rx_lmacs;
+		cvmx_bgxx_spux_br_pmd_control_t spu_pmd_control;
+		int index, total_lmacs = 0;
+
+		for (index = 0; index < 4; index++) {
+			cmr_config.u64 = csr_rd(CVMX_BGXX_CMRX_CONFIG(index, bgx));
+			cmr_config.s.enable = 0;
+			cmr_config.s.data_pkt_rx_en = 0;
+			cmr_config.s.data_pkt_tx_en = 0;
+			if (lmac_type[index] != -1) {
+				cmr_config.s.lmac_type = lmac_type[index];
+				cmr_config.s.lane_to_sds = sds_lane[index];
+				total_lmacs++;
+			}
+			csr_wr(CVMX_BGXX_CMRX_CONFIG(index, bgx), cmr_config.u64);
+
+			/* Enable training for 10G_KR/40G_KR4 modes */
+			if (enable_training == 1 &&
+			    (lmac_type[index] == 3 || lmac_type[index] == 4)) {
+				spu_pmd_control.u64 =
+					csr_rd(CVMX_BGXX_SPUX_BR_PMD_CONTROL(index, bgx));
+				spu_pmd_control.s.train_en = 1;
+				csr_wr(CVMX_BGXX_SPUX_BR_PMD_CONTROL(index, bgx),
+				       spu_pmd_control.u64);
+			}
+		}
+
+		/* Update the total number of lmacs */
+		rx_lmacs.u64 = csr_rd(CVMX_BGXX_CMR_RX_LMACS(bgx));
+		rx_lmacs.s.lmacs = total_lmacs + additional_lmacs;
+		csr_wr(CVMX_BGXX_CMR_RX_LMACS(bgx), rx_lmacs.u64);
+		csr_wr(CVMX_BGXX_CMR_TX_LMACS(bgx), rx_lmacs.u64);
+	}
+
+	/* Bring phy out of reset */
+	phy_ctl.u64 = csr_rd(CVMX_GSERX_PHY_CTL(qlm));
+	phy_ctl.s.phy_reset = 0;
+	csr_wr(CVMX_GSERX_PHY_CTL(qlm), phy_ctl.u64);
+
+	/*
+	 * Wait 1us until the management interface is ready to accept
+	 * read/write commands.
+	 */
+	udelay(1);
+
+	if (is_srio) {
+		status_reg.u64 = csr_rd(CVMX_SRIOX_STATUS_REG(port));
+		status_reg.s.srio = 1;
+		csr_wr(CVMX_SRIOX_STATUS_REG(port), status_reg.u64);
+		return 0;
+	}
+
+	/* Wait for reset to complete and the PLL to lock */
+	/* PCIe mode doesn't become ready until the PEM block attempts to bring
+	 * the interface up. Skip this check for PCIe
+	 */
+	if (!is_pcie && CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_QLM_STAT(qlm), cvmx_gserx_qlm_stat_t,
+					      rst_rdy, ==, 1, 10000)) {
+		printf("QLM%d: Timeout waiting for GSERX_QLM_STAT[rst_rdy]\n", qlm);
+		return -1;
+	}
+
+	/* Configure the gser pll */
+	if (is_rmac)
+		__rmac_pll_config(baud_mhz, qlm, mode);
+	else if (!(is_pcie || is_srio))
+		__qlm_setup_pll_cn78xx(0, qlm);
+
+	/* Wait for reset to complete and the PLL to lock */
+	if (CVMX_WAIT_FOR_FIELD64(CVMX_GSERX_PLL_STAT(qlm), cvmx_gserx_pll_stat_t,
+				  pll_lock, ==, 1, 10000)) {
+		printf("QLM%d: Timeout waiting for GSERX_PLL_STAT[pll_lock]\n", qlm);
+		return -1;
+	}
+
+	/* Errata GSER-27140: Updating the RX EQ settings due to temperature
+	 * drift sensitivities
+	 */
+	/* This workaround will also only be applied if the SERDES data-rate is 10G */
+	if (baud_mhz == 103125)
+		__qlm_rx_eq_temp_gser27140(0, qlm);
+
+	return 0;
+}
+
+/**
+ * Configure qlm/dlm speed and mode.
+ * @param qlm     The QLM or DLM to configure
+ * @param speed   The speed the QLM needs to be configured in Mhz.
+ * @param mode    The QLM to be configured as SGMII/XAUI/PCIe.
+ * @param rc      Only used for PCIe, rc = 1 for root complex mode, 0 for EP
+ *		  mode.
+ * @param pcie_mode Only used when qlm/dlm are in pcie mode.
+ * @param ref_clk_sel Reference clock to use for 70XX where:
+ *			0: 100MHz
+ *			1: 125MHz
+ *			2: 156.25MHz
+ *			3: 122MHz (Used by RMAC)
+ * @param ref_clk_input	This selects which reference clock input to use.  For
+ *			cn70xx:
+ *				0: DLMC_REF_CLK0
+ *				1: DLMC_REF_CLK1
+ *				2: DLM0_REF_CLK
+ *			cn61xx: (not used)
+ *			cn78xx/cn76xx/cn73xx:
+ *				0: Internal clock (QLM[0-7]_REF_CLK)
+ *				1: QLMC_REF_CLK0
+ *				2: QLMC_REF_CLK1
+ *
+ * @return       Return 0 on success or -1.
+ */
+int octeon_configure_qlm(int qlm, int speed, int mode, int rc, int pcie_mode, int ref_clk_sel,
+			 int ref_clk_input)
+{
+	int node = 0; // ToDo: corrently only node 0 is supported
+
+	debug("%s(%d, %d, %d, %d, %d, %d, %d)\n", __func__, qlm, speed, mode, rc, pcie_mode,
+	      ref_clk_sel, ref_clk_input);
+	if (OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX))
+		return octeon_configure_qlm_cn61xx(qlm, speed, mode, rc, pcie_mode);
+	else if (OCTEON_IS_MODEL(OCTEON_CN70XX))
+		return octeon_configure_qlm_cn70xx(qlm, speed, mode, rc, pcie_mode, ref_clk_sel,
+						   ref_clk_input);
+	else if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return octeon_configure_qlm_cn78xx(node, qlm, speed, mode, rc, pcie_mode,
+						   ref_clk_sel, ref_clk_input);
+	else if (OCTEON_IS_MODEL(OCTEON_CN73XX))
+		return octeon_configure_qlm_cn73xx(qlm, speed, mode, rc, pcie_mode, ref_clk_sel,
+						   ref_clk_input);
+	else if (OCTEON_IS_MODEL(OCTEON_CNF75XX))
+		return octeon_configure_qlm_cnf75xx(qlm, speed, mode, rc, pcie_mode, ref_clk_sel,
+						    ref_clk_input);
+	else
+		return -1;
+}
+
+void octeon_init_qlm(int node)
+{
+	int qlm;
+	cvmx_gserx_phy_ctl_t phy_ctl;
+	cvmx_gserx_cfg_t cfg;
+	int baud_mhz;
+	int pem;
+
+	if (!OCTEON_IS_MODEL(OCTEON_CN78XX))
+		return;
+
+	for (qlm = 0; qlm < 8; qlm++) {
+		phy_ctl.u64 = csr_rd_node(node, CVMX_GSERX_PHY_CTL(qlm));
+		if (phy_ctl.s.phy_reset == 0) {
+			cfg.u64 = csr_rd_node(node, CVMX_GSERX_CFG(qlm));
+			if (cfg.s.pcie)
+				__cvmx_qlm_pcie_errata_cn78xx(node, qlm);
+			else
+				__qlm_init_errata_20844(node, qlm);
+
+			baud_mhz = cvmx_qlm_get_gbaud_mhz_node(node, qlm);
+			if (baud_mhz == 6250 || baud_mhz == 6316)
+				octeon_qlm_tune_v3(node, qlm, baud_mhz, 0xa, 0xa0, -1, -1);
+			else if (baud_mhz == 103125)
+				octeon_qlm_tune_v3(node, qlm, baud_mhz, 0xd, 0xd0, -1, -1);
+		}
+	}
+
+	/* Setup how each PEM drives the PERST lines */
+	for (pem = 0; pem < 4; pem++) {
+		cvmx_rst_ctlx_t rst_ctl;
+
+		rst_ctl.u64 = csr_rd_node(node, CVMX_RST_CTLX(pem));
+		__setup_pem_reset(node, pem, !rst_ctl.s.host_mode);
+	}
+}
diff --git a/board/Marvell/octeon_ebb7304/board.c b/board/Marvell/octeon_ebb7304/board.c
index 611b18f..9aac5f0 100644
--- a/board/Marvell/octeon_ebb7304/board.c
+++ b/board/Marvell/octeon_ebb7304/board.c
@@ -3,20 +3,32 @@
  * Copyright (C) 2020 Stefan Roese <sr@denx.de>
  */
 
-#include <common.h>
 #include <dm.h>
+#include <fdt_support.h>
 #include <ram.h>
+#include <asm/gpio.h>
 
 #include <mach/octeon_ddr.h>
+#include <mach/cvmx-qlm.h>
+#include <mach/octeon_qlm.h>
+#include <mach/octeon_fdt.h>
+#include <mach/cvmx-helper.h>
+#include <mach/cvmx-helper-cfg.h>
+#include <mach/cvmx-helper-util.h>
+#include <mach/cvmx-bgxx-defs.h>
 
 #include "board_ddr.h"
 
+#define MAX_MIX_ENV_VARS	4
+
 #define EBB7304_DEF_DRAM_FREQ	800
 
 static struct ddr_conf board_ddr_conf[] = {
-	 OCTEON_EBB7304_DDR_CONFIGURATION
+	OCTEON_EBB7304_DDR_CONFIGURATION
 };
 
+static int no_phy[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+
 struct ddr_conf *octeon_ddr_conf_table_get(int *count, int *def_ddr_freq)
 {
 	*count = ARRAY_SIZE(board_ddr_conf);
@@ -24,3 +36,719 @@
 
 	return board_ddr_conf;
 }
+
+/*
+ * parse_env_var:	Parse the environment variable ("bgx_for_mix%d") to
+ *			extract the lmac it is set to.
+ *
+ *  index:		Index of environment variable to parse.
+ *			environment variable.
+ *  env_bgx:		Updated with the bgx of the lmac in the environment
+ *			variable.
+ *  env_lmac:		Updated with the index of lmac in the environment
+ *			variable.
+ *
+ *  returns:		Zero on success, error otherwise.
+ */
+static int parse_env_var(int index, int *env_bgx, int *env_lmac)
+{
+	char env_var[20];
+	ulong xipd_port;
+
+	sprintf(env_var, "bgx_for_mix%d", index);
+	xipd_port = env_get_ulong(env_var, 0, 0xffff);
+	if (xipd_port != 0xffff) {
+		int xiface;
+		struct cvmx_xiface xi;
+		struct cvmx_xport xp;
+
+		/*
+		 * The environemt variable is set to the xipd port. Convert the
+		 * xipd port to numa node, bgx, and lmac.
+		 */
+		xiface = cvmx_helper_get_interface_num(xipd_port);
+		xi = cvmx_helper_xiface_to_node_interface(xiface);
+		xp = cvmx_helper_ipd_port_to_xport(xipd_port);
+		*env_bgx = xi.interface;
+		*env_lmac = cvmx_helper_get_interface_index_num(xp.port);
+		return 0;
+	}
+
+	return -1;
+}
+
+/*
+ * get_lmac_fdt_node:	Search the device tree for the node corresponding to
+ *			a given bgx lmac.
+ *
+ *  fdt:		Pointer to flat device tree
+ *  search_node:	Numa node of the lmac to search for.
+ *  search_bgx:		Bgx of the lmac to search for.
+ *  search_lmac:	Lmac index to search for.
+ *  compat:		Compatible string to search for.
+
+ *  returns:		The device tree node of the lmac if found,
+ *			or -1 otherwise.
+ */
+static int get_lmac_fdt_node(const void *fdt, int search_node, int search_bgx, int search_lmac,
+			     const char *compat)
+{
+	int node;
+	const fdt32_t *reg;
+	u64 addr;
+	int fdt_node = -1;
+	int fdt_bgx = -1;
+	int fdt_lmac = -1;
+	int len;
+	int parent;
+
+	/* Iterate through all bgx ports */
+	node = -1;
+	while ((node = fdt_node_offset_by_compatible((void *)fdt, node,
+						     compat)) >= 0) {
+		/* Get the node and bgx from the physical address */
+		parent = fdt_parent_offset(fdt, node);
+		reg = fdt_getprop(fdt, parent, "reg", &len);
+		if (parent < 0 || !reg)
+			continue;
+
+		addr = fdt_translate_address((void *)fdt, parent, reg);
+		fdt_node = (addr >> 36) & 0x7;
+		fdt_bgx = (addr >> 24) & 0xf;
+
+		/* Get the lmac index from the reg property */
+		reg = fdt_getprop(fdt, node, "reg", &len);
+		if (reg)
+			fdt_lmac = *reg;
+
+		/* Check for a match */
+		if (search_node == fdt_node && search_bgx == fdt_bgx &&
+		    search_lmac == fdt_lmac)
+			return node;
+	}
+
+	return -1;
+}
+
+/*
+ * get_mix_fdt_node:	Search the device tree for the node corresponding to
+ *			a given mix.
+ *
+ *  fdt:		Pointer to flat device tree
+ *  search_node:	Mix numa node to search for.
+ *  search_index:	Mix index to search for.
+ *
+ *  returns:		The device tree node of the lmac if found,
+ *			or -1 otherwise.
+ */
+static int get_mix_fdt_node(const void *fdt, int search_node, int search_index)
+{
+	int node;
+
+	/* Iterate through all the mix fdt nodes */
+	node = -1;
+	while ((node = fdt_node_offset_by_compatible((void *)fdt, node,
+						     "cavium,octeon-7890-mix")) >= 0) {
+		int parent;
+		int len;
+		const char *name;
+		int mix_numa_node;
+		const fdt32_t *reg;
+		int mix_index = -1;
+		u64 addr;
+
+		/* Get the numa node of the mix from the parent node name */
+		parent = fdt_parent_offset(fdt, node);
+		if (parent < 0 ||
+		    ((name = fdt_get_name(fdt, parent, &len)) == NULL) ||
+		    ((name = strchr(name, '@')) == NULL))
+			continue;
+
+		name++;
+		mix_numa_node = simple_strtol(name, NULL, 0) ? 1 : 0;
+
+		/* Get the mix index from the reg property */
+		reg = fdt_getprop(fdt, node, "reg", &len);
+		if (reg) {
+			addr = fdt_translate_address((void *)fdt, parent, reg);
+			mix_index = (addr >> 11) & 1;
+		}
+
+		/* Check for a match */
+		if (mix_numa_node == search_node && mix_index == search_index)
+			return node;
+	}
+
+	return -1;
+}
+
+/*
+ * fdt_fix_mix:		Fix the mix nodes in the device tree. Only the mix nodes
+ *			configured by the user will be preserved. All other mix
+ *			nodes will be trimmed.
+ *
+ *  fdt:		Pointer to flat device tree
+ *
+ *  returns:		Zero on success, error otherwise.
+ */
+static int fdt_fix_mix(const void *fdt)
+{
+	int node;
+	int next_node;
+	int len;
+	int i;
+
+	/* Parse all the mix port environment variables */
+	for (i = 0; i < MAX_MIX_ENV_VARS; i++) {
+		int env_node = 0;
+		int env_bgx = -1;
+		int env_lmac = -1;
+		int lmac_fdt_node = -1;
+		int mix_fdt_node = -1;
+		int lmac_phandle;
+		char *compat;
+
+		/* Get the lmac for this environment variable */
+		if (parse_env_var(i, &env_bgx, &env_lmac))
+			continue;
+
+		/* Get the fdt node for this lmac and add a phandle to it */
+		compat = "cavium,octeon-7890-bgx-port";
+		lmac_fdt_node = get_lmac_fdt_node(fdt, env_node, env_bgx,
+						  env_lmac, compat);
+		if (lmac_fdt_node < 0) {
+			/* Must check for the xcv compatible string too */
+			compat = "cavium,octeon-7360-xcv";
+			lmac_fdt_node = get_lmac_fdt_node(fdt, env_node,
+							  env_bgx, env_lmac,
+							  compat);
+			if (lmac_fdt_node < 0) {
+				printf("WARNING: Failed to get lmac fdt node for %d%d%d\n",
+				       env_node, env_bgx, env_lmac);
+				continue;
+			}
+		}
+
+		lmac_phandle = fdt_alloc_phandle((void *)fdt);
+		fdt_set_phandle((void *)fdt, lmac_fdt_node, lmac_phandle);
+
+		/* Get the fdt mix node corresponding to this lmac */
+		mix_fdt_node = get_mix_fdt_node(fdt, env_node, env_lmac);
+		if (mix_fdt_node < 0)
+			continue;
+
+		/* Point the mix to the lmac */
+		fdt_getprop(fdt, mix_fdt_node, "cavium,mac-handle", &len);
+		fdt_setprop_inplace((void *)fdt, mix_fdt_node,
+				    "cavium,mac-handle", &lmac_phandle, len);
+	}
+
+	/* Trim unused mix'es from the device tree */
+	for (node = fdt_next_node(fdt, -1, NULL); node >= 0; node = next_node) {
+		const char *compat;
+		const fdt32_t *reg;
+
+		next_node = fdt_next_node(fdt, node, NULL);
+
+		compat = fdt_getprop(fdt, node, "compatible", &len);
+		if (compat) {
+			if (strcmp(compat, "cavium,octeon-7890-mix"))
+				continue;
+
+			reg = fdt_getprop(fdt, node, "cavium,mac-handle", &len);
+			if (reg) {
+				if (*reg == 0xffff)
+					fdt_nop_node((void *)fdt, node);
+			}
+		}
+	}
+
+	return 0;
+}
+
+static void kill_fdt_phy(void *fdt, int offset, void *arg)
+{
+	int len, phy_offset;
+	const fdt32_t *php;
+	u32 phandle;
+
+	php = fdt_getprop(fdt, offset, "phy-handle", &len);
+	if (php && len == sizeof(*php)) {
+		phandle = fdt32_to_cpu(*php);
+		fdt_nop_property(fdt, offset, "phy-handle");
+		phy_offset = fdt_node_offset_by_phandle(fdt, phandle);
+		if (phy_offset > 0)
+			fdt_nop_node(fdt, phy_offset);
+	}
+}
+
+void __fixup_xcv(void)
+{
+	unsigned long bgx = env_get_ulong("bgx_for_rgmii", 10,
+					  (unsigned long)-1);
+	char fdt_key[16];
+	int i;
+
+	debug("%s: BGX %d\n", __func__, (int)bgx);
+
+	for (i = 0; i < 3; i++) {
+		snprintf(fdt_key, sizeof(fdt_key),
+			 bgx == i ? "%d,xcv" : "%d,not-xcv", i);
+		debug("%s: trimming bgx %lu with key %s\n",
+		      __func__, bgx, fdt_key);
+
+		octeon_fdt_patch_rename((void *)gd->fdt_blob, fdt_key,
+					"cavium,xcv-trim", true, NULL, NULL);
+	}
+}
+
+/* QLM0 - QLM6 */
+void __fixup_fdt(void)
+{
+	int qlm;
+	int speed = 0;
+
+	for (qlm = 0; qlm < 7; qlm++) {
+		enum cvmx_qlm_mode mode;
+		char fdt_key[16];
+		const char *type_str = "none";
+
+		mode = cvmx_qlm_get_mode(qlm);
+		switch (mode) {
+		case CVMX_QLM_MODE_SGMII:
+		case CVMX_QLM_MODE_RGMII_SGMII:
+		case CVMX_QLM_MODE_RGMII_SGMII_1X1:
+			type_str = "sgmii";
+			break;
+		case CVMX_QLM_MODE_XAUI:
+		case CVMX_QLM_MODE_RGMII_XAUI:
+			speed = (cvmx_qlm_get_gbaud_mhz(qlm) * 8 / 10) * 4;
+			if (speed == 10000)
+				type_str = "xaui";
+			else
+				type_str = "dxaui";
+			break;
+		case CVMX_QLM_MODE_RXAUI:
+		case CVMX_QLM_MODE_RGMII_RXAUI:
+			type_str = "rxaui";
+			break;
+		case CVMX_QLM_MODE_XLAUI:
+		case CVMX_QLM_MODE_RGMII_XLAUI:
+			type_str = "xlaui";
+			break;
+		case CVMX_QLM_MODE_XFI:
+		case CVMX_QLM_MODE_RGMII_XFI:
+		case CVMX_QLM_MODE_RGMII_XFI_1X1:
+			type_str = "xfi";
+			break;
+		case CVMX_QLM_MODE_10G_KR:
+		case CVMX_QLM_MODE_RGMII_10G_KR:
+			type_str = "10G_KR";
+			break;
+		case CVMX_QLM_MODE_40G_KR4:
+		case CVMX_QLM_MODE_RGMII_40G_KR4:
+			type_str = "40G_KR4";
+			break;
+		case CVMX_QLM_MODE_SATA_2X1:
+			type_str = "sata";
+			break;
+		case CVMX_QLM_MODE_SGMII_2X1:
+		case CVMX_QLM_MODE_XFI_1X2:
+		case CVMX_QLM_MODE_10G_KR_1X2:
+		case CVMX_QLM_MODE_RXAUI_1X2:
+		case CVMX_QLM_MODE_MIXED: // special for DLM5 & DLM6
+		{
+			cvmx_bgxx_cmrx_config_t cmr_config;
+			cvmx_bgxx_spux_br_pmd_control_t pmd_control;
+			int mux = cvmx_qlm_mux_interface(2);
+
+			if (mux == 2) { // only dlm6
+				cmr_config.u64 = csr_rd(CVMX_BGXX_CMRX_CONFIG(2, 2));
+				pmd_control.u64 =
+					csr_rd(CVMX_BGXX_SPUX_BR_PMD_CONTROL(2, 2));
+			} else {
+				if (qlm == 5) {
+					cmr_config.u64 =
+						csr_rd(CVMX_BGXX_CMRX_CONFIG(0, 2));
+					pmd_control.u64 =
+						csr_rd(CVMX_BGXX_SPUX_BR_PMD_CONTROL(0, 2));
+				} else {
+					cmr_config.u64 =
+						csr_rd(CVMX_BGXX_CMRX_CONFIG(2, 2));
+					pmd_control.u64 =
+						csr_rd(CVMX_BGXX_SPUX_BR_PMD_CONTROL(2, 2));
+				}
+			}
+			switch (cmr_config.s.lmac_type) {
+			case 0:
+				type_str = "sgmii";
+				break;
+			case 1:
+				type_str = "xaui";
+				break;
+			case 2:
+				type_str = "rxaui";
+				break;
+			case 3:
+				if (pmd_control.s.train_en)
+					type_str = "10G_KR";
+				else
+					type_str = "xfi";
+				break;
+			case 4:
+				if (pmd_control.s.train_en)
+					type_str = "40G_KR4";
+				else
+					type_str = "xlaui";
+				break;
+			default:
+				type_str = "none";
+				break;
+			}
+			break;
+		}
+		default:
+			type_str = "none";
+			break;
+		}
+		sprintf(fdt_key, "%d,%s", qlm, type_str);
+		debug("Patching qlm %d for %s for mode %d%s\n", qlm, fdt_key, mode,
+		      no_phy[qlm] ? ", removing PHY" : "");
+		octeon_fdt_patch_rename((void *)gd->fdt_blob, fdt_key, NULL, true,
+					no_phy[qlm] ? kill_fdt_phy : NULL, NULL);
+	}
+}
+
+int board_fix_fdt(void)
+{
+	__fixup_fdt();
+	__fixup_xcv();
+
+	/* Fix the mix ports */
+	fdt_fix_mix(gd->fdt_blob);
+
+	return 0;
+}
+
+/*
+ * Here is the description of the parameters that are passed to QLM
+ * configuration:
+ *
+ *	param0 : The QLM to configure
+ *	param1 : Speed to configure the QLM at
+ *	param2 : Mode the QLM to configure
+ *	param3 : 1 = RC, 0 = EP
+ *	param4 : 0 = GEN1, 1 = GEN2, 2 = GEN3
+ *	param5 : ref clock select, 0 = 100Mhz, 1 = 125MHz, 2 = 156MHz
+ *	param6 : ref clock input to use:
+ *		 0 - external reference (QLMx_REF_CLK)
+ *		 1 = common clock 0 (QLMC_REF_CLK0)
+ *		 2 = common_clock 1 (QLMC_REF_CLK1)
+ */
+static void board_configure_qlms(void)
+{
+	int speed[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+	int mode[8] = { -1, -1, -1, -1, -1, -1, -1, -1 };
+	int pcie_rc[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+	int pcie_gen[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+	int ref_clock_sel[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+	int ref_clock_input[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+	struct gpio_desc desc;
+	int rbgx, rqlm;
+	char env_var[16];
+	int qlm;
+	int ret;
+
+	/* RGMII PHY reset GPIO */
+	ret = dm_gpio_lookup_name("gpio-controllerA27", &desc);
+	if (ret)
+		debug("gpio ret=%d\n", ret);
+	ret = dm_gpio_request(&desc, "rgmii_phy_reset");
+	if (ret)
+		debug("gpio_request ret=%d\n", ret);
+	ret = dm_gpio_set_dir_flags(&desc, GPIOD_IS_OUT);
+	if (ret)
+		debug("gpio dir ret=%d\n", ret);
+
+	/* Put RGMII PHY in reset */
+	dm_gpio_set_value(&desc, 0);
+
+	octeon_init_qlm(0);
+
+	rbgx = env_get_ulong("bgx_for_rgmii", 10, (unsigned long)-1);
+	switch (rbgx) {
+	case 0:
+		rqlm = 2;
+		break;
+	case 1:
+		rqlm = 3;
+		break;
+	case 2:
+		rqlm = 5;
+		break;
+	default:
+		rqlm = -1;
+		break;
+	}
+
+	for (qlm = 0; qlm < 7; qlm++) {
+		const char *mode_str;
+		char spd_env[16];
+
+		mode[qlm] = CVMX_QLM_MODE_DISABLED;
+		sprintf(env_var, "qlm%d_mode", qlm);
+		mode_str = env_get(env_var);
+		if (!mode_str)
+			continue;
+
+		if (qlm == 4 && mode[4] != -1 &&
+		    mode[4] != CVMX_QLM_MODE_SATA_2X1) {
+			printf("Error: DLM 4 can only be configured for SATA\n");
+			continue;
+		}
+
+		if (strstr(mode_str, ",no_phy"))
+			no_phy[qlm] = 1;
+
+		if (!strncmp(mode_str, "sgmii", 5)) {
+			bool rgmii = false;
+
+			speed[qlm] = 1250;
+			if (rqlm == qlm && qlm < 5) {
+				mode[qlm] = CVMX_QLM_MODE_RGMII_SGMII;
+				rgmii = true;
+			} else if (qlm == 6 || qlm == 5) {
+				if (rqlm == qlm && qlm == 5) {
+					mode[qlm] = CVMX_QLM_MODE_RGMII_SGMII_1X1;
+					rgmii = true;
+				} else if (rqlm == 5 && qlm == 6 &&
+					   mode[5] != CVMX_QLM_MODE_RGMII_SGMII_1X1) {
+					mode[qlm] = CVMX_QLM_MODE_RGMII_SGMII_2X1;
+					rgmii = true;
+				} else {
+					mode[qlm] = CVMX_QLM_MODE_SGMII_2X1;
+				}
+			} else {
+				mode[qlm] = CVMX_QLM_MODE_SGMII;
+			}
+			ref_clock_sel[qlm] = 2;
+
+			if (qlm == 5 || qlm == 6)
+				ref_clock_input[qlm] = 2; // use QLMC_REF_CLK1
+
+			if (no_phy[qlm]) {
+				int i;
+				int start = 0, stop = 2;
+
+				rbgx = 0;
+				switch (qlm) {
+				case 3:
+					rbgx = 1;
+				case 2:
+					for (i = 0; i < 4; i++) {
+						printf("Ignoring PHY for interface: %d, port: %d\n",
+						       rbgx, i);
+						cvmx_helper_set_port_force_link_up(rbgx, i, true);
+					}
+					break;
+				case 6:
+					start = 2;
+					stop = 4;
+				case 5:
+					for (i = start; i < stop; i++) {
+						printf("Ignoring PHY for interface: %d, port: %d\n",
+						       2, i);
+						cvmx_helper_set_port_force_link_up(2, i, true);
+					}
+					break;
+				default:
+					printf("SGMII not supported for QLM/DLM %d\n",
+					       qlm);
+					break;
+				}
+			}
+			printf("QLM %d: SGMII%s\n",
+			       qlm, rgmii ? ", RGMII" : "");
+		} else if (!strncmp(mode_str, "xaui", 4)) {
+			speed[qlm] = 3125;
+			mode[qlm] = CVMX_QLM_MODE_XAUI;
+			ref_clock_sel[qlm] = 2;
+			if (qlm == 5 || qlm == 6)
+				ref_clock_input[qlm] = 2; // use QLMC_REF_CLK1
+			printf("QLM %d: XAUI\n", qlm);
+		} else if (!strncmp(mode_str, "dxaui", 5)) {
+			speed[qlm] = 6250;
+			mode[qlm] = CVMX_QLM_MODE_XAUI;
+			ref_clock_sel[qlm] = 2;
+			if (qlm == 5 || qlm == 6)
+				ref_clock_input[qlm] = 2; // use QLMC_REF_CLK1
+			printf("QLM %d: DXAUI\n", qlm);
+		} else if (!strncmp(mode_str, "rxaui", 5)) {
+			bool rgmii = false;
+
+			speed[qlm] = 6250;
+			if (qlm == 5 || qlm == 6) {
+				if (rqlm == qlm && qlm == 5) {
+					mode[qlm] = CVMX_QLM_MODE_RGMII_RXAUI;
+					rgmii = true;
+				} else {
+					mode[qlm] = CVMX_QLM_MODE_RXAUI_1X2;
+				}
+			} else {
+				mode[qlm] = CVMX_QLM_MODE_RXAUI;
+			}
+			ref_clock_sel[qlm] = 2;
+			if (qlm == 5 || qlm == 6)
+				ref_clock_input[qlm] = 2; // use QLMC_REF_CLK1
+			printf("QLM %d: RXAUI%s\n",
+			       qlm, rgmii ? ", rgmii" : "");
+		} else if (!strncmp(mode_str, "xlaui", 5)) {
+			speed[qlm] = 103125;
+			mode[qlm] = CVMX_QLM_MODE_XLAUI;
+			ref_clock_sel[qlm] = 2;
+			if (qlm == 5 || qlm == 6)
+				ref_clock_input[qlm] = 2; // use QLMC_REF_CLK1
+			sprintf(spd_env, "qlm%d_speed", qlm);
+			if (env_get(spd_env)) {
+				int spd = env_get_ulong(spd_env, 0, 8);
+
+				if (spd)
+					speed[qlm] = spd;
+				else
+					speed[qlm] = 103125;
+			}
+			printf("QLM %d: XLAUI\n", qlm);
+		} else if (!strncmp(mode_str, "xfi", 3)) {
+			bool rgmii = false;
+
+			speed[qlm] = 103125;
+			if (rqlm == qlm) {
+				mode[qlm] = CVMX_QLM_MODE_RGMII_XFI;
+				rgmii = true;
+			} else if (qlm == 5 || qlm == 6) {
+				mode[qlm] = CVMX_QLM_MODE_XFI_1X2;
+			} else {
+				mode[qlm] = CVMX_QLM_MODE_XFI;
+			}
+			ref_clock_sel[qlm] = 2;
+			if (qlm == 5 || qlm == 6)
+				ref_clock_input[qlm] = 2; // use QLMC_REF_CLK1
+			printf("QLM %d: XFI%s\n", qlm, rgmii ? ", RGMII" : "");
+		} else if (!strncmp(mode_str, "10G_KR", 6)) {
+			speed[qlm] = 103125;
+			if (rqlm == qlm && qlm == 5)
+				mode[qlm] = CVMX_QLM_MODE_RGMII_10G_KR;
+			else if (qlm == 5 || qlm == 6)
+				mode[qlm] = CVMX_QLM_MODE_10G_KR_1X2;
+			else
+				mode[qlm] = CVMX_QLM_MODE_10G_KR;
+			ref_clock_sel[qlm] = 2;
+			if (qlm == 5 || qlm == 6)
+				ref_clock_input[qlm] = 2; // use QLMC_REF_CLK1
+			printf("QLM %d: 10G_KR\n", qlm);
+		} else if (!strncmp(mode_str, "40G_KR4", 7)) {
+			speed[qlm] = 103125;
+			mode[qlm] = CVMX_QLM_MODE_40G_KR4;
+			ref_clock_sel[qlm] = 2;
+			if (qlm == 5 || qlm == 6)
+				ref_clock_input[qlm] = 2; // use QLMC_REF_CLK1
+			printf("QLM %d: 40G_KR4\n", qlm);
+		} else if (!strcmp(mode_str, "pcie")) {
+			char *pmode;
+			int lanes = 0;
+
+			sprintf(env_var, "pcie%d_mode", qlm);
+			pmode = env_get(env_var);
+			if (pmode && !strcmp(pmode, "ep"))
+				pcie_rc[qlm] = 0;
+			else
+				pcie_rc[qlm] = 1;
+			sprintf(env_var, "pcie%d_gen", qlm);
+			pcie_gen[qlm] = env_get_ulong(env_var, 0, 3);
+			sprintf(env_var, "pcie%d_lanes", qlm);
+			lanes = env_get_ulong(env_var, 0, 8);
+			if (lanes == 8) {
+				mode[qlm] = CVMX_QLM_MODE_PCIE_1X8;
+			} else if (qlm == 5 || qlm == 6) {
+				if (lanes != 2) {
+					printf("QLM%d: Invalid lanes selected, defaulting to 2 lanes\n",
+					       qlm);
+				}
+				mode[qlm] = CVMX_QLM_MODE_PCIE_1X2;
+				ref_clock_input[qlm] = 1; // use QLMC_REF_CLK0
+			} else {
+				mode[qlm] = CVMX_QLM_MODE_PCIE;
+			}
+			ref_clock_sel[qlm] = 0;
+			printf("QLM %d: PCIe gen%d %s, x%d lanes\n",
+			       qlm, pcie_gen[qlm] + 1,
+			       pcie_rc[qlm] ? "root complex" : "endpoint",
+			       lanes);
+		} else if (!strcmp(mode_str, "sata")) {
+			mode[qlm] = CVMX_QLM_MODE_SATA_2X1;
+			ref_clock_sel[qlm] = 0;
+			ref_clock_input[qlm] = 1;
+			sprintf(spd_env, "qlm%d_speed", qlm);
+			if (env_get(spd_env)) {
+				int spd = env_get_ulong(spd_env, 0, 8);
+
+				if (spd == 1500 || spd == 3000 || spd == 3000)
+					speed[qlm] = spd;
+				else
+					speed[qlm] = 6000;
+			} else {
+				speed[qlm] = 6000;
+			}
+		} else {
+			printf("QLM %d: disabled\n", qlm);
+		}
+	}
+
+	for (qlm = 0; qlm < 7; qlm++) {
+		int rc;
+
+		if (mode[qlm] == -1)
+			continue;
+
+		debug("Configuring qlm%d with speed(%d), mode(%d), RC(%d), Gen(%d), REF_CLK(%d), CLK_SOURCE(%d)\n",
+		      qlm, speed[qlm], mode[qlm], pcie_rc[qlm],
+		      pcie_gen[qlm] + 1,
+		      ref_clock_sel[qlm], ref_clock_input[qlm]);
+		rc = octeon_configure_qlm(qlm, speed[qlm], mode[qlm],
+					  pcie_rc[qlm], pcie_gen[qlm],
+					  ref_clock_sel[qlm],
+					  ref_clock_input[qlm]);
+
+		if (speed[qlm] == 6250) {
+			if (mode[qlm] == CVMX_QLM_MODE_RXAUI) {
+				octeon_qlm_tune_v3(0, qlm, speed[qlm], 0x12,
+						   0xa0, -1, -1);
+			} else {
+				octeon_qlm_tune_v3(0, qlm, speed[qlm], 0xa,
+						   0xa0, -1, -1);
+			}
+		} else if (speed[qlm] == 103125) {
+			octeon_qlm_tune_v3(0, qlm, speed[qlm], 0xd, 0xd0,
+					   -1, -1);
+		}
+
+		if (qlm == 4 && rc != 0)
+			/*
+			 * There is a bug with SATA with 73xx.  Until it's
+			 * fixed we need to strip it from the device tree.
+			 */
+			octeon_fdt_patch_rename((void *)gd->fdt_blob, "4,none",
+						NULL, true, NULL, NULL);
+	}
+
+	dm_gpio_set_value(&desc, 0); /* Put RGMII PHY in reset */
+	mdelay(10);
+	dm_gpio_set_value(&desc, 1); /* Take RGMII PHY out of reset */
+}
+
+int board_late_init(void)
+{
+	board_configure_qlms();
+
+	return 0;
+}
diff --git a/board/Marvell/octeon_nic23/Kconfig b/board/Marvell/octeon_nic23/Kconfig
new file mode 100644
index 0000000..3c42e8a
--- /dev/null
+++ b/board/Marvell/octeon_nic23/Kconfig
@@ -0,0 +1,19 @@
+if TARGET_OCTEON_NIC23
+
+config SYS_BOARD
+	string
+	default "octeon_nic23"
+
+config SYS_VENDOR
+	string
+	default "Marvell"
+
+config SYS_CONFIG_NAME
+	string
+	default "octeon_nic23"
+
+config DEFAULT_DEVICE_TREE
+	string
+	default "mrvl,octeon-nic23"
+
+endif
diff --git a/board/Marvell/octeon_nic23/MAINTAINERS b/board/Marvell/octeon_nic23/MAINTAINERS
new file mode 100644
index 0000000..cd5148d
--- /dev/null
+++ b/board/Marvell/octeon_nic23/MAINTAINERS
@@ -0,0 +1,7 @@
+OCTEON_NIC23 BOARD
+M:	Aaron Williams <awilliams@marvell.com>
+S:	Maintained
+F:	board/Marvell/octeon_nic23/*
+F:	configs/octeon_nic23_defconfig
+F:	include/configs/octeon_nic23.h
+F:	arch/mips/dts/mrvl,octeon-nic23.dts
diff --git a/board/Marvell/octeon_nic23/Makefile b/board/Marvell/octeon_nic23/Makefile
new file mode 100644
index 0000000..a79b94e
--- /dev/null
+++ b/board/Marvell/octeon_nic23/Makefile
@@ -0,0 +1,8 @@
+#
+# Copyright (C) 2021 Stefan Roese <sr@denx.de>
+# Copyright (C) 2019-2020 Marvell International Ltd.
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
+
+obj-y	:= board.o
diff --git a/board/Marvell/octeon_nic23/board.c b/board/Marvell/octeon_nic23/board.c
new file mode 100644
index 0000000..9f5eb2e
--- /dev/null
+++ b/board/Marvell/octeon_nic23/board.c
@@ -0,0 +1,106 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2021 Stefan Roese <sr@denx.de>
+ */
+
+#include <dm.h>
+#include <ram.h>
+
+#include <mach/octeon_ddr.h>
+#include <mach/cvmx-qlm.h>
+#include <mach/octeon_qlm.h>
+#include <mach/octeon_fdt.h>
+#include <mach/cvmx-helper.h>
+#include <mach/cvmx-helper-cfg.h>
+#include <mach/cvmx-helper-util.h>
+#include <mach/cvmx-bgxx-defs.h>
+
+#include "board_ddr.h"
+
+#define NIC23_DEF_DRAM_FREQ		800
+
+static u8 octeon_nic23_cfg0_spd_values[512] = {
+	OCTEON_NIC23_CFG0_SPD_VALUES
+};
+
+static struct ddr_conf board_ddr_conf[] = {
+	 OCTEON_NIC23_DDR_CONFIGURATION
+};
+
+struct ddr_conf *octeon_ddr_conf_table_get(int *count, int *def_ddr_freq)
+{
+	*count = ARRAY_SIZE(board_ddr_conf);
+	*def_ddr_freq = NIC23_DEF_DRAM_FREQ;
+
+	return board_ddr_conf;
+}
+
+int board_fix_fdt(void *fdt)
+{
+	u32 range_data[5 * 8];
+	bool rev4;
+	int node;
+	int rc;
+
+	/*
+	 * ToDo:
+	 * Read rev4 info from EEPROM or where the original U-Boot does
+	 * and don't hard-code it here.
+	 */
+	rev4 = true;
+
+	debug("%s() rev4: %s\n", __func__, rev4 ? "true" : "false");
+	/* Patch the PHY configuration based on board revision */
+	rc = octeon_fdt_patch_rename(fdt,
+				     rev4 ? "4,nor-flash" : "4,no-nor-flash",
+				     "cavium,board-trim", false, NULL, NULL);
+	if (!rev4) {
+		/* Modify the ranges for CS 0 */
+		node = fdt_node_offset_by_compatible(fdt, -1,
+						     "cavium,octeon-3860-bootbus");
+		if (node < 0) {
+			printf("%s: Error: cannot find boot bus in device tree!\n",
+			       __func__);
+			return -1;
+		}
+
+		rc = fdtdec_get_int_array(fdt, node, "ranges",
+					  range_data, 5 * 8);
+		if (rc) {
+			printf("%s: Error reading ranges from boot bus FDT\n",
+			       __func__);
+			return -1;
+		}
+		range_data[2] = cpu_to_fdt32(0x10000);
+		range_data[3] = 0;
+		range_data[4] = 0;
+		rc = fdt_setprop(fdt, node, "ranges", range_data,
+				 sizeof(range_data));
+		if (rc) {
+			printf("%s: Error updating boot bus ranges in fdt\n",
+			       __func__);
+		}
+	}
+	return rc;
+}
+
+void board_configure_qlms(void)
+{
+	octeon_configure_qlm(4, 3000, CVMX_QLM_MODE_SATA_2X1, 0, 0, 0, 0);
+	octeon_configure_qlm(5, 103125, CVMX_QLM_MODE_XFI_1X2, 0, 0, 2, 0);
+	/* Apply amplitude tuning to 10G interface */
+	octeon_qlm_tune_v3(0, 4, 3000, -1, -1, 7, -1);
+	octeon_qlm_tune_v3(0, 5, 103125, 0x19, 0x0, -1, -1);
+	octeon_qlm_set_channel_v3(0, 5, 0);
+	octeon_qlm_dfe_disable(0, 5, -1, 103125, CVMX_QLM_MODE_XFI_1X2);
+	debug("QLM 4 reference clock: %d\n"
+	      "DLM 5 reference clock: %d\n",
+	      cvmx_qlm_measure_clock(4), cvmx_qlm_measure_clock(5));
+}
+
+int board_late_init(void)
+{
+	board_configure_qlms();
+
+	return 0;
+}
diff --git a/board/Marvell/octeon_nic23/board_ddr.h b/board/Marvell/octeon_nic23/board_ddr.h
new file mode 100644
index 0000000..eac877f
--- /dev/null
+++ b/board/Marvell/octeon_nic23/board_ddr.h
@@ -0,0 +1,269 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020 Marvell International Ltd.
+ *
+ * https://spdx.org/licenses
+ */
+
+#ifndef __BOARD_DDR_H__
+#define __BOARD_DDR_H__
+
+#define OCTEON_NIC23_DRAM_SOCKET_CONFIGURATION0			\
+	{ {0x0, 0x0}, {octeon_nic23_cfg0_spd_values, NULL} }
+
+#define NIC23_MTA8ATF51264AZ2G3_SPD_VALUES			\
+	0x23, 0x10, 0x0c, 0x02, 0x84, 0x19, 0x00, 0x08,		\
+	0x00, 0x00, 0x00, 0x03, 0x01, 0x0b, 0x80, 0x00,		\
+	0x00, 0x00, 0x08, 0x0c, 0xf4, 0x1b, 0x00, 0x00,		\
+	0x6c, 0x6c, 0x6c, 0x11, 0x08, 0x74, 0x20, 0x08,		\
+	0x00, 0x05, 0x70, 0x03, 0x00, 0xa8, 0x1e, 0x2b,		\
+	0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x0c, 0x2c, 0x15, 0x35,		\
+	0x15, 0x35, 0x0b, 0x2c, 0x15, 0x35, 0x0b, 0x35,		\
+	0x0b, 0x2c, 0x0b, 0x35, 0x15, 0x36, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xb5, 0xce,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x30, 0x0e,		\
+	0x11, 0x11, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x2e,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x80, 0x2c, 0x0f, 0x14, 0x50, 0x0e, 0x08, 0x18,		\
+	0xc8, 0x31, 0x38, 0x41, 0x53, 0x46, 0x31, 0x47,		\
+	0x37, 0x32, 0x41, 0x5a, 0x2d, 0x32, 0x47, 0x31,		\
+	0x41, 0x31, 0x20, 0x20, 0x20, 0x31, 0x80, 0x2c,		\
+	0x41, 0x44, 0x50, 0x41, 0x45, 0x4e, 0x43, 0x39,		\
+	0x30, 0x30, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,		\
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+#define OCTEON_NIC23_CFG0_SPD_VALUES	NIC23_MTA8ATF51264AZ2G3_SPD_VALUES
+
+#define OCTEON_NIC23_BOARD_EEPROM_TWSI_ADDR	0x56
+
+#define OCTEON_NIC23_MODEREG_PARAMS1_1RANK_1SLOT		\
+{								\
+		.cn78xx = {					\
+			.pasr_00	= 0,			\
+			.asr_00		= 0,			\
+			.srt_00		= 0,			\
+			.rtt_wr_00	= ddr4_rttwr_80ohm & 3,	\
+			.rtt_wr_00_ext	= (ddr4_rttwr_80ohm >> 2) & 1, \
+			.dic_00		= ddr4_dic_34ohm,	\
+			.rtt_nom_00	= 0,                    \
+			.pasr_01	= 0,			\
+			.asr_01		= 0,			\
+			.srt_01		= 0,			\
+			.rtt_wr_01	= 0,			\
+			.dic_01		= ddr4_dic_34ohm,	\
+			.rtt_nom_01	= 0,			\
+			.pasr_10	= 0,			\
+			.asr_10		= 0,			\
+			.srt_10		= 0,			\
+			.rtt_wr_10	= 0,			\
+			.dic_10		= ddr4_dic_34ohm,	\
+			.rtt_nom_10	= 0,			\
+			.pasr_11	= 0,			\
+			.asr_11		= 0,			\
+			.srt_11		= 0,			\
+			.rtt_wr_11	= 0,			\
+			.dic_11		= ddr4_dic_34ohm,	\
+			.rtt_nom_11	= 0,			\
+		}						\
+	}
+
+#define OCTEON_NIC23_MODEREG_PARAMS1_1RANK_2SLOT		\
+{								\
+		.cn78xx = {					\
+			.pasr_00	= 0,			\
+			.asr_00		= 0,			\
+			.srt_00		= 0,			\
+			.rtt_wr_00	= ddr4_rttwr_80ohm & 3,	\
+			.rtt_wr_00_ext	= (ddr4_rttwr_80ohm >> 2) & 1, \
+			.dic_00		= ddr4_dic_34ohm,	\
+			.rtt_nom_00	= 0,			\
+			.pasr_01	= 0,			\
+			.asr_01		= 0,			\
+			.srt_01		= 0,			\
+			.rtt_wr_01	= 0,			\
+			.dic_01		= ddr4_dic_34ohm,	\
+			.rtt_nom_01	= 0,			\
+			.pasr_10	= 0,			\
+			.asr_10		= 0,			\
+			.srt_10		= 0,                    \
+			.rtt_wr_10	= ddr4_rttwr_80ohm & 3,	\
+			.rtt_wr_10_ext	= (ddr4_rttwr_80ohm >> 2) & 1, \
+			.dic_10		= ddr4_dic_34ohm,	\
+			.rtt_nom_10	= 0,			\
+			.pasr_11	= 0,			\
+			.asr_11		= 0,			\
+			.srt_11		= 0,			\
+			.rtt_wr_11	= 0,			\
+			.dic_11		= ddr4_dic_34ohm,	\
+			.rtt_nom_11	= 0			\
+		}                                               \
+}
+
+#define OCTEON_NIC23_MODEREG_PARAMS2_1RANK_1SLOT	\
+{							\
+	.cn78xx = {					\
+		.rtt_park_00    = ddr4_rttpark_60ohm,	\
+		.vref_value_00  = 0x22,			\
+		.vref_range_00  = 0,			\
+		.rtt_park_01    = 0,			\
+		.vref_value_01  = 0,			\
+		.vref_range_01  = 0,			\
+		.rtt_park_10    = 0,			\
+		.vref_value_10  = 0,			\
+		.vref_range_10  = 0,			\
+		.rtt_park_11    = 0,			\
+		.vref_value_11  = 0,			\
+		.vref_range_11  = 0			\
+	}						\
+}
+
+#define  OCTEON_NIC23_MODEREG_PARAMS2_1RANK_2SLOT	\
+{							\
+	.cn78xx = {					\
+		.rtt_park_00    = ddr4_rttpark_48ohm,	\
+		.vref_value_00  = 0x1f,			\
+		.vref_range_00  = 0,			\
+		.rtt_park_01    = 0,			\
+		.vref_value_01  = 0,			\
+		.vref_range_01  = 0,			\
+		.rtt_park_10    = ddr4_rttpark_48ohm,	\
+		.vref_value_10  = 0x1f,			\
+		.vref_range_10  = 0,			\
+		.rtt_park_11    = 0,			\
+		.vref_value_11  = 0,			\
+		.vref_range_11  = 0			\
+	}						\
+}
+
+#define OCTEON_NIC23_CN73XX_DRAM_ODT_1RANK_CONFIGURATION		\
+	/*   1 */							\
+	{								\
+		ddr4_dqx_driver_34_ohm,					\
+		0x00000000ULL,						\
+		OCTEON_NIC23_MODEREG_PARAMS1_1RANK_1SLOT,		\
+		OCTEON_NIC23_MODEREG_PARAMS2_1RANK_1SLOT,		\
+		ddr4_rodt_ctl_48_ohm,					\
+		0x00000000ULL,						\
+		0							\
+	},								\
+	/*   2 */							\
+	{								\
+		ddr4_dqx_driver_34_ohm,					\
+		0x00000000ULL,						\
+		OCTEON_NIC23_MODEREG_PARAMS1_1RANK_2SLOT,		\
+		OCTEON_NIC23_MODEREG_PARAMS2_1RANK_2SLOT,		\
+		ddr4_rodt_ctl_80_ohm,					\
+		0x00000000ULL,						\
+		0							\
+	}
+
+/*
+ * Construct a static initializer for the ddr_configuration_t variable that
+ * holds (almost) all of the information required for DDR initialization.
+ */
+
+/*
+ * The parameters below make up the custom_lmc_config data structure.
+ * This structure is used to customize the way that the LMC DRAM
+ * Controller is configured for a particular board design.
+ *
+ * Refer to the file lib_octeon_board_table_entry.h for a description
+ * of the custom board settings.  It is usually kept in the following
+ * location... arch/mips/include/asm/arch-octeon/
+ *
+ */
+
+#define OCTEON_NIC23_DDR_CONFIGURATION					\
+/* Interface 0 */							\
+{									\
+	.custom_lmc_config = {						\
+		.min_rtt_nom_idx	= 2,				\
+		.max_rtt_nom_idx	= 5,				\
+		.min_rodt_ctl		= 2,				\
+		.max_rodt_ctl		= 4,				\
+		.ck_ctl                 = ddr4_driver_34_ohm,           \
+		.cmd_ctl                = ddr4_driver_34_ohm,           \
+		.ctl_ctl                = ddr4_driver_34_ohm,           \
+		.min_cas_latency	= 7,				\
+		.offset_en		= 1,				\
+		.offset_udimm		= 2,				\
+		.offset_rdimm		= 2,				\
+		.ddr_rtt_nom_auto	= 0,				\
+		.ddr_rodt_ctl_auto	= 0,				\
+		.rlevel_compute		= 0,				\
+		.ddr2t_udimm		= 1,				\
+		.ddr2t_rdimm		= 1,				\
+		.maximum_adjacent_rlevel_delay_increment = 2,           \
+		.fprch2			= 2,				\
+		.dll_write_offset       = NULL,                         \
+		.dll_read_offset        = NULL,                         \
+		.disable_sequential_delay_check = 1,                    \
+		.parity			= 0				\
+	},								\
+	.dimm_config_table = {						\
+		OCTEON_NIC23_DRAM_SOCKET_CONFIGURATION0,		\
+		DIMM_CONFIG_TERMINATOR					\
+	},								\
+	.unbuffered = {							\
+		.ddr_board_delay = 0,					\
+		.lmc_delay_clk = 0,					\
+		.lmc_delay_cmd = 0,					\
+		.lmc_delay_dq = 0					\
+	},								\
+	.registered = {							\
+		.ddr_board_delay = 0,					\
+		.lmc_delay_clk = 0,					\
+		.lmc_delay_cmd = 0,					\
+		.lmc_delay_dq = 0					\
+	},								\
+	.odt_1rank_config = {						\
+		OCTEON_NIC23_CN73XX_DRAM_ODT_1RANK_CONFIGURATION	\
+	},								\
+},
+
+#endif /* __BOARD_DDR_H__ */
diff --git a/configs/octeon_ebb7304_defconfig b/configs/octeon_ebb7304_defconfig
index ae93b49..f614e95 100644
--- a/configs/octeon_ebb7304_defconfig
+++ b/configs/octeon_ebb7304_defconfig
@@ -9,8 +9,11 @@
 CONFIG_ARCH_OCTEON=y
 # CONFIG_MIPS_CACHE_SETUP is not set
 # CONFIG_MIPS_CACHE_DISABLE is not set
+CONFIG_MIPS_RELOCATION_TABLE_SIZE=0xc000
 CONFIG_DEBUG_UART=y
+CONFIG_OF_BOARD_FIXUP=y
 CONFIG_SYS_CONSOLE_INFO_QUIET=y
+CONFIG_BOARD_LATE_INIT=y
 CONFIG_HUSH_PARSER=y
 CONFIG_CMD_GPIO=y
 CONFIG_CMD_I2C=y
@@ -21,6 +24,7 @@
 CONFIG_CMD_USB=y
 CONFIG_CMD_DHCP=y
 CONFIG_CMD_PING=y
+CONFIG_CMD_RTC=y
 CONFIG_CMD_TIME=y
 CONFIG_CMD_EXT4=y
 CONFIG_CMD_FAT=y
@@ -48,14 +52,17 @@
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
-# CONFIG_NETDEVICES is not set
+CONFIG_E1000=y
 CONFIG_PCI=y
 CONFIG_DM_PCI=y
+CONFIG_PCIE_OCTEON=y
 CONFIG_DM_REGULATOR=y
 CONFIG_DM_REGULATOR_FIXED=y
 CONFIG_RAM=y
 CONFIG_RAM_OCTEON=y
 CONFIG_RAM_OCTEON_DDR4=y
+CONFIG_DM_RTC=y
+CONFIG_RTC_DS1307=y
 CONFIG_DEBUG_UART_SHIFT=3
 CONFIG_DEBUG_UART_ANNOUNCE=y
 CONFIG_SYS_NS16550=y
diff --git a/configs/octeon_nic23_defconfig b/configs/octeon_nic23_defconfig
new file mode 100644
index 0000000..f36af43
--- /dev/null
+++ b/configs/octeon_nic23_defconfig
@@ -0,0 +1,70 @@
+CONFIG_MIPS=y
+CONFIG_SYS_TEXT_BASE=0xffffffff80000000
+CONFIG_SYS_MALLOC_F_LEN=0x4000
+CONFIG_NR_DRAM_BANKS=2
+CONFIG_ENV_SIZE=0x2000
+CONFIG_ENV_OFFSET=0xe000
+CONFIG_ENV_SECT_SIZE=0x100
+CONFIG_DEBUG_UART_BASE=0x8001180000000800
+CONFIG_DEBUG_UART_CLOCK=800000000
+CONFIG_ARCH_OCTEON=y
+CONFIG_TARGET_OCTEON_NIC23=y
+# CONFIG_MIPS_CACHE_SETUP is not set
+# CONFIG_MIPS_CACHE_DISABLE is not set
+CONFIG_DEBUG_UART=y
+CONFIG_AHCI=y
+CONFIG_OF_BOARD_FIXUP=y
+CONFIG_SYS_CONSOLE_ENV_OVERWRITE=y
+# CONFIG_SYS_DEVICE_NULLDEV is not set
+CONFIG_ARCH_MISC_INIT=y
+CONFIG_BOARD_LATE_INIT=y
+CONFIG_HUSH_PARSER=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_MTD=y
+CONFIG_CMD_PART=y
+CONFIG_CMD_PCI=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_EFI_PARTITION=y
+CONFIG_ENV_IS_IN_SPI_FLASH=y
+CONFIG_ENV_ADDR=0xe000
+CONFIG_SATA=y
+CONFIG_AHCI_MVEBU=y
+CONFIG_CLK=y
+# CONFIG_INPUT is not set
+CONFIG_MISC=y
+CONFIG_MMC=y
+CONFIG_DM_MMC=y
+CONFIG_MMC_OCTEONTX=y
+CONFIG_MTD=y
+CONFIG_DM_MTD=y
+CONFIG_DM_SPI_FLASH=y
+CONFIG_SPI_FLASH_ATMEL=y
+CONFIG_SPI_FLASH_SPANSION=y
+CONFIG_SPI_FLASH_STMICRO=y
+# CONFIG_NETDEVICES is not set
+CONFIG_PCI=y
+CONFIG_DM_PCI=y
+CONFIG_DM_REGULATOR=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_RAM=y
+CONFIG_RAM_OCTEON=y
+CONFIG_RAM_OCTEON_DDR4=y
+CONFIG_SCSI=y
+CONFIG_DEBUG_UART_SHIFT=3
+CONFIG_DEBUG_UART_ANNOUNCE=y
+CONFIG_SYS_NS16550=y
+CONFIG_OCTEON_SERIAL_BOOTCMD=y
+CONFIG_OCTEON_SERIAL_PCIE_CONSOLE=y
+CONFIG_SPI=y
+CONFIG_OCTEON_SPI=y
+CONFIG_SYSRESET=y
+CONFIG_SYSRESET_OCTEON=y
+CONFIG_HEXDUMP=y
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 9ff4b87..b5a2798 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -116,7 +116,7 @@
 
 config AHCI_MVEBU
 	bool "Marvell EBU AHCI SATA support"
-	depends on ARCH_MVEBU
+	depends on ARCH_MVEBU || ARCH_OCTEON
 	depends on AHCI
 	select SCSI_AHCI
 	select DM_SCSI
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 98b2882..57c4e15 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -500,6 +500,7 @@
 {
 	struct ahci_ioports *pp = &(uc_priv->port[port]);
 	struct ahci_sg *ahci_sg = pp->cmd_tbl_sg;
+	phys_addr_t pa = virt_to_phys(buf);
 	u32 sg_count;
 	int i;
 
@@ -510,9 +511,6 @@
 	}
 
 	for (i = 0; i < sg_count; i++) {
-		/* We assume virt=phys */
-		phys_addr_t pa = (unsigned long)buf + i * MAX_DATA_BYTE_COUNT;
-
 		ahci_sg->addr = cpu_to_le32(lower_32_bits(pa));
 		ahci_sg->addr_hi = cpu_to_le32(upper_32_bits(pa));
 		if (ahci_sg->addr_hi && !(uc_priv->cap & AHCI_CAP_S64A)) {
@@ -520,25 +518,26 @@
 			return -1;
 		}
 		ahci_sg->flags_size = cpu_to_le32(0x3fffff &
-					  (buf_len < MAX_DATA_BYTE_COUNT
-					   ? (buf_len - 1)
-					   : (MAX_DATA_BYTE_COUNT - 1)));
+					  (buf_len < MAX_DATA_BYTE_COUNT ?
+					   (buf_len - 1) :
+					   (MAX_DATA_BYTE_COUNT - 1)));
 		ahci_sg++;
 		buf_len -= MAX_DATA_BYTE_COUNT;
+		pa += MAX_DATA_BYTE_COUNT;
 	}
 
 	return sg_count;
 }
 
-
 static void ahci_fill_cmd_slot(struct ahci_ioports *pp, u32 opts)
 {
+	phys_addr_t pa = virt_to_phys((void *)pp->cmd_tbl);
+
 	pp->cmd_slot->opts = cpu_to_le32(opts);
 	pp->cmd_slot->status = 0;
-	pp->cmd_slot->tbl_addr = cpu_to_le32((u32)pp->cmd_tbl & 0xffffffff);
+	pp->cmd_slot->tbl_addr = cpu_to_le32(lower_32_bits(pa));
 #ifdef CONFIG_PHYS_64BIT
-	pp->cmd_slot->tbl_addr_hi =
-	    cpu_to_le32((u32)(((pp->cmd_tbl) >> 16) >> 16));
+	pp->cmd_slot->tbl_addr_hi = cpu_to_le32(upper_32_bits(pa));
 #endif
 }
 
@@ -674,12 +673,12 @@
 
 	ahci_dcache_invalidate_range((unsigned long)buf,
 				     (unsigned long)buf_len);
-	debug("%s: %d byte transferred.\n", __func__, pp->cmd_slot->status);
+	debug("%s: %d byte transferred.\n", __func__,
+	      le32_to_cpu(pp->cmd_slot->status));
 
 	return 0;
 }
 
-
 static char *ata_id_strcpy(u16 *target, u16 *src, int len)
 {
 	int i;
diff --git a/drivers/ata/ahci_mvebu.c b/drivers/ata/ahci_mvebu.c
index 7d82d2e..f05150d 100644
--- a/drivers/ata/ahci_mvebu.c
+++ b/drivers/ata/ahci_mvebu.c
@@ -39,7 +39,7 @@
 	 */
 	board_ahci_enable();
 
-	ahci_probe_scsi(dev, dev_read_addr(dev));
+	ahci_probe_scsi(dev, (ulong)dev_remap_addr(dev));
 
 	return 0;
 }
@@ -48,6 +48,7 @@
 	{ .compatible = "marvell,armada-380-ahci" },
 	{ .compatible = "marvell,armada-3700-ahci" },
 	{ .compatible = "marvell,armada-8k-ahci" },
+	{ .compatible = "cavium,octeon-7130-ahci" },
 	{ }
 };
 
diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c
index a6cdda8..5a1b38b 100644
--- a/drivers/net/sun8i_emac.c
+++ b/drivers/net/sun8i_emac.c
@@ -554,7 +554,7 @@
 	 * The GPIO pinmux value is an integration choice, so depends on the
 	 * SoC, not the EMAC variant.
 	 */
-	if (IS_ENABLED(CONFIG_MACH_SUN8I_H3))
+	if (IS_ENABLED(CONFIG_MACH_SUNXI_H3_H5))
 		iomux = SUN8I_IOMUX_H3;
 	else if (IS_ENABLED(CONFIG_MACH_SUN8I_R40))
 		iomux = SUN8I_IOMUX_R40;
@@ -562,8 +562,12 @@
 		iomux = SUN8I_IOMUX_H6;
 	else if (IS_ENABLED(CONFIG_MACH_SUN50I_H616))
 		iomux = SUN8I_IOMUX_H616;
-	else
+	else if (IS_ENABLED(CONFIG_MACH_SUN8I_A83T))
 		iomux = SUN8I_IOMUX;
+	else if (IS_ENABLED(CONFIG_MACH_SUN50I))
+		iomux = SUN8I_IOMUX;
+	else
+		BUILD_BUG_ON_MSG(1, "missing pinmux value for Ethernet pins");
 
 	for (i = 0; ; i++) {
 		int pin;
diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
index cdcdd8f..d5b6018 100644
--- a/drivers/pci/Kconfig
+++ b/drivers/pci/Kconfig
@@ -158,6 +158,12 @@
 	  These controllers provide PCI configuration access to all on-board
 	  peripherals so it should only be disabled for testing purposes
 
+config PCIE_OCTEON
+	bool "MIPS Octeon PCIe support"
+	depends on ARCH_OCTEON
+	help
+	  Enable support for the MIPS Octeon SoC family PCIe controllers.
+
 config PCI_XILINX
 	bool "Xilinx AXI Bridge for PCI Express"
 	depends on DM_PCI
diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile
index 96d6182..1f74178 100644
--- a/drivers/pci/Makefile
+++ b/drivers/pci/Makefile
@@ -53,3 +53,4 @@
 obj-$(CONFIG_PCIE_DW_MESON) += pcie_dw_meson.o
 obj-$(CONFIG_PCI_BRCMSTB) += pcie_brcmstb.o
 obj-$(CONFIG_PCI_OCTEONTX) += pci_octeontx.o
+obj-$(CONFIG_PCIE_OCTEON) += pcie_octeon.o
diff --git a/drivers/pci/pcie_octeon.c b/drivers/pci/pcie_octeon.c
new file mode 100644
index 0000000..3b28bd8
--- /dev/null
+++ b/drivers/pci/pcie_octeon.c
@@ -0,0 +1,159 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2020 Stefan Roese <sr@denx.de>
+ */
+
+#include <dm.h>
+#include <errno.h>
+#include <fdtdec.h>
+#include <log.h>
+#include <pci.h>
+#include <linux/delay.h>
+
+#include <mach/octeon-model.h>
+#include <mach/octeon_pci.h>
+#include <mach/cvmx-regs.h>
+#include <mach/cvmx-pcie.h>
+#include <mach/cvmx-pemx-defs.h>
+
+struct octeon_pcie {
+	void *base;
+	int first_busno;
+	u32 port;
+	struct udevice *dev;
+	int pcie_port;
+};
+
+static bool octeon_bdf_invalid(pci_dev_t bdf, int first_busno)
+{
+	/*
+	 * In PCIe only a single device (0) can exist on the local bus.
+	 * Beyound the local bus, there might be a switch and everything
+	 * is possible.
+	 */
+	if ((PCI_BUS(bdf) == first_busno) && (PCI_DEV(bdf) > 0))
+		return true;
+
+	return false;
+}
+
+static int pcie_octeon_write_config(struct udevice *bus, pci_dev_t bdf,
+				    uint offset, ulong value,
+				    enum pci_size_t size)
+{
+	struct octeon_pcie *pcie = dev_get_priv(bus);
+	struct pci_controller *hose = dev_get_uclass_priv(bus);
+	int busno;
+	int port;
+
+	debug("PCIE CFG write: (b,d,f)=(%2d,%2d,%2d) ",
+	      PCI_BUS(bdf), PCI_DEV(bdf), PCI_FUNC(bdf));
+	debug("(addr,size,val)=(0x%04x, %d, 0x%08lx)\n", offset, size, value);
+
+	port = pcie->pcie_port;
+	busno = PCI_BUS(bdf) - hose->first_busno + 1;
+
+	switch (size) {
+	case PCI_SIZE_8:
+		cvmx_pcie_config_write8(port, busno, PCI_DEV(bdf),
+					PCI_FUNC(bdf), offset, value);
+		break;
+	case PCI_SIZE_16:
+		cvmx_pcie_config_write16(port, busno, PCI_DEV(bdf),
+					 PCI_FUNC(bdf), offset, value);
+		break;
+	case PCI_SIZE_32:
+		cvmx_pcie_config_write32(port, busno, PCI_DEV(bdf),
+					 PCI_FUNC(bdf), offset, value);
+		break;
+	default:
+		printf("Invalid size\n");
+	};
+
+	return 0;
+}
+
+static int pcie_octeon_read_config(const struct udevice *bus, pci_dev_t bdf,
+				   uint offset, ulong *valuep,
+				   enum pci_size_t size)
+{
+	struct octeon_pcie *pcie = dev_get_priv(bus);
+	struct pci_controller *hose = dev_get_uclass_priv(bus);
+	int busno;
+	int port;
+
+	port = pcie->pcie_port;
+	busno = PCI_BUS(bdf) - hose->first_busno + 1;
+	if (octeon_bdf_invalid(bdf, pcie->first_busno)) {
+		*valuep = pci_get_ff(size);
+		return 0;
+	}
+
+	switch (size) {
+	case PCI_SIZE_8:
+		*valuep = cvmx_pcie_config_read8(port, busno, PCI_DEV(bdf),
+						 PCI_FUNC(bdf), offset);
+		break;
+	case PCI_SIZE_16:
+		*valuep = cvmx_pcie_config_read16(port, busno, PCI_DEV(bdf),
+						  PCI_FUNC(bdf), offset);
+		break;
+	case PCI_SIZE_32:
+		*valuep = cvmx_pcie_config_read32(port, busno, PCI_DEV(bdf),
+						  PCI_FUNC(bdf), offset);
+		break;
+	default:
+		printf("Invalid size\n");
+	};
+
+	debug("%02x.%02x.%02x: u%d %x -> %lx\n",
+	      PCI_BUS(bdf), PCI_DEV(bdf), PCI_FUNC(bdf), size, offset, *valuep);
+
+	return 0;
+}
+
+static int pcie_octeon_probe(struct udevice *dev)
+{
+	struct octeon_pcie *pcie = dev_get_priv(dev);
+	int node = cvmx_get_node_num();
+	int pcie_port;
+	int ret = 0;
+
+	/* Get port number, lane number and memory target / attr */
+	if (ofnode_read_u32(dev_ofnode(dev), "marvell,pcie-port",
+			    &pcie->port)) {
+		ret = -ENODEV;
+		goto err;
+	}
+
+	pcie->first_busno = dev_seq(dev);
+	pcie_port = ((node << 4) | pcie->port);
+	ret = cvmx_pcie_rc_initialize(pcie_port);
+	if (ret != 0)
+		return ret;
+
+	return 0;
+
+err:
+	return ret;
+}
+
+static const struct dm_pci_ops pcie_octeon_ops = {
+	.read_config = pcie_octeon_read_config,
+	.write_config = pcie_octeon_write_config,
+};
+
+static const struct udevice_id pcie_octeon_ids[] = {
+	{ .compatible = "marvell,pcie-host-octeon" },
+	{ }
+};
+
+U_BOOT_DRIVER(pcie_octeon) = {
+	.name		= "pcie_octeon",
+	.id		= UCLASS_PCI,
+	.of_match	= pcie_octeon_ids,
+	.ops		= &pcie_octeon_ops,
+	.probe		= pcie_octeon_probe,
+	.priv_auto	= sizeof(struct octeon_pcie),
+	.flags		= DM_FLAG_PRE_RELOC,
+};
diff --git a/drivers/ram/octeon/octeon3_lmc.c b/drivers/ram/octeon/octeon3_lmc.c
index 327cdc5..349abc1 100644
--- a/drivers/ram/octeon/octeon3_lmc.c
+++ b/drivers/ram/octeon/octeon3_lmc.c
@@ -17,14 +17,8 @@
 
 /* Random number generator stuff */
 
-#define CVMX_RNM_CTL_STATUS	0x0001180040000000
 #define CVMX_OCT_DID_RNG	8ULL
 
-static u64 cvmx_build_io_address(u64 major_did, u64 sub_did)
-{
-	return ((0x1ull << 48) | (major_did << 43) | (sub_did << 40));
-}
-
 static u64 cvmx_rng_get_random64(void)
 {
 	return csr_rd(cvmx_build_io_address(CVMX_OCT_DID_RNG, 0));
@@ -285,10 +279,10 @@
 	int node = 0;
 
 	// Force full cacheline write-backs to boost traffic
-	l2c_ctl.u64 = l2c_rd(priv, CVMX_L2C_CTL);
+	l2c_ctl.u64 = l2c_rd(priv, CVMX_L2C_CTL_REL);
 	saved_dissblkdty = l2c_ctl.cn78xx.dissblkdty;
 	l2c_ctl.cn78xx.dissblkdty = 1;
-	l2c_wr(priv, CVMX_L2C_CTL, l2c_ctl.u64);
+	l2c_wr(priv, CVMX_L2C_CTL_REL, l2c_ctl.u64);
 
 	if (octeon_is_cpuid(OCTEON_CN73XX) || octeon_is_cpuid(OCTEON_CNF75XX))
 		kbitno = 18;
@@ -489,9 +483,9 @@
 	}
 
 	// Restore original setting that could enable partial cacheline writes
-	l2c_ctl.u64 = l2c_rd(priv, CVMX_L2C_CTL);
+	l2c_ctl.u64 = l2c_rd(priv, CVMX_L2C_CTL_REL);
 	l2c_ctl.cn78xx.dissblkdty = saved_dissblkdty;
-	l2c_wr(priv, CVMX_L2C_CTL, l2c_ctl.u64);
+	l2c_wr(priv, CVMX_L2C_CTL_REL, l2c_ctl.u64);
 
 	return errors;
 }
@@ -6315,17 +6309,17 @@
 	lmc_rd(priv, CVMX_LMCX_INT(if_num));
 
 	for (tad = 0; tad < num_tads; tad++) {
-		l2c_wr(priv, CVMX_L2C_TADX_INT(tad),
-		       l2c_rd(priv, CVMX_L2C_TADX_INT(tad)));
+		l2c_wr(priv, CVMX_L2C_TADX_INT_REL(tad),
+		       l2c_rd(priv, CVMX_L2C_TADX_INT_REL(tad)));
 		debug("%-45s : (%d) 0x%08llx\n", "CVMX_L2C_TAD_INT", tad,
-		      l2c_rd(priv, CVMX_L2C_TADX_INT(tad)));
+		      l2c_rd(priv, CVMX_L2C_TADX_INT_REL(tad)));
 	}
 
 	for (mci = 0; mci < num_mcis; mci++) {
-		l2c_wr(priv, CVMX_L2C_MCIX_INT(mci),
-		       l2c_rd(priv, CVMX_L2C_MCIX_INT(mci)));
+		l2c_wr(priv, CVMX_L2C_MCIX_INT_REL(mci),
+		       l2c_rd(priv, CVMX_L2C_MCIX_INT_REL(mci)));
 		debug("%-45s : (%d) 0x%08llx\n", "L2C_MCI_INT", mci,
-		      l2c_rd(priv, CVMX_L2C_MCIX_INT(mci)));
+		      l2c_rd(priv, CVMX_L2C_MCIX_INT_REL(mci)));
 	}
 
 	debug("%-45s : 0x%08llx\n", "LMC_INT",
@@ -9827,7 +9821,7 @@
 		address -= ADDRESS_HOLE;
 
 	/* Determine the LMC controllers */
-	l2c_ctl.u64 = l2c_rd(priv, CVMX_L2C_CTL);
+	l2c_ctl.u64 = l2c_rd(priv, CVMX_L2C_CTL_REL);
 
 	/* xbits depends on number of LMCs */
 	xbits = cvmx_dram_get_num_lmc(priv) >> 1;	// 4->2, 2->1, 1->0
diff --git a/drivers/ram/octeon/octeon_ddr.c b/drivers/ram/octeon/octeon_ddr.c
index 1f75dc1..e7b61d3 100644
--- a/drivers/ram/octeon/octeon_ddr.c
+++ b/drivers/ram/octeon/octeon_ddr.c
@@ -145,7 +145,7 @@
 		big_ctl.u64 = 0;
 		big_ctl.s.maxdram = bits - 9;
 		big_ctl.cn61xx.disable = mode;
-		l2c_wr(priv, CVMX_L2C_BIG_CTL, big_ctl.u64);
+		l2c_wr(priv, CVMX_L2C_BIG_CTL_REL, big_ctl.u64);
 	}
 }
 
@@ -2274,15 +2274,15 @@
 		printf("Disabling L2 ECC based on disable_l2_ecc environment variable\n");
 		union cvmx_l2c_ctl l2c_val;
 
-		l2c_val.u64 = l2c_rd(priv, CVMX_L2C_CTL);
+		l2c_val.u64 = l2c_rd(priv, CVMX_L2C_CTL_REL);
 		l2c_val.s.disecc = 1;
-		l2c_wr(priv, CVMX_L2C_CTL, l2c_val.u64);
+		l2c_wr(priv, CVMX_L2C_CTL_REL, l2c_val.u64);
 	} else {
 		union cvmx_l2c_ctl l2c_val;
 
-		l2c_val.u64 = l2c_rd(priv, CVMX_L2C_CTL);
+		l2c_val.u64 = l2c_rd(priv, CVMX_L2C_CTL_REL);
 		l2c_val.s.disecc = 0;
-		l2c_wr(priv, CVMX_L2C_CTL, l2c_val.u64);
+		l2c_wr(priv, CVMX_L2C_CTL_REL, l2c_val.u64);
 	}
 
 	/*
@@ -2295,17 +2295,17 @@
 
 		puts("L2 index aliasing disabled.\n");
 
-		l2c_val.u64 = l2c_rd(priv, CVMX_L2C_CTL);
+		l2c_val.u64 = l2c_rd(priv, CVMX_L2C_CTL_REL);
 		l2c_val.s.disidxalias = 1;
-		l2c_wr(priv, CVMX_L2C_CTL, l2c_val.u64);
+		l2c_wr(priv, CVMX_L2C_CTL_REL, l2c_val.u64);
 	} else {
 		union cvmx_l2c_ctl l2c_val;
 
 		/* Enable L2C index aliasing */
 
-		l2c_val.u64 = l2c_rd(priv, CVMX_L2C_CTL);
+		l2c_val.u64 = l2c_rd(priv, CVMX_L2C_CTL_REL);
 		l2c_val.s.disidxalias = 0;
-		l2c_wr(priv, CVMX_L2C_CTL, l2c_val.u64);
+		l2c_wr(priv, CVMX_L2C_CTL_REL, l2c_val.u64);
 	}
 
 	if (OCTEON_IS_OCTEON3()) {
@@ -2321,7 +2321,7 @@
 		u64 rdf_cnt;
 		char *s;
 
-		l2c_ctl.u64 = l2c_rd(priv, CVMX_L2C_CTL);
+		l2c_ctl.u64 = l2c_rd(priv, CVMX_L2C_CTL_REL);
 
 		/*
 		 * It is more convenient to compute the ratio using clock
@@ -2338,7 +2338,7 @@
 		debug("%-45s : %d, cpu_hertz:%d, ddr_hertz:%d\n",
 		      "EARLY FILL COUNT  ", l2c_ctl.cn78xx.rdf_cnt, cpu_hertz,
 		      ddr_hertz);
-		l2c_wr(priv, CVMX_L2C_CTL, l2c_ctl.u64);
+		l2c_wr(priv, CVMX_L2C_CTL_REL, l2c_ctl.u64);
 	}
 
 	/* Check for lower DIMM socket populated */
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index 7389484..ce69750 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -9,6 +9,7 @@
 #include <bootstage.h>
 #include <dm.h>
 #include <env.h>
+#include <libata.h>
 #include <log.h>
 #include <part.h>
 #include <pci.h>
@@ -594,6 +595,11 @@
 	memcpy(&bdesc->vendor, &bd.vendor, sizeof(bd.vendor));
 	memcpy(&bdesc->product, &bd.product, sizeof(bd.product));
 	memcpy(&bdesc->revision, &bd.revision,	sizeof(bd.revision));
+	if (IS_ENABLED(CONFIG_SYS_BIG_ENDIAN)) {
+		ata_swap_buf_le16((u16 *)&bdesc->vendor, sizeof(bd.vendor) / 2);
+		ata_swap_buf_le16((u16 *)&bdesc->product, sizeof(bd.product) / 2);
+		ata_swap_buf_le16((u16 *)&bdesc->revision, sizeof(bd.revision) / 2);
+	}
 
 	if (verbose) {
 		printf("  Device %d: ", bdesc->devnum);
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index af83e96..6d1c453 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -788,6 +788,30 @@
 	  for example APQ8016 and MSM8916.
 	  Single baudrate is supported in current implementation (115200).
 
+config OCTEON_SERIAL_BOOTCMD
+	bool "MIPS Octeon PCI remote bootcmd input"
+	depends on ARCH_OCTEON
+	depends on DM_SERIAL
+	select SYS_IS_IN_ENV
+	select CONSOLE_MUX
+	help
+	 This driver supports remote input over the PCIe bus from a host
+	 to U-Boot for entering commands.  It is utilized by the host
+	 commands 'oct-remote-load' and 'oct-remote-bootcmd'.
+
+config OCTEON_SERIAL_PCIE_CONSOLE
+	bool "MIPS Octeon PCIe remote console"
+	depends on ARCH_OCTEON
+	depends on (DM_SERIAL && DM_STDIO)
+	select SYS_STDIO_DEREGISTER
+	select SYS_CONSOLE_IS_IN_ENV
+	select CONSOLE_MUX
+	help
+	  This driver supports remote console over the PCIe bus when the
+	  Octeon is running in PCIe target mode. The host program
+	  'oct-remote-console' can be used to connect to this console.
+	  The console number will likely be 0 or 1.
+
 config OMAP_SERIAL
 	bool "Support for OMAP specific UART"
 	depends on DM_SERIAL
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
index 92bcb30..6c0fdca 100644
--- a/drivers/serial/Makefile
+++ b/drivers/serial/Makefile
@@ -66,6 +66,8 @@
 obj-$(CONFIG_MVEBU_A3700_UART) += serial_mvebu_a3700.o
 obj-$(CONFIG_MPC8XX_CONS) += serial_mpc8xx.o
 obj-$(CONFIG_NULLDEV_SERIAL) += serial_nulldev.o
+obj-$(CONFIG_OCTEON_SERIAL_BOOTCMD) += serial_octeon_bootcmd.o
+obj-$(CONFIG_OCTEON_SERIAL_PCIE_CONSOLE) += serial_octeon_pcie_console.o
 obj-$(CONFIG_OWL_SERIAL) += serial_owl.o
 obj-$(CONFIG_OMAP_SERIAL) += serial_omap.o
 obj-$(CONFIG_MTK_SERIAL) += serial_mtk.o
diff --git a/drivers/serial/serial_octeon_bootcmd.c b/drivers/serial/serial_octeon_bootcmd.c
new file mode 100644
index 0000000..4bcff77
--- /dev/null
+++ b/drivers/serial/serial_octeon_bootcmd.c
@@ -0,0 +1,182 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2019 Marvell International Ltd.
+ * Copyright (C) 2021 Stefan Roese <sr@denx.de>
+ */
+
+#include <dm.h>
+#include <dm/uclass.h>
+#include <errno.h>
+#include <input.h>
+#include <iomux.h>
+#include <log.h>
+#include <serial.h>
+#include <stdio_dev.h>
+#include <string.h>
+#include <watchdog.h>
+#include <linux/delay.h>
+#include <asm/addrspace.h>
+#include <asm/io.h>
+#include <mach/cvmx-regs.h>
+#include <mach/cvmx-bootmem.h>
+
+#define DRIVER_NAME				"pci-bootcmd"
+
+/*
+ * Important:
+ * This address cannot be changed as the PCI console tool relies on exactly
+ * this value!
+ */
+#define BOOTLOADER_PCI_READ_BUFFER_BASE		0x6c000
+#define BOOTLOADER_PCI_READ_BUFFER_SIZE		256
+#define BOOTLOADER_PCI_WRITE_BUFFER_SIZE	256
+
+#define BOOTLOADER_PCI_READ_BUFFER_STR_LEN	\
+	(BOOTLOADER_PCI_READ_BUFFER_SIZE - 8)
+#define BOOTLOADER_PCI_WRITE_BUFFER_STR_LEN	\
+	(BOOTLOADER_PCI_WRITE_BUFFER_SIZE - 8)
+
+#define BOOTLOADER_PCI_READ_BUFFER_OWNER_ADDR	\
+	(BOOTLOADER_PCI_READ_BUFFER_BASE + 0)
+#define BOOTLOADER_PCI_READ_BUFFER_LEN_ADDR	\
+	(BOOTLOADER_PCI_READ_BUFFER_BASE + 4)
+#define BOOTLOADER_PCI_READ_BUFFER_DATA_ADDR	\
+	(BOOTLOADER_PCI_READ_BUFFER_BASE + 8)
+
+enum octeon_pci_io_buf_owner {
+	/* Must be zero, set when memory cleared */
+	OCTEON_PCI_IO_BUF_OWNER_INVALID = 0,
+	OCTEON_PCI_IO_BUF_OWNER_OCTEON = 1,
+	OCTEON_PCI_IO_BUF_OWNER_HOST = 2,
+};
+
+/* Structure for bootloader PCI IO buffers */
+struct octeon_pci_io_buf {
+	u32 owner;
+	u32 len;
+	char data[0];
+};
+
+struct octeon_bootcmd_priv {
+	bool started;
+	int copy_offset;
+	bool eol;
+	bool unlocked;
+	struct octeon_pci_io_buf *buf;
+};
+
+static int octeon_bootcmd_pending(struct udevice *dev, bool input)
+{
+	struct octeon_bootcmd_priv *priv = dev_get_priv(dev);
+
+	if (!input)
+		return 0;
+
+	if (priv->eol)
+		return 1;
+
+	CVMX_SYNC;
+	if (priv->buf->owner != OCTEON_PCI_IO_BUF_OWNER_OCTEON)
+		return 0;
+
+	if (priv->buf->len > priv->copy_offset &&
+	    (priv->buf->data[priv->copy_offset] != '\0'))
+		return 1;
+
+	return 0;
+}
+
+static int octeon_bootcmd_getc(struct udevice *dev)
+{
+	struct octeon_bootcmd_priv *priv = dev_get_priv(dev);
+	char c;
+
+	/* There's no EOL for boot commands so we fake it. */
+	if (priv->eol) {
+		priv->eol = false;
+		return '\n';
+	}
+
+	while (!octeon_bootcmd_pending(dev, true)) {
+		WATCHDOG_RESET();
+		/*
+		 * ToDo:
+		 * The original code calls octeon_board_poll() here. We may
+		 * need to implement something similar here.
+		 */
+		udelay(100);
+	}
+
+	c = priv->buf->data[priv->copy_offset];
+	priv->buf->data[priv->copy_offset++] = '\0';
+
+	if (priv->copy_offset >= min_t(int, CONFIG_SYS_CBSIZE - 1,
+				       BOOTLOADER_PCI_READ_BUFFER_STR_LEN - 1) ||
+	    (priv->buf->data[priv->copy_offset] == '\0')) {
+		priv->copy_offset = 0;
+		priv->buf->len = 0;
+		priv->buf->owner = OCTEON_PCI_IO_BUF_OWNER_HOST;
+		priv->eol = true;
+		CVMX_SYNC;
+	}
+
+	return c;
+}
+
+static const struct dm_serial_ops octeon_bootcmd_ops = {
+	.getc = octeon_bootcmd_getc,
+	.pending = octeon_bootcmd_pending,
+};
+
+static int octeon_bootcmd_probe(struct udevice *dev)
+{
+	struct octeon_bootcmd_priv *priv = dev_get_priv(dev);
+
+	priv->buf = (void *)CKSEG0ADDR(BOOTLOADER_PCI_READ_BUFFER_BASE);
+	memset(priv->buf, 0, BOOTLOADER_PCI_READ_BUFFER_SIZE);
+	priv->eol = false;
+
+	/*
+	 * When the bootcmd console is first started it is started as locked to
+	 * block any calls sending a command until U-Boot is ready to accept
+	 * commands.  Just before the main loop starts to accept commands the
+	 * bootcmd console is unlocked.
+	 */
+	if (priv->unlocked)
+		priv->buf->owner = OCTEON_PCI_IO_BUF_OWNER_HOST;
+	else
+		priv->buf->owner = OCTEON_PCI_IO_BUF_OWNER_OCTEON;
+
+	debug("%s called, buffer ptr: 0x%p, owner: %s\n", __func__,
+	      priv->buf,
+	      priv->buf->owner == OCTEON_PCI_IO_BUF_OWNER_HOST ?
+	      "host" : "octeon");
+	debug("&priv->copy_offset: 0x%p\n", &priv->copy_offset);
+	CVMX_SYNC;
+
+	/*
+	 * Perhaps reinvestige this: In the original code, "unlocked" etc
+	 * is set in the octeon_pci_bootcmd_unlock() function called very
+	 * late.
+	 */
+	priv->buf->owner = OCTEON_PCI_IO_BUF_OWNER_HOST;
+	priv->unlocked = true;
+	priv->started = true;
+	CVMX_SYNC;
+
+	return 0;
+}
+
+static const struct udevice_id octeon_bootcmd_serial_id[] = {
+	{ .compatible = "marvell,pci-bootcmd", },
+	{ },
+};
+
+U_BOOT_DRIVER(octeon_bootcmd) = {
+	.name = DRIVER_NAME,
+	.id = UCLASS_SERIAL,
+	.ops = &octeon_bootcmd_ops,
+	.of_match = of_match_ptr(octeon_bootcmd_serial_id),
+	.probe = octeon_bootcmd_probe,
+	.priv_auto = sizeof(struct octeon_bootcmd_priv),
+};
diff --git a/drivers/serial/serial_octeon_pcie_console.c b/drivers/serial/serial_octeon_pcie_console.c
new file mode 100644
index 0000000..c76e787
--- /dev/null
+++ b/drivers/serial/serial_octeon_pcie_console.c
@@ -0,0 +1,365 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2019 Marvell International Ltd.
+ * Copyright (C) 2021 Stefan Roese <sr@denx.de>
+ */
+
+#include <dm.h>
+#include <dm/uclass.h>
+#include <errno.h>
+#include <input.h>
+#include <iomux.h>
+#include <log.h>
+#include <serial.h>
+#include <stdio_dev.h>
+#include <string.h>
+#include <watchdog.h>
+#include <linux/delay.h>
+#include <asm/io.h>
+#include <mach/cvmx-regs.h>
+#include <mach/cvmx-bootmem.h>
+
+#define DRIVER_NAME				"pci-console"
+#define OCTEONTX_PCIE_CONSOLE_NAME_LEN		16
+
+/* Current versions */
+#define OCTEON_PCIE_CONSOLE_MAJOR_VERSION	1
+#define OCTEON_PCIE_CONSOLE_MINOR_VERSION	0
+
+#define OCTEON_PCIE_CONSOLE_BLOCK_NAME		"__pci_console"
+
+/*
+ * Structure that defines a single console.
+ * Note: when read_index == write_index, the buffer is empty.
+ * The actual usable size of each console is console_buf_size -1;
+ */
+struct octeon_pcie_console {
+	u64 input_base_addr;
+	u32 input_read_index;
+	u32 input_write_index;
+	u64 output_base_addr;
+	u32 output_read_index;
+	u32 output_write_index;
+	u32 lock;
+	u32 buf_size;
+};
+
+/*
+ * This is the main container structure that contains all the information
+ * about all PCI consoles. The address of this structure is passed to various
+ * routines that operation on PCI consoles.
+ */
+struct octeon_pcie_console_desc {
+	u32 major_version;
+	u32 minor_version;
+	u32 lock;
+	u32 flags;
+	u32 num_consoles;
+	u32 pad;
+	/* must be 64 bit aligned here... */
+	/* Array of addresses of octeon_pcie_console_t structures */
+	u64 console_addr_array[0];
+	/* Implicit storage for console_addr_array */
+};
+
+struct octeon_pcie_console_priv {
+	struct octeon_pcie_console *console;
+	int console_num;
+	bool console_active;
+};
+
+/* Flag definitions for read/write functions */
+enum {
+	/*
+	 * If set, read/write functions won't block waiting for space or data.
+	 * For reads, 0 bytes may be read, and for writes not all of the
+	 * supplied data may be written.
+	 */
+	OCT_PCI_CON_FLAG_NONBLOCK = 1 << 0,
+};
+
+static int buffer_free_bytes(u32 buffer_size, u32 wr_idx, u32 rd_idx)
+{
+	if (rd_idx >= buffer_size || wr_idx >= buffer_size)
+		return -1;
+
+	return ((buffer_size - 1) - (wr_idx - rd_idx)) % buffer_size;
+}
+
+static int buffer_avail_bytes(u32 buffer_size, u32 wr_idx, u32 rd_idx)
+{
+	if (rd_idx >= buffer_size || wr_idx >= buffer_size)
+		return -1;
+
+	return buffer_size - 1 - buffer_free_bytes(buffer_size, wr_idx, rd_idx);
+}
+
+static int buffer_read_avail(struct udevice *dev, unsigned int console_num)
+{
+	struct octeon_pcie_console_priv *priv = dev_get_priv(dev);
+	struct octeon_pcie_console *cons_ptr = priv->console;
+	int avail;
+
+	avail = buffer_avail_bytes(cons_ptr->buf_size,
+				   cons_ptr->input_write_index,
+				   cons_ptr->input_read_index);
+	if (avail >= 0)
+		return avail;
+
+	return 0;
+}
+
+static int octeon_pcie_console_read(struct udevice *dev,
+				    unsigned int console_num, char *buffer,
+				    int buffer_size, u32 flags)
+{
+	struct octeon_pcie_console_priv *priv = dev_get_priv(dev);
+	struct octeon_pcie_console *cons_ptr = priv->console;
+	int avail;
+	char *buf_ptr;
+	int bytes_read;
+	int read_size;
+
+	buf_ptr = (char *)cvmx_phys_to_ptr(cons_ptr->input_base_addr);
+
+	avail =	buffer_avail_bytes(cons_ptr->buf_size,
+				   cons_ptr->input_write_index,
+				   cons_ptr->input_read_index);
+	if (avail < 0)
+		return avail;
+
+	if (!(flags & OCT_PCI_CON_FLAG_NONBLOCK)) {
+		/* Wait for some data to be available */
+		while (0 == (avail = buffer_avail_bytes(cons_ptr->buf_size,
+							cons_ptr->input_write_index,
+							cons_ptr->input_read_index))) {
+			mdelay(10);
+			WATCHDOG_RESET();
+		}
+	}
+
+	bytes_read = 0;
+
+	/* Don't overflow the buffer passed to us */
+	read_size = min_t(int, avail, buffer_size);
+
+	/* Limit ourselves to what we can input in a contiguous block */
+	if (cons_ptr->input_read_index + read_size >= cons_ptr->buf_size)
+		read_size = cons_ptr->buf_size - cons_ptr->input_read_index;
+
+	memcpy(buffer, buf_ptr + cons_ptr->input_read_index, read_size);
+	cons_ptr->input_read_index =
+		(cons_ptr->input_read_index + read_size) % cons_ptr->buf_size;
+	bytes_read += read_size;
+
+	/* Mark the PCIe console to be active from now on */
+	if (bytes_read)
+		priv->console_active = true;
+
+	return bytes_read;
+}
+
+static int octeon_pcie_console_write(struct udevice *dev,
+				     unsigned int console_num,
+				     const char *buffer,
+				     int bytes_to_write, u32 flags)
+{
+	struct octeon_pcie_console_priv *priv = dev_get_priv(dev);
+	struct octeon_pcie_console *cons_ptr = priv->console;
+	int avail;
+	char *buf_ptr;
+	int bytes_written;
+
+	buf_ptr = (char *)cvmx_phys_to_ptr(cons_ptr->output_base_addr);
+	bytes_written = 0;
+	while (bytes_to_write > 0) {
+		avail = buffer_free_bytes(cons_ptr->buf_size,
+					  cons_ptr->output_write_index,
+					  cons_ptr->output_read_index);
+
+		if (avail > 0) {
+			int write_size = min_t(int, avail, bytes_to_write);
+
+			/*
+			 * Limit ourselves to what we can output in a contiguous
+			 * block
+			 */
+			if (cons_ptr->output_write_index + write_size >=
+			    cons_ptr->buf_size) {
+				write_size = cons_ptr->buf_size -
+					     cons_ptr->output_write_index;
+			}
+
+			memcpy(buf_ptr + cons_ptr->output_write_index,
+			       buffer + bytes_written, write_size);
+			/*
+			 * Make sure data is visible before changing write
+			 * index
+			 */
+			CVMX_SYNCW;
+			cons_ptr->output_write_index =
+				(cons_ptr->output_write_index + write_size) %
+				cons_ptr->buf_size;
+			bytes_to_write -= write_size;
+			bytes_written += write_size;
+		} else if (avail == 0) {
+			/*
+			 * Check to see if we should wait for room, or return
+			 * after a partial write
+			 */
+			if (flags & OCT_PCI_CON_FLAG_NONBLOCK)
+				goto done;
+
+			WATCHDOG_RESET();
+			mdelay(10);	/* Delay if we are spinning */
+		} else {
+			bytes_written = -1;
+			goto done;
+		}
+	}
+
+done:
+	return bytes_written;
+}
+
+static struct octeon_pcie_console_desc *octeon_pcie_console_init(int num_consoles,
+								 int buffer_size)
+{
+	struct octeon_pcie_console_desc *cons_desc_ptr;
+	struct octeon_pcie_console *cons_ptr;
+	s64 addr;
+	u64 avail_addr;
+	int alloc_size;
+	int i;
+
+	/* Compute size required for pci console structure */
+	alloc_size = num_consoles *
+		(buffer_size * 2 + sizeof(struct octeon_pcie_console) +
+		 sizeof(u64)) + sizeof(struct octeon_pcie_console_desc);
+
+	/*
+	 * Allocate memory for the consoles.  This must be in the range
+	 * addresssible by the bootloader.
+	 * Try to do so in a manner which minimizes fragmentation.  We try to
+	 * put it at the top of DDR0 or bottom of DDR2 first, and only do
+	 * generic allocation if those fail
+	 */
+	addr = cvmx_bootmem_phy_named_block_alloc(alloc_size,
+						  OCTEON_DDR0_SIZE - alloc_size - 128,
+						  OCTEON_DDR0_SIZE, 128,
+						  OCTEON_PCIE_CONSOLE_BLOCK_NAME,
+						  CVMX_BOOTMEM_FLAG_END_ALLOC);
+	if (addr < 0) {
+		addr = cvmx_bootmem_phy_named_block_alloc(alloc_size, 0,
+							  0x1fffffff, 128,
+							  OCTEON_PCIE_CONSOLE_BLOCK_NAME,
+							  CVMX_BOOTMEM_FLAG_END_ALLOC);
+	}
+	if (addr < 0)
+		return 0;
+
+	cons_desc_ptr = cvmx_phys_to_ptr(addr);
+
+	/* Clear entire alloc'ed memory */
+	memset(cons_desc_ptr, 0, alloc_size);
+
+	/* Initialize as locked until we are done */
+	cons_desc_ptr->lock = 1;
+	CVMX_SYNCW;
+	cons_desc_ptr->num_consoles = num_consoles;
+	cons_desc_ptr->flags = 0;
+	cons_desc_ptr->major_version = OCTEON_PCIE_CONSOLE_MAJOR_VERSION;
+	cons_desc_ptr->minor_version = OCTEON_PCIE_CONSOLE_MINOR_VERSION;
+
+	avail_addr = addr + sizeof(struct octeon_pcie_console_desc) +
+		num_consoles * sizeof(u64);
+
+	for (i = 0; i < num_consoles; i++) {
+		cons_desc_ptr->console_addr_array[i] = avail_addr;
+		cons_ptr = (void *)cons_desc_ptr->console_addr_array[i];
+		avail_addr += sizeof(struct octeon_pcie_console);
+		cons_ptr->input_base_addr = avail_addr;
+		avail_addr += buffer_size;
+		cons_ptr->output_base_addr = avail_addr;
+		avail_addr += buffer_size;
+		cons_ptr->buf_size = buffer_size;
+	}
+	CVMX_SYNCW;
+	cons_desc_ptr->lock = 0;
+
+	return cvmx_phys_to_ptr(addr);
+}
+
+static int octeon_pcie_console_getc(struct udevice *dev)
+{
+	char c;
+
+	octeon_pcie_console_read(dev, 0, &c, 1, 0);
+	return c;
+}
+
+static int octeon_pcie_console_putc(struct udevice *dev, const char c)
+{
+	struct octeon_pcie_console_priv *priv = dev_get_priv(dev);
+
+	if (priv->console_active)
+		octeon_pcie_console_write(dev, 0, (char *)&c, 1, 0);
+
+	return 0;
+}
+
+static int octeon_pcie_console_pending(struct udevice *dev, bool input)
+{
+	if (input) {
+		udelay(100);
+		return buffer_read_avail(dev, 0) > 0;
+	}
+
+	return 0;
+}
+
+static const struct dm_serial_ops octeon_pcie_console_ops = {
+	.getc = octeon_pcie_console_getc,
+	.putc = octeon_pcie_console_putc,
+	.pending = octeon_pcie_console_pending,
+};
+
+static int octeon_pcie_console_probe(struct udevice *dev)
+{
+	struct octeon_pcie_console_priv *priv = dev_get_priv(dev);
+	struct octeon_pcie_console_desc *cons_desc;
+	int console_count;
+	int console_size;
+	int console_num;
+
+	/*
+	 * Currently only 1 console is supported. Perhaps we need to add
+	 * a console nexus if more than one needs to be supported.
+	 */
+	console_count = 1;
+	console_size = 1024;
+	console_num = 0;
+
+	cons_desc = octeon_pcie_console_init(console_count, console_size);
+	priv->console =
+		cvmx_phys_to_ptr(cons_desc->console_addr_array[console_num]);
+
+	debug("PCI console init succeeded, %d consoles, %d bytes each\n",
+	      console_count, console_size);
+
+	return 0;
+}
+
+static const struct udevice_id octeon_pcie_console_serial_id[] = {
+	{ .compatible = "marvell,pci-console", },
+	{ },
+};
+
+U_BOOT_DRIVER(octeon_pcie_console) = {
+	.name = DRIVER_NAME,
+	.id = UCLASS_SERIAL,
+	.ops = &octeon_pcie_console_ops,
+	.of_match = of_match_ptr(octeon_pcie_console_serial_id),
+	.probe = octeon_pcie_console_probe,
+	.priv_auto = sizeof(struct octeon_pcie_console_priv),
+};
diff --git a/include/configs/octeon_nic23.h b/include/configs/octeon_nic23.h
new file mode 100644
index 0000000..0a7b4d8
--- /dev/null
+++ b/include/configs/octeon_nic23.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019-2020
+ * Marvell <www.marvell.com>
+ */
+
+#ifndef __CONFIG_H__
+#define __CONFIG_H__
+
+/*
+ * SATA/SCSI/AHCI configuration
+ */
+/* AHCI support Definitions */
+/** Enable 48-bit SATA addressing */
+#define CONFIG_LBA48
+/** Enable 64-bit addressing */
+#define CONFIG_SYS_64BIT_LBA
+
+#include "octeon_common.h"
+
+#endif /* __CONFIG_H__ */
diff --git a/include/dt-bindings/clock/sun8i-r40-ccu.h b/include/dt-bindings/clock/sun8i-r40-ccu.h
index 4fa5f69..d7337b5 100644
--- a/include/dt-bindings/clock/sun8i-r40-ccu.h
+++ b/include/dt-bindings/clock/sun8i-r40-ccu.h
@@ -43,6 +43,10 @@
 #ifndef _DT_BINDINGS_CLK_SUN8I_R40_H_
 #define _DT_BINDINGS_CLK_SUN8I_R40_H_
 
+#define CLK_PLL_VIDEO0		7
+
+#define CLK_PLL_VIDEO1		16
+
 #define CLK_CPU			24
 
 #define CLK_BUS_MIPI_DSI	29
@@ -172,7 +176,7 @@
 #define CLK_AVS			152
 #define CLK_HDMI		153
 #define CLK_HDMI_SLOW		154
-
+#define CLK_MBUS		155
 #define CLK_DSI_DPHY		156
 #define CLK_TVE0		157
 #define CLK_TVE1		158
diff --git a/include/dt-bindings/interrupt-controller/arm-gic.h b/include/dt-bindings/interrupt-controller/arm-gic.h
index 1ea1b70..35b6f69 100644
--- a/include/dt-bindings/interrupt-controller/arm-gic.h
+++ b/include/dt-bindings/interrupt-controller/arm-gic.h
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /*
  * This header provides constants for the ARM GIC.
  */
@@ -7,14 +8,14 @@
 
 #include <dt-bindings/interrupt-controller/irq.h>
 
-/* interrupt specific cell 0 */
+/* interrupt specifier cell 0 */
 
 #define GIC_SPI 0
 #define GIC_PPI 1
 
 /*
  * Interrupt specifier cell 2.
- * The flaggs in irq.h are valid, plus those below.
+ * The flags in irq.h are valid, plus those below.
  */
 #define GIC_CPU_MASK_RAW(x) ((x) << 8)
 #define GIC_CPU_MASK_SIMPLE(num) GIC_CPU_MASK_RAW((1 << (num)) - 1)
diff --git a/include/dt-bindings/thermal/thermal.h b/include/dt-bindings/thermal/thermal.h
index b5e6b00..bc7babb 100644
--- a/include/dt-bindings/thermal/thermal.h
+++ b/include/dt-bindings/thermal/thermal.h
@@ -1,10 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
 /*
  * This header provides constants for most thermal bindings.
  *
  * Copyright (C) 2013 Texas Instruments
  *	Eduardo Valentin <eduardo.valentin@ti.com>
- *
- * GPLv2 only
  */
 
 #ifndef _DT_BINDINGS_THERMAL_THERMAL_H
